单片机串口接收多字节数据
时间:10-02
整理:3721RD
点击:
通过串口调试助手向单片机发送11字节数据,帧头为16进制 05,00,00,
我的程序收不到数据是什么情况?求帮助
void Com_Service(void) interrupt 4
{
uchar j;
RI=0;
rcv_dat[j]=SBUF;
if(j==0&&rcv_dat[j]==0x05)
{j=1;}
else if(j==1&&rcv_dat[j]==0x00)
{j=2;}
else if(j==2&&rcv_dat[j]==0x00)
{j=3;
for(j=3;j<11;j++)
{rcv_dat[j]=SBUF;}
Receive_Bflag = 1;
}
else
{
j=0;
}
ES=0;//关中断,数据发送完成以后再开中断
}
我的程序收不到数据是什么情况?求帮助
void Com_Service(void) interrupt 4
{
uchar j;
RI=0;
rcv_dat[j]=SBUF;
if(j==0&&rcv_dat[j]==0x05)
{j=1;}
else if(j==1&&rcv_dat[j]==0x00)
{j=2;}
else if(j==2&&rcv_dat[j]==0x00)
{j=3;
for(j=3;j<11;j++)
{rcv_dat[j]=SBUF;}
Receive_Bflag = 1;
}
else
{
j=0;
}
ES=0;//关中断,数据发送完成以后再开中断
}
谢谢分享
中断程序里面把中断关了,在哪里开中断。
还有,单片机的中断是每接收到一个字节就会产生一次中断。你的程序本身很有问题。
这种程序网上应该有很多,看一看别人的中断服务程序怎么写的。
数据处理完以后 把中断打开的。
void Com_Service(void) interrupt 4
{
if (RI)
{
rcv_dat[j]=SBUF;
RI=0;
j++;
}
Receive_Bflag = 1;
}我用这种方式就可以收到11字节数据,但上边的方法就不行
是你中断服务程序中判断条件的问题
你看一下两段程序关于RI使用的区别就知道了。每接收一个字节都要把RI清零并等待RI置一后接受下个字节。你前面的程序直接就连续接受后面字节了。
学习了
表示不解,学习中!
if(j==0&&rcv_dat[j]==0x05)
{j=1;}
else if(j==1&&rcv_dat[j]==0x00)
{j=2;}
else if(j==2&&rcv_dat[j]==0x00)
这几个判断条件是干嘛用的。
for循环那里传送多位数据好像有点问题
可以用C自带的标准函数库:stdio.h中 printf()函数;
中断程序中,十个字节数据收完后,标志位置1
现在我也遇到这样的一个问题,实在是没有什么方案可以完成这样的接收工作.查资料中.
6666666666666666666666666