新手自学到串口通信那部分,用了教程里面的发送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;
- }
-
- }
复制代码
|