求助,关于51单片机串口通信的问题
时间:10-02
整理:3721RD
点击:
看着郭天祥的视频例程,照着写了一个串口通信的程序,可是问题出现了:单片机只能接收一次数据,以后无论重启还是神马发送给单片机数据就是什么反应液没有,求大神们帮忙。
#include<reg52.h>
unsigned char flag,a;
void main()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
if(RI==1)
{
RI=0;
P1=SBUF;
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
}
#include<reg52.h>
unsigned char flag,a;
void main()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
if(RI==1)
{
RI=0;
P1=SBUF;
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
}
正在学习。诶
你是怎么知道收能收到一组数据的,看一下电路连接有问题没有,直接用示波器看一下串口线上的数据没
没有TI
//////
我也试了,当单片机接受PC机数据时,只能接受第一次,后来就没反应,按复位键再发送也没有反应。现在我能解决的办法就是:单片机每接受一次的时候,都要重复操作一次:关闭串口和开启串口按钮。这就行了,但是比较麻烦,我想会不会是SBUF每操作一次都要进行清空,不然超过两字节你送给流水灯显示就没效果了。而且你的程序应该把查询法和中断法分开,因为是两种方法,但这不是问题的关键!而且我试了当单片机往PC机上发数据就好用多了!希望有感悟再交流!
TI是只有串口发送完的时候才硬件TI置1,再软件清0 。在单片机接收串口通信数据的时候用不到TI发送中断标志位,因为此时是接收!