打印

串口通信只接收到最后一个字符

[复制链接]
1522|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuezonggang|  楼主 | 2012-6-19 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我做一个液晶温度显示的系统,其中传感器用的是232通信,只要发送个固定命令,就返回温度值.我的思路是把接收到的10个固定数存入数组,然后直接对数组的数操作。问题是我用串口助手调试成功了,全部接收了,可是放到大程序里读出的数组第一个数总是应该接收的最后一个数!前面的数去哪里了呢?调试程序如下:用得串口2,STC12C5A60S2单片机。  急
   #include<reg52.h>
     
    #define uchar unsigned char
    #define uint  unsigned int
    void delay(unsigned int i);
    unsigned char code datr[]="in pv 01\r\n";
    unsigned char  data table[10];
    uint i;
    #define S2RI 0X01
    #define S2TI 0X02
//    bit  sendflag;
    sfr AUXR =0X8E;
    sfr S2CON=0X9A;
    sfr S2BUF=0X9B;
    sfr BRT  =0X9C;
    sfr IE2  =0XAF;
    sbit key=P0^0;
       bit  flag;
    uint redata,sendata;
    uchar L,f;
    /****************
    延时程序
    ***************/
void delay(unsigned int k)
{
unsigned char j;
for(k; k > 0; k--)
  for(j = 200; j > 0; j--) ;
}
     /*************
  串口2初始化
  ************/
     void  chuankou2chushihua()
{
        AUXR &=0XF7;
     S2CON =0X50;     //11.0592M,2400,1T模式
     BRT   =0X70;
        AUXR |= 0x04;
     AUXR |= 0x10;     
     IE2= 0X01;
     EA   = 1;
}
    /***************
发送程序
************/
      void uart_send(uchar dat)     
    {
    IE2=0;
    S2BUF=dat;         
    while(!(S2CON &S2TI));
    S2CON &=~S2TI;
       IE2=0x01;
    }
    void chuankou1chushihua()
{
   
        SCON = 0x50;                       
     TMOD|= 0x20;                           
  PCON|= 0x80;                                                         
  TH1  = 0xFD;           //19200波特率 11.0592,波特率加倍
  TL1  = 0xFD;
  TR1  = 1;                                                           
    // ES   = 1;                        
  EA   = 1;
}   /*******
        主程序
     *****/
void  main()
  { uchar a;
     
   uchar i=0;
     chuankou1chushihua();
     chuankou2chushihua();
   while(1)  
   {  delay(1000);
     for(a=0;a<10;a++)
     uart_send(datr[a]);
           while(i<10)
     {   if(flag)
      {  IE2=0;
      table[i]=sendata;
      i++;
      IE2=1;
      flag=0 ;
    }
     }
      
   
       SBUF=table[0];
    while(!TI);
    TI=0;
      
    }
  }
    /********
    串口2中断
    ********/
    void timer(void) interrupt 8   
       {
          while(S2CON &S2RI)      
   {   
          redata=S2BUF;
       sendata=redata;
      S2CON &=~S2RI;
       flag=1;
      
    }
       }

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

0

粉丝