单片机串口通信 为什么单片机发出的字节最后会自带0XFF
程序代码如下:
- #include <REG52.H>
- #define uchar unsigned char
- uchar a,flag,i;
- uchar code table[]={0xff,0x01,0x00,0x00,0x02,0x00,0x00,0x03,0x00,0x00,0x04,0x00,0x00,0xee};
- void main()
- {
- TMOD=0x20;//定时器工作方式,8位数据自动重装
- TH1=0xFD;//高8位,低8位装入的初值一样
- TL1=0xFD;//串口通信方式为1,波特率为9600bps,装入初值;
- //SMOD所在的PCON寄存器中的值默认为0,所以SMOD为0;
- TR1=1;//打开定时器
- REN=1;//打开串口允许接收位
- SM0=0;//串口通信方式为1
- SM1=1;
- EA=1;//打开总中断
- ES=1;//串口中断允许位
- while(1)
- {
- if(flag==1)//中断函数开始
- {
- ES=0;//关闭中断允许位,防止出错
- for(i=0;i<14;i++)//传送固定字符位
- {
- SBUF=table[i];
- while(!TI);//判断有无中断申请
- TI=0;//传输数据后清零
- }
- SBUF=a;//将期望字符送给传送SBUF缓冲寄存器
- while(!TI);//传输申请中断
- TI=0;//清零
- ES=1;//串口中断允许位
- flag=0;//标志位清零
- }
- }
- }
- void ser() interrupt 4
- {
- RI=0;//将要接收数据中断申请,RI清零
- P1=SBUF;
- a=SBUF;//SBUF中为接收的数据
- flag=1;//标志位置1
- }
复制代码
|