您的位置:首页 > 编程语言

单片机编程C51疑难解析(不断更新中)

2013-07-22 10:17 453 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: