串口助手。發送一次字符 能收到數據。但是顯示一直發送中。不知道什么原因TI沒有置為1 導致一直發送中。。。再給單片機發送數據就收不到數據了。- #include <reg52.h>
-
- #define uchar unsigned char
- #define uint unsigned int
- uchar buf;
- //volatile unsigned char sending;
- sbit led=P1^0;
- sbit sending = P1^1;
- //申明函數
- void delay(unsigned char i);
- void send(uchar d);
- void initUart(void);
- void main(void)
- {
- //初始化串口
- initUart();
- while(1);
- }
- //初始化串口 9600
- void initUart(void){
- SCON=0x50;
- PCON=0x00;
-
- TMOD=0x20;
- EA=1;
- ES = 1;
- TL1=0xfd;
- TH1=0xfd;
- TR1=1;
- led = 0;
- sending = 0;
- }
- //發送一個字節的數據,形參d即為待發送數據。
- void send(uchar d)
- {
- sending=1; //設置發送標志
- SBUF=d; //將數據寫入到串口緩沖
- while(sending); //等待發送完畢
- }
- /**
- * 延時函數
- **/
- void delay(unsigned char i)
- {
- uchar j,k;
- for(j=i;j>0;j--)
- for(k=125;k>0;k--);
- }
- /*********************************************************
- 串口接收
- *********************************************************/
- void serial() interrupt 4
- {
- //收到數據
- if(RI){
- RI=0; //清中斷請求
- buf = SBUF;
- send(buf);
- }
-
- if(TI){
- TI=0;
- sending=0; //清正在發送標志
- }
- }
復制代碼
|