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了。
明天调好这个,再做做收发,就先做自收发吧!
调通了网上原程序。这个也通了。可实现上述功能,不过程序做的是点亮后,延时会熄灭。
#include
#define uchar unsigned char
#define uint
sbit Led = P0^0;
Delay()
{ int i,j;
}
{
}
{
if(TI)
TI=0;
}
}
其实,开始我自己做的程序也行。错就错在关于m判断上。我以前写的是if(m==1),而从串口发31或1.而在C中,它只能判定16进制和10进制,所以我的ASCII 收成10进制是49,收成16进制是31,怎么也不会等于1.而把if(m==1)改成if(m==0x31)一试OK了。
51串口收 相关文章:
- 51 串口收发程序源代码 环形缓冲区实现(12-02)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)