Board logo

标题: 为什么位寻址的变量,这么赋值不行?? [打印本页]

作者: dragontan    时间: 2005-8-9 14:23     标题: 为什么位寻址的变量,这么赋值不行??

unsigned char bdata Iostate;

unsigned char bdata bvar0;

sbit MsFlag = bvar0^5;    //0-ON , 1-OFF 5毫秒翻转标志

main()

{

unsigned char bdata *pp;
。。。。。。
pp = &Iostate;
  (*pp)^2=MsFlag;       //for syntax check

。。。。。。

      为什么这么写,  (*pp)^2=MsFlag;    这行会编译错误( TOUCH.C(938): error C141: syntax error near '=')?

      我这么写,有什么错误呢?!
作者: seuafu2005    时间: 2005-8-9 15:01

(*pp)^2=MsFlag;这个不符合C的语法,即使在VC编译器里面也通不过的。
作者: dragontan    时间: 2005-8-9 15:04

能不能说得明白一点,对于位寻址的变量,应该如何赋值?
作者: dragontan    时间: 2005-8-9 15:10

我改成 P0^2= MsFlag;  编译都会出错。

P0分明是可以位寻址的啊???  我该怎么理解?请解释,万分感谢
作者: seuafu2005    时间: 2005-8-9 16:54

/*** PTA - Port A Data Register ***/
typedef union {
  byte Byte;
  struct {
    byte PTA0    :1;           /* Port A Data Bit 0 */
    byte PTA1    :1;           /* Port A Data Bit 1 */
    byte PTA2    :1;           /* Port A Data Bit 2 */
    byte PTA3    :1;           /* Port A Data Bit 3 */
    byte PTA4    :1;           /* Port A Data Bit 4 */
    byte PTA5    :1;           /* Port A Data Bit 5 */
    byte PTA6    :1;           /* Port A Data Bit 6 */
    byte PTA7    :1;           /* Port A Data Bit 7 */
  } Bits;
  struct {
    byte PTA     :8;
  } MergedBits;
} PTASTR;
extern volatile PTASTR _PTA @0x00000000;
#define PTA _PTA.Byte
#define PTA_PTA0 _PTA.Bits.PTA0
#define PTA_PTA1 _PTA.Bits.PTA1
#define PTA_PTA2 _PTA.Bits.PTA2
#define PTA_PTA3 _PTA.Bits.PTA3
#define PTA_PTA4 _PTA.Bits.PTA4
#define PTA_PTA5 _PTA.Bits.PTA5
#define PTA_PTA6 _PTA.Bits.PTA6
#define PTA_PTA7 _PTA.Bits.PTA7
#define PTA_PTA _PTA.MergedBits.PTA

可以看一下用CW自动生成的定义方法。
假设PTA0置位可以这样写
PTA_PTA0=1;
作者: 天涯倦客    时间: 2005-8-10 08:02

codewarrior的每个MCU自动生成的头文件都有bit变量的表示方法.可以参照,
根据编译器的不同,bit寻址的表示方法也不同.你写的那中在keil编译器是这种表示方式如
sbit p10=P1^0;
但是你这句
(*pp)^2=MsFlag;
在哪里应该都是错误的.因为你(*pp)^2表示的是异或.




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0