Keil调试串口助手,单片机无法接收上位机发送的数据;但可以发送 PC发送数据时,单片机RX波形幅值太小

/*rx_flag,n为全局变量,PC发送数据“FM 11.6”*/
while(1);
{if (rx_flag)
{for(m=0;m<n;m++)
{if(m<8)
lcd_wcom(0x80+m);
else if(7<m<128)lcd_wcom(0xc0+m-7);
ms_delay(2);
lcd_wdata(rxbuf[m]);
}}}rx_flag=0;
}
void init_serialcom()
{TMOD=0x20;//timer1,mode2,8-bit reload
SCON=0x40;//串口工作方式1
PCON&=0x7F;//SMOD=0
TH1=0xfd;
TL1=0xfd;//9600 @11.0592MHZ
TR1=1;//timer1 run
ES=1;//开串口中断
EA=1;//开中断
}
/*----------------中断接收--------------------*/
void UART() interrupt 4
{ ES=0;//关中断
if (RI)
{RI=0;//接收引起中断
rxbuf[n]=SBUF;
while(!RI);//OK or NG???
n++;
}
if(n==7) rx_flag=1;
ES=1; }
问题出在protues,需在虚拟上位机选中仿真一项

试试这样:
void UART() interrupt 4
{
//ES=0;//关中断//不需要关中断
if (RI)
{RI=0;//接收引起中断
rxbuf[n]=SBUF;
//while(!RI);//OK or NG???//删除这句
n++;
}
if(n==7) {rx_fla=1;n=0;}//注意重置n
//ES=1;
}追问

请问一下如果用串口助手发送数据,protues能用视波器测试到准确的波形吗?

追答

亲爱的,你要弄清楚仿真的含义,就虚拟的环境下,它是可以的。
但,你现在涉及的可是真实的硬件,proteus可没有检测你实物串口的电路,既然没有检测电路,她如何显示你的波形呢?

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-17
如果你的问题没有解决的话,可以把你的仿真图和程序发到我的邮箱里,帮你研究一下。857656772追问

程式和电路都传过去,麻烦一下~

Keil调试串口助手,单片机无法接收上位机发送的数据;但可以发送 PC...
void UART() interrupt 4 { \/\/ES=0;\/\/关中断\/\/不需要关中断 if (RI){RI=0;\/\/接收引起中断 rxbuf[n]=SBUF;\/\/while(!RI);\/\/OK or NG???\/\/删除这句 n++;} if(n==7) {rx_fla=1;n=0;}\/\/注意重置n \/\/ES=1;}

电脑串口一直接收不了单片机发送过来的数据啊...
接收不了数据有几个方面的原因:第一:你的必须是RS232接口,也就是你的接口芯片与接口是否一致。第二:你的晶振与波特率是否对得上,看你的软件应该是11.0592M的晶振的配置。9600BPS的。看你的晶振是否对得上。第三:目前你不是采用的是中断,而是询问模式,所以,你确定一下是否可行;...

单片机通过串口向PC不间断发送变化的数据,PC接收总是延迟
如果你没办法更改上位机软件,那么你可以间隔发送,比如两包数据间隔为0.5S,或者找一款可以实时显示的调试助手,推荐使用ttermpro测试下

上位机一直在向单片机发送数据,串口中断怎么处理才能不影响其他功能程序...
第一:如果串口的数据是在你需要的时候才有用,这样你可以在需要的地方打开串口中断,在中断中判断接收的是不是所用串口数据的最后一个字节,如果是那么就关闭中断,如果不是那么就就会继续接收。这样会提高串口和单片机的工作效率。第二:如果串口数据是必须接收的,那么1楼和2楼所说的就不可以了,其实...

单片机与上位机进行串口通信,pc连续给单片机发oxbb直到收到0xaa,单片...
代码没写好嘛,当你的单片机接收到0xbb,发送一个0xaa给PC,这时应该清除你的单片机接收缓存,不然单片机接收的缓存一直是0xbb,当上位机还没接收代码的时候,单片机接收到0xbb的这个语句一直在执行嘛,单片机里代码执行了2遍了嘛。上位机的代码也是如此。看的懂?一句话就是应该用了就清除缓存。

单片机如何识别上位机发送的是指令还是数据
单片机接收数据,无论是中断接收,还是查询接收,通常都是根据接收标志位,来判断接收一个字节。写程序之前,都会根据接收数据长度建立一个接收数组,比如根据协议,应该接收25个字节,那就建立一个大于等于25个字节的数组,根据判断条件(可以根据长度判断,可以根据特定字节判断),完成25个字节的接收后,再...

单片机通过485如何避免通信冲突,比如要发送数据,但是串口在接受数据,这 ...
单片机通过485通信, 属于准双向通讯,在接收时不能发送,上位机与下位机通讯,一般为 上位机 发送 指令 或者 数据,下位机接收完成后 判断 是指令还是数据,并返回 执行状态 和 数据。就是 有接收完成 后 马上 返回数据 给 上位机。即 上位机与下位机的收发协议。如果 随意发送数据,那肯定会乱套...

匿名上位机和串口调试助手的区别
匿名上位机和串口调试助手的区别是:上位机是主机主设备。串口是一种通信接口。上位机向从机发送数据或从机读取数据时,需要串口相互交叉连接。串口调试助手就是相当于PC机,也就是上位机。通过串口和其它设备(比如单片机或仪器,甚至也可以是PC机)通信。在助手上可以收发,看出结果。

51单片机串行口发送数据到上位机(1)
51单片机的串行口结构主要包括两个独立的数据缓冲寄存器(SBUF)、发送控制器、接受控制器、输入移位寄存器以及控制门电路。发送数据时,数据首先被写入SBUF寄存器,随后通过转换为串行数据并加上起始位和停止位后,通过TXD引脚发送出去。接收数据时,RXD引脚接收到的信号通过移位寄存器被逐位读入SBUF,最终在...

串口调试助手发送一个16进制的数组 单片机怎么接受
给你一个单片机基础通讯程序和上位机串口调试程序,你试一下,在这个基础之上修改。

相似回答