串口求助
做串口通讯时 有个问题向大家请教:
写了一个接受中断函数
void getchar() interrupt 4 using 3
{
u_char i=0 ;
EA=0;
if(RI==1)
{
temp=SBUF; RecCharString[i]=temp; i++;RI=0;
}
if(i==8)
{ P3_4=1;
if( RecCharString[0]==0x5e)
{
if( RecCharString[1]==0xb0)//心跳
{
if( RecCharString[2]==0x00)
{
if(RecCharString[3]==0x04)
{
if(RecCharString[4]==0x00)
{
if(RecCharString[5]==0x00)
{
if(RecCharString[6]==0x01)
{
if(RecCharString[7]==0x12)
{
Xintiao=1;i=0;
}
}
}
}
}
}
}
}
}
EA=1;
}
结果整个程序单片机无法执行
去掉这个中断函数
其他的程序都可以执行
整个程序:
#include <reg51.h>
#define u_char unsigned char
#define u_int unsigned int
#define StringWidth 4
sbit P2_7=P2^7;
sbit P2_6=P2^6;
sbit P2_5=P2^5;
sbit P2_4=P2^4;
sbit P2_2=P2^2;
sbit P2_1=P2^1;
sbit P2_0=P2^0;
sbit P3_6=P3^6;
sbit P3_5=P3^5;
sbit P3_4=P3^4;
u_char temp; u_int ui;
u_char data SendCharString[StringWidth]={0x5e,0x03,0x00,0x04};
u_char data yangan[17]={0x5e,0x11,0x00,0x11,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
u_char data fanyangan[17]={0x5e,0x12,0x00,0x11,0x99,0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
u_char data hongwai[4]={0x5e,0x13,0x00,0x04};
u_char data fanhongwai[4]={0x5e,0x14,0x00,0x04};
u_char data DString[9]={0x5e,0x80,0x00,0x09,0x51,0x52,0x53,0x54,0x55};
u_char data RecCharString[8],CheckSum[StringWidth];
u_char data k,ro,d,f,flag=0,count=0,wanglo=0,Xintiao=0;
u_char data kaiguan0=1,kaiguan1=1;
u_char data fankaiguan0=1,fankaiguan1=1;
u_char data xintiaozhi[11]={0x5e,0x10,0x00,0x0b,0x99,0x99,0x99,0x00,0x00,0x00,0x00};
void delay1ms(void)
{
u_char data i;
for(i=0;i <=250;i++)
{;;}
}
void delay10ms(void)
{
u_char data j;
for(j=0;j <=10;j++)
{delay1ms();}
}
void send_char(u_char ch)
{
EA=0;
SBUF=ch;
while(TI==0);
TI=0;
EA=1;
}
void send_string(u_char *str, u_char strlen)
{
u_int k;
for(k=0;k <strlen;k++)
send_char(*(str + k)) ;
}
void JSCheckSum(u_char *str, u_char strlen)
{
u_char i;
u_int chushu=0,chushu1=0,chushu2=0,chushu3=0, sum=0;
for(i=0;i <strlen;i++)
sum=sum+str[i];
CheckSum[StringWidth-1]=sum%0x100;
chushu=sum/0x100;
CheckSum[StringWidth-2]=chushu%0x100;
chushu1=chushu/0x100;
CheckSum[StringWidth-3]=chushu1%0x100;
chushu2=chushu1/0x100;
CheckSum[StringWidth-4]=chushu2%0x100;
chushu3=chushu2/0x100;
}
void getchar() interrupt 4 using 3
{
EA=0;
if(RI==1)
{
RecCharString[count]=SBUF; count++; RI=0;
}
if(count==8)
{ P3_4=1;
if( RecCharString[0]==0x5e)
{
if( RecCharString[1]==0xb0)
{
Xintiao=1;count=0;
}
}
}
EA=1;
}
void sendxintiao()
{
if (Xintiao==1)
{
send_string(xintiaozhi,11);
JSCheckSum(xintiaozhi,11);
send_string(CheckSum,StringWidth);
Xintiao=0;
}
}
void monikaiguan0()
{
P2_4=1;P2_5=0;P2_6=0; delay10ms();
if((P2_0==0)&&(P2_1==1))
{
if(kaiguan0==1)
{
send_string(hongwai,4);
JSCheckSum(hongwai,4);
send_string(CheckSum,StringWidth);
kaiguan0=0;
fankaiguan0=1;
}
}
if((P2_0==1)&&(P2_1==0))
{
if(fankaiguan0==1)
{
send_string(fanhongwai,4);
JSCheckSum(fanhongwai,4);
send_string(CheckSum,StringWidth);
kaiguan0=1;
fankaiguan0=0;
}
}
}
void monikaiguan1()
{
P2_4=0;P2_5=0;P2_6=0;
delay10ms();
if((P2_0==1)&&(P2_1==0))
{
if(kaiguan1==1)
{
send_string(yangan,17);
JSCheckSum(yangan,17);
send_string(CheckSum,StringWidth);
kaiguan1=0;
fankaiguan1=1;
}
}
if((P2_0==0)&&(P2_1==1))
{
if(fankaiguan1==1)
{
send_string(fanyangan,17);
JSCheckSum(fanyangan,17);
send_string(CheckSum,StringWidth);
kaiguan1=1;
fankaiguan1=0;
}
}
}
void init_serialcomm()
{
SCON=0x50;
PCON=0x80;
TMOD=0x20;
TH1=0xF3;
TL1=0xF3;
IE=0x90;
TR1=1;
}
void sendwanglo()
{
if(wanglo==0)
{ P3_4=1;
send_string(SendCharString,StringWidth);
JSCheckSum(SendCharString,StringWidth);
send_string(CheckSum,StringWidth);
wanglo=1;
}
}
void sendshuju()
{
if(flag==1)
{
send_string(DString,9);
JSCheckSum(DString,9);
send_string(CheckSum,StringWidth);
flag=0;
}
}
void main()
{ P3_4=0;
init_serialcomm();
while(1)
{
sendwanglo(); P3_5=0;
sendshuju(); P3_6=0;
sendxintiao();
monikaiguan1();
delay10ms();
monikaiguan0();
delay10ms();
};
}
发表时间:2007年4月27日14:27:57