芯片是IAP15F2K616S2,与计算机串口通信,能够收到RI的中断,但是无法读出SBUF寄存器中的数据,读出来的是零,这是怎么回事?
第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; //重新开启中断
}
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的电平是不一样的吧……
可以用单片机串口发送数据,在上位机用串口调试助手用不同的波特率尝试接收,确认你现在单片机串口波特率配置是否与你预期的一致。
最后,我小心翼翼地问你一句:硬件是怎么接线的,单片机收发经过了232收发器没有……你应该知道TTL与232的电平是不一样的吧……