为什么51单片机一上电就进一次串口接受中断 5
voidmain(){EA=0;port_init();OSC_init();EA=1;timer1_init();uart0_init();CLRDog();Forbi...
void main()
{
EA=0;
port_init();
OSC_init();
EA=1;
timer1_init();
uart0_init();
CLRDog();
ForbidDog();
i=0;
while(1)
{
uart0_tx();
}
}
/*
函数:uart0中断函数
*/
void uart0_rx() interrupt 4
{
RI0=0; //清除串口中断标志
P4=0x25;
RXBUFFER[i]=SBUF0;
i+=1;
if(i==16)
{
i=0;
P4=0x33;
}
}
void uart0_tx()
{
if((RXBUFFER[0]==0x68)&&(RXBUFFER[15]==0x16))
{
P5=0x25;
for(j=0;j<16;j+=1)
{
SBUF0=0x68; //收什么发什么
while(TI0==0); //等到TI0=1
TI0=0; //清发送中断标志位
}
P5=0x33;
}
else
return;
}
吧发送函数屏蔽就可以 为什么啊
大神解释啊 展开
{
EA=0;
port_init();
OSC_init();
EA=1;
timer1_init();
uart0_init();
CLRDog();
ForbidDog();
i=0;
while(1)
{
uart0_tx();
}
}
/*
函数:uart0中断函数
*/
void uart0_rx() interrupt 4
{
RI0=0; //清除串口中断标志
P4=0x25;
RXBUFFER[i]=SBUF0;
i+=1;
if(i==16)
{
i=0;
P4=0x33;
}
}
void uart0_tx()
{
if((RXBUFFER[0]==0x68)&&(RXBUFFER[15]==0x16))
{
P5=0x25;
for(j=0;j<16;j+=1)
{
SBUF0=0x68; //收什么发什么
while(TI0==0); //等到TI0=1
TI0=0; //清发送中断标志位
}
P5=0x33;
}
else
return;
}
吧发送函数屏蔽就可以 为什么啊
大神解释啊 展开
3个回答
展开全部
void uart0_rx() interrupt 4
串口中断没有清除中断标志。
串口中断没有清除中断标志。
更多追问追答
追问
RI0=0; 这不是请了吗
追答
是不是初始化有问题啊
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
EA=1挪到主循环前一行,
在EA=1之前,把TI、RI都给清下
在EA=1之前,把TI、RI都给清下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询