1.
a|=b
即a=a|b。新的a 等于 原来的a|b。
&是一个位运算符,就是将两个二进制的数逐位相与,就是都是1才是1,只要有一个为0则为0,结果是相与之后的结果。
&&是一个逻辑运算符,就是判断两个表达式的真假性,只有两个表达式同时为真才为真,有一个为假则为假,具有短路性质。
2.
while(*p&&*p=='*')
//等价于
while(*p!='\0'&&*p=='*')
//还等价于
while(*p=='*')
//表示当*p等于'*'时执行循环体。
3.
#define是宏定义语句
想做的是位操作,应该改将#define LED P1^1
#define KEY_ON P1^6
#define KEY_OFF P1^7
改为
sbit LED = P1^1;
sbit KEY_ON = P1^6;
sbit KEY_OFF = P1^7;
这样文中的“=”就不违法了
4.
TF0=0;
它的作用是:当定时器0溢出时,由硬件使TF0置1,并申请中断,进入中断服务程序后,由硬件自动清0.要注意:如果使用的是软件查询方式的话,当查询到该为置1后得用软件清0.
5. while(!TI);//while(TI==0)
TI=0;
TI是串口的发送中断标志位,需软件清零
while(TI==0);//表示等待发送结束
TI=0;//表示软件清零
TI是单片机的串口发送数据的标志位,当单片机发送数据后将TI置1,需要软件清0
那么while(!TI)的意思也就是当单片机未发送数据所要执行的程序。
6.复合赋值运算符
a+=b------a=a+b; a%=b-------a=a%b; a<<=b--------a=a<<b等等,还有a-=b;a/=b;a*=b;a>>=b
对于初学者可能不太习惯,但是非常有利于编译处理,能够提高编译效率便产生高质量的目标代码。
7.
SDA=(bit)(input&0x80) input & 0x80 意思是取得 该字节的最高位 加一个bit 意思是 bit强类型转化 如果 最高位是1那么 sda=1 如果最高位不是1那么sda=0
8.宏定义#define FOSC 18432000L和#define BAUD 9600?
FOSC是根据IC外部实际使用的晶振来定义的,因为STC的下载版上都是使用的18.432M的晶振,所以会定义FOSC为18432000L 如果你外部挂的是11.0592M的晶振,那么就需要这样定义 #define FOSC 11059200L BAUD的定义则是根据你与电脑串口所通讯的具体的波特率, 若使用9600的波特率,则定义为 #define BAUD 9600 若使用115200的波特率,则定义为 #define BAUD 115200