51单片机,串口通信一般接受数据,用串口中断,发送数据用查询就行了,

但是现在我用查询方式发送,出现发送数据丢失现象,比如每次发送一串数据9个字节,接受会发现少一个。现在想改为中断方式发送。怎么写,每一秒发送一次就行。我定时器一秒读一次传感器数据,我一次发送9个字节的数据.现在我接受中断函数是这样的,怎么改,把发送功能也加到这个串口中断里面。
//串口中断入口函数
void com_isr(void) interrupt 4
{

if(RI){
RI=0; //将寄存器复位等待接收下一个
ldata=SBUF; //将接收的数据存于变量中
}

if(TI)//我在定时器中断里面把ti置1,但是不行。
{
......//发送子函数。
}
}

void com_isr(void) interrupt 4
{
//接收函授
RI=0; //将寄存器复位等待接收下一个
ldata=SBUF; //将接收的数据存于变量中
//发送子函数。
TI=0;
SBUF=ldata;
}
主函授中要加一句SBUF=ldata;
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-10
bit busy=0;
unsigned char i;
void com_isr(void) interrupt 4
{

if(RI){
RI=0; //将寄存器复位等待接收下一个
ldata=SBUF; //将接收的数据存于变量中
}

if(TI)//我在定时器中断里面把ti置1,但是不行。
{
TI=0;
busy=1;
}
}

main()
{
.............
for(i=0;i<9;i++)
{
SBUF=dat[i];
while(busy==0);

busy=0;
}

}本回答被提问者和网友采纳
第2个回答  2014-06-03
整个发送,接收数据的函数都发上来。。。肯定是可以的嘛!1
第3个回答  2014-06-03
你串口初始化程序呢.是不是已经设置成9位的呢
相似回答