先放一段程序:
#include <msp430.h>
int main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW+WDTHOLD; // Stop WDT
P1DIR |= BIT0; // P1.0 set as output
while(1) // continuous loop
{
P1OUT = ^BIT0; // XOR P1.0
for(i=50000;i>0;i–); // Delay
}
}
P1DIR的物理地址为0X0204,BIT0为CCS5.3定义为0X0001;P1OUT物理地址为0X0202;
按照C语言法则:
P1DIR |= BIT0; 则可解释0X0204或上0X0001,则为0X0205;
P1OUT = ^BIT0; 同理0X0202异或0X0001,则为0X0203;
但是始终觉得应该不是这样子理解的,要不然就物理地址跟赋值都交叉在一起拉,可是我又不知道怎么解释!!!
Shi JianHua:
此命令只能理解为430的位操作指令,16位的单片机,没有单独的位操作,所以用与或运算代替,
P1DIR |= BIT0; 则可解释P1DIR 这个寄存器里面的值和 BIT0相或的结果付给P1DIR ;
P1OUT = ^BIT0; 同理P1OUT 这个寄存器里面的值和 BIT0相或的结果付给P1OUT ;
Shi JianHua:
回复 Shi JianHua:
刚才错了,都是拷贝惹的祸。
此命令只能理解为430的位操作指令,16位的单片机,没有单独的位操作,所以用与或运算代替,
P1DIR |= BIT0; 则可解释P1DIR 这个寄存器里面的值和 BIT0相或的结果付给P1DIR ;
P1OUT = ^BIT0; 同理P1OUT 这个寄存器里面的值和 BIT0相异或的结果付给P1OUT ;就是P1.0电平翻转一下。
yffy:
应该理解为地址的内容和BIT0或