导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→串口求助

* 105248: 串口求助

   yenongqing 
yenongqing发表的帖子 

 串口求助
做串口通讯时 有个问题向大家请教:
写了一个接受中断函数
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

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:关于nandflash文件系统的问题我现在在做博创的mp3diy,但有好多问题,去博创论坛也没人回答
[下一篇帖子]:[建议]我也在找呢,谁知道啊顶