您的位置 首页 模拟

51学习之串口收发

自己写了个接收程序,流程是上位机发给单片机,如果收到的是1,就点亮一个LED,同时把收到的再发到串口。编译不通过,原因是我把中断函数、

自己写了个接纳程序,流程是上位机发给单片机,假如收到的是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了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/261126.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部