单片机串行通信的程序
来源:百度知道 编辑: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)不能成立,是为什么?
{
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没定义,别的应该没有问题