单片机串行通信的程序

来源:百度知道 编辑:UC知道 时间:2024/06/23 20:27:30
void main()
{
Init_UART();//串口初始化
Init_Timer0(); //初始化中断
EA=1;

while(1)
{

if(a==b)
{

a=0;
P0^=0x11;
delay_ms(50);
}

}

}
//定时器0中断
void Timer1_isr(void) interrupt 1 using 1
{
TH0 = 0xfc;
TL0 = 0x50; //定时1ms

a=a+1;

}

//串口中断函数
void UART_isr(void) interrupt 4 using 3
{
EA=0;
if (RI)
{

dat=SBUF;
SBUF=dat;
RI = 0 ;

}
b=dat;
EA=1;
}
请问哪位高手可以帮忙看看,这个程序有什么问题?其中的条件 if(a==b)不能成立,是为什么?

那个,
你的串口中断后,就把总中断屏蔽了,定时器永远也进不了中断,a的值恒为一个非0的值了。

条件 RI 什么时候成立??

串口中断后,关闭总中断,然后在打开总中断,这样是可以的,可能是你的a定义很大,串口中断时a>b;下一次a==b要等很久,建议发一下完整程序

a,b,dat没定义,别的应该没有问题