微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51学习之串口收发

51学习之串口收发

时间:11-23 来源:互联网 点击:
自己写了个接收程序,流程是上位机发给单片机,如果收到的是1,就点亮一个LED,同时把收到的再发到串口。编译不通过,原因是我把中断函数、接收函数等前加了个void,一直不明白加与不加有何区别。明天上网查下。去掉,有报警,但是编译能通过,下进去,果然没有预期的结果。也不知道到底是啥毛病,明天再找吧!
明天调好这个,再做做收发,就先做自收发吧!

调通了网上原程序。这个也通了。可实现上述功能,不过程序做的是点亮后,延时会熄灭。

#include
#define uchar unsigned char
#define uint unsigned int
sbit Led = P0^0;
Delay()
{ int i,j;
for(i=0;i<5000;i++)
{
for(j=0;j<30;j++);
}
}

Uart_int()
{ SCON=0x50;
TMOD=0x20;
TH1 =0xfd;
TL1 =0xfd;
IE =0x90;
TR1 =1;
}
UART_interrupt() interrupt 4
{ char m;
ES = 0;
if(TI)
{
TI=0;
}
else
{
RI=0;
m=SBUF;

if(m==0x31)
{
Led=0;
Delay();
Led=1;
}
SBUF=m;
}
ES = 1;
}

其实,开始我自己做的程序也行。错就错在关于m判断上。我以前写的是if(m==1),而从串口发31或1.而在C中,它只能判定16进制和10进制,所以我的ASCII 收成10进制是49,收成16进制是31,怎么也不会等于1.而把if(m==1)改成if(m==0x31)一试OK了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top