單片機串口通信 為什么單片機發出的字節最后會自帶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
- }
復制代碼
|