新手自學到串口通信那部分,用了教程里面的發送a數據的串口通信程序例子,串口調試助手可以顯示數據a。然后我自己嘗試寫了,當a = 0x01 led亮,但是串口調試助手有顯示接收到的數據,可是開發板的燈卻沒亮。 下面是程序,先謝謝論壇中的為我解答的人
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //#define LED P1
- uchar dat,num = 0,a=0;
- uchar ON = 0;
- uchar OFF = 1;
- sbit led1 = P1^0;
- void initial_com();
- void delay(unsigned int z); // 忽略這延時,本來還想用串口通信實現呼吸流水之類的,現在連燈亮都不行
- void delay2(unsigned int t);
- void initial_com(void)
- { SCON = 0x50;
- TMOD|= 0x20; //設置波特率 9600
- TH1 = 0xfd;
- TL1 = 0xfd;
- TR1 = 1;
- REN = 1; //串口初始化
- SM0 = 0;
- SM1 = 1;
- EA = 1;
- ES = 0; //串口中斷開啟位
- SBUF = 0x01; //開發板開關開啟接收到,01 FF數據
- while(!TI);
- TI = 0;
- ES = 1;
- }
- void main()
- {
- initial_com();
- while(1)
- {
- if(num==1)
- {
- ES = 0;
- num = 0;
- SBUF = a; //
- while(!TI);
- TI = 0;
- ES = 1;
-
- }
-
- }
- }
- void ser() interrupt 4
- {
- RI=0;
- a = SBUF;
- // ES=0; //關閉串口中斷
- num=1;
- /*在調試助手上確實可以顯示接收到 0x01 ,但是燈沒亮*/
- if(a == 0x01)
- {
- led1 = 0;
- }
- if(a == 0x02)
- {
- led1 = 1;
- }
-
- }
復制代碼
|