51单片机与计算机串口通信无法读出数据?

芯片是IAP15F2K616S2,与计算机串口通信,能够收到RI的中断,但是无法读出SBUF寄存器中的数据,读出来的是零,这是怎么回事?

答:
1 判断你的硬件有没有问题;方法是 用跳线讲串口的pin2 和pin3短接,用串口调试助手发送数据看调试助手能不 能自己收到,能就说明是单片机程序有问题
2 你检查你的波特率是生成程序是否正确, 中断和主程序用 1楼给你程序,我看了 没问题。
这样就可以实现串口通信
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-09-27
你首先应该确认上位机与你的接口芯片正确链接,然后确认接口芯片与单片机正确连接,确认信号正确进入引脚后再检查串口配置,波特率,停止位数,字长,最后仿真确认正确发送到单片机。另外中断进入后进断点就无法接收后面字节,这些都要注意,调试还要具体问题具体分析,总之可以按照这个步骤排查,一定能找到问题。
第2个回答  2021-09-26
能收到RI的中断是什么意思?你试下
1.中断

void ser() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;//表明PC->MCU ok

}
2.在main里
if(flag==1)
{
ES=0;//把中断关了先,否则将不断从mcu 发数据

flag=0;//清标志
SBUF=a;//MCU->PC
while(!TI); //一直检测TI,为1,说明MCU->PC ok,跳出while

TI=0;
ES=1; //重新开启中断

}
第3个回答  2021-09-27
如果你通过调试能够判断,在上位机发送数据之后RI能够置位,但SBUF读出的数据不正确,那么接下来主要就是检查波特率的设置。
可以用单片机串口发送数据,在上位机用串口调试助手用不同的波特率尝试接收,确认你现在单片机串口波特率配置是否与你预期的一致。
最后,我小心翼翼地问你一句:硬件是怎么接线的,单片机收发经过了232收发器没有……你应该知道TTL与232的电平是不一样的吧……

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网