51单片机串口中断接收多个字节问题
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
char A[8],num;
sbit LED = P1^3;
void ck_zhongduan() interrupt 4
{
if(RI==1) //判断是否为接受
{
A[num++]=SBUF;
if(num>7)
{
num=0;
}
RI=0;
}
}
void uart()
{
SCON=0x50; //主程序开始进行配置
PCON=0x80;
TH1=243; //波特率为4800
TL1=243;
TMOD |=0x20; //配置定时器1:方式2
TR1=1;
ES=1;
EA=1;
}
void timer0()
{
TMOD |=0x01; //设T0为方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //允许T0中断
}
void main()
{
uart();
timer0();
while(1)
{
if((A[0]==0x23)&&(A[7]==0x26))
{
if(A[1]==0x23)
LED=0;
else
LED=1;
}
}
}
以上是我编写的程序,一次发8个字节,第1个字节和第8个字节为校验,当第二个字节为“#”时,LED亮,否则灭。可是我调试的时候,有的时候行,有时不行,求指教!
#define uchar unsigned char
char A[8],num;
sbit LED = P1^3;
void ck_zhongduan() interrupt 4
{
if(RI==1) //判断是否为接受
{
A[num++]=SBUF;
if(num>7)
{
num=0;
}
RI=0;
}
}
void uart()
{
SCON=0x50; //主程序开始进行配置
PCON=0x80;
TH1=243; //波特率为4800
TL1=243;
TMOD |=0x20; //配置定时器1:方式2
TR1=1;
ES=1;
EA=1;
}
void timer0()
{
TMOD |=0x01; //设T0为方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //允许T0中断
}
void main()
{
uart();
timer0();
while(1)
{
if((A[0]==0x23)&&(A[7]==0x26))
{
if(A[1]==0x23)
LED=0;
else
LED=1;
}
}
}
以上是我编写的程序,一次发8个字节,第1个字节和第8个字节为校验,当第二个字节为“#”时,LED亮,否则灭。可是我调试的时候,有的时候行,有时不行,求指教!
是不是接收的时候没有判断是否结束的问题