各位大侠,51单片机串口中断接收问题?为什么一个一个字节的发,串口都可以接收,而连续发4个十六进制
程序如下:#include<AT89X52.H>#include<string.h>intch=0,num=0,Rbuf_flag=0;unsignedcharRbuf[...
程序如下:
#include <AT89X52.H>
#include <string.h>
int ch=0,num=0,Rbuf_flag=0;
unsigned char Rbuf[10]={0};
void init_ser( void )
{
SCON=0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
//UART为模式1,8位数据,允许接收
TMOD=0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
//定时器1为模式2,8位自动重装
PCON=0x80 ; //SMOD=1;
TH1=0xFD ; //Baud:19200 fosc="11".0592MHz
IE=0x90 ; //Enable Serial Interrupt
TR1= 1 ; // timer 1 run
TI=1;
}
//串口接收中断函数
void serial() interrupt 4 using 3
{
if(RI==1)
{
RI=0;
ch=SBUF;
}
if(ch==0x05)
{
Rbuf_flag=1;
num=0;
}
if(Rbuf_flag==1)//开始标志位
{
Rbuf[num++]=ch; //接收0x05
}
if(ch==0x01)////////结束标志位
{
Rbuf_flag=0;
num=0;
}
SBUF= Rbuf[0];
while(TI== 0);
TI=0 ;
SBUF= Rbuf[1];
while(TI== 0);
TI=0 ;
SBUF= Rbuf[2];
while(TI== 0);
TI=0 ;
SBUF= Rbuf[3];
while(TI== 0);
TI=0 ;
}
main()
{
num=0;
init_ser(); //初始化串口
while(1);
}
上面的串口中断程序大意是当串口接收到0x05时,置开始标志位,开始接收数据,当接收到0x01时,接收结束。
问题是,我用串口调试助手一个一个字节的发,比如先发05,再发00,再发04,再发01,这样是没问题的,Rbuf数组依次接收到05,00,04,01。而如果是输上05000401,点击发送,单片机只能接收到前两个字节,后两个没有接收到,这是怎么回事呢? 展开
#include <AT89X52.H>
#include <string.h>
int ch=0,num=0,Rbuf_flag=0;
unsigned char Rbuf[10]={0};
void init_ser( void )
{
SCON=0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
//UART为模式1,8位数据,允许接收
TMOD=0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
//定时器1为模式2,8位自动重装
PCON=0x80 ; //SMOD=1;
TH1=0xFD ; //Baud:19200 fosc="11".0592MHz
IE=0x90 ; //Enable Serial Interrupt
TR1= 1 ; // timer 1 run
TI=1;
}
//串口接收中断函数
void serial() interrupt 4 using 3
{
if(RI==1)
{
RI=0;
ch=SBUF;
}
if(ch==0x05)
{
Rbuf_flag=1;
num=0;
}
if(Rbuf_flag==1)//开始标志位
{
Rbuf[num++]=ch; //接收0x05
}
if(ch==0x01)////////结束标志位
{
Rbuf_flag=0;
num=0;
}
SBUF= Rbuf[0];
while(TI== 0);
TI=0 ;
SBUF= Rbuf[1];
while(TI== 0);
TI=0 ;
SBUF= Rbuf[2];
while(TI== 0);
TI=0 ;
SBUF= Rbuf[3];
while(TI== 0);
TI=0 ;
}
main()
{
num=0;
init_ser(); //初始化串口
while(1);
}
上面的串口中断程序大意是当串口接收到0x05时,置开始标志位,开始接收数据,当接收到0x01时,接收结束。
问题是,我用串口调试助手一个一个字节的发,比如先发05,再发00,再发04,再发01,这样是没问题的,Rbuf数组依次接收到05,00,04,01。而如果是输上05000401,点击发送,单片机只能接收到前两个字节,后两个没有接收到,这是怎么回事呢? 展开
1个回答
意法半导体(中国)投资有限公司
2019-10-28 广告
2019-10-28 广告
意法半导体致力于引领单片机技术和产品的创新,推动生态系统的建设,为用户提供满意的产品和技术服务。意法半导体单片机产品线拥有业界宽广、极具创新力的32位产品系列 – STM32,覆盖超低功耗、超高性能方向,同时兼具一流的市场竞争力。STM32...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询