而你串口读出来的值为0x14,即为“0001 0100”,表明数据的第4位发生了变化,第4位是IdleIRQ,可以查询其对应的说明。
结合这两个,另外检查一下在复位前,前后几行程序做了什么动作,基本可以定位原因。
希望对你有帮助,祝早日解决。
看了一下,你的中断程序有问题
单片机的串口,每次只能接受一个字符,而你的程序是判断两个字符
if(UART_data!='\0'),这句是不能实现的,\0 是两个字符
还有你的中断内使用的一个变量 J,这是全局变量,使用后应该重新赋值
你的程序中并没有重新给J赋值的语句,所以你的程序中,J的值只会加不会减
就是无限制的累加,直到溢出,这是一个很大的错误,直接影响你的数据接收
而且程序中还缺少等待接收完成的语句,while(!RI),没有这句也可以接收
只是很容易出错,就是数据出现接收错误
接收的语句最好是这样写
若满意请记得采纳下
void UART_R(void) interrupt 4
{
if(RI==1)
{
UART_data=SBUF
while(!RI)
RI = 0
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)