⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rs232.c

📁 ZLG DP-668开发板全部程序
💻 C
字号:
#include "reg66x.h"
#include "668i2c.h" /*包含VI2C软件包*/

#define  uchar unsigned char
#define  CSI24WC02 0xA0            /*定义器件地址*/


uchar *temp,j=0,i;
uchar rec_com[64];//接收缓冲区
 
bit timeout=0;    //接收超时标志
bit rec_ok=0;     //接收成功标志

main()
{
  TMOD=0X21;
  TH1=0XFA;
  TL1=0XFA;
  S0CON=0X50;
  PCON=0;
  TR1=1;
  ET0=1;
  ES0=1;
  EA=1;
  while(1)
  {
    while(timeout==0&&rec_ok==0);
    if(timeout)//超时处理
    {
      //send error for commad
      rec_com[0]=0x12;
      rec_com[1]=0xa1;
      rec_com[2]=2;
      rec_com[3]=0;
      rec_com[4]=rec_com[0]^rec_com[1]^rec_com[2]^rec_com[3];
      ES0=0;
      for(i=0;i<5;i++)
      {
        S0BUF=rec_com[i];
        while(TI==0);
        TI=0;
      }
      ES0=1;
      timeout=0;
      rec_com[0]=0;
      rec_com[1]=0;
    }
    if(rec_ok) //接收成功!
    {
      if(rec_com[1]!=0x20&&rec_com[1]!=0x21)//命令错误!
      {
        rec_com[0]=0x12;
        rec_com[1]=0xa1;
        rec_com[2]=2;
        rec_com[3]=0;
        rec_com[4]=rec_com[0]^rec_com[1]^rec_com[2]^rec_com[3];
        ES0=0;
        for(i=0;i<5;i++)
        {
          S0BUF=rec_com[i];
          while(TI==0);
          TI=0;
        }
        ES0=1;
        //send error for command
      }
      else if(rec_com[1]==0x20)//收到读命令
        {
          i=rec_com[5];
          if(IRcvStr(CSI24WC02,rec_com[3],&rec_com[3],rec_com[5]))//读成功
          {
            rec_com[0]=0x12;
            rec_com[1]=0xa0;
            rec_com[2]=i+2;
            for(j=0;j<(i+3);j++)
              rec_com[i+4]=rec_com[j]^rec_com[j+1];
            ES0=0;
            j=j+2;
            for(i=0;i<j;i++)
            { 
              S0BUF=rec_com[i];
              while(TI==0);
              TI=0;
            }
            ES0=1;
          }     
          //send read ok;
          else//send read error读失败
          {
            rec_com[0]=0x12;
            rec_com[1]=0xa1;
            rec_com[2]=2;
            rec_com[3]=1;
            rec_com[4]=rec_com[0]^rec_com[1]^rec_com[2]^rec_com[3];
            ES0=0;
            for(i=0;i<5;i++)
            {
              S0BUF=rec_com[i];
              while(TI==0);
              TI=0;
            }
            ES0=1;
          }
        }
      else if(rec_com[1]==0x21)//收到写命令
        {
          j=rec_com[2]-4;
          if(ISendStr(CSI24WC02,rec_com[3],&rec_com[5],j))//写成功
          {
            rec_com[0]=0x12;
            rec_com[1]=0xa0;
            rec_com[2]=1;
            rec_com[3]=rec_com[0]^rec_com[1]^rec_com[2];
            ES0=0;
            for(i=0;i<4;i++)
            {
              S0BUF=rec_com[i];
              while(TI==0);
              TI=0;
            }
            ES0=1;
          }
          else//写失败
          {
            rec_com[0]=0x12;
            rec_com[1]=0xa1;
            rec_com[2]=3;
            rec_com[3]=0;
            rec_com[4]=0;
            rec_com[5]=rec_com[0]^rec_com[1]^rec_com[2]^rec_com[3];
            ES0=0;
            for(i=0;i<6;i++)
            {
              S0BUF=rec_com[i];
              while(TI==0);
              TI=0;
            }
            ES0=1;
          }
        }
      rec_com[0]=0;
      rec_com[1]=0;
      rec_ok=0;
    }
  }
}
void int_com() interrupt 4
{
  uchar * tmp,counter;
  if(RI==1)
    {
      TR0=1;
      TH0=-60000/256;
      TL0=-60000/256;
      rec_com[0]=S0BUF;
      RI=0;
      while(RI==0&&timeout==0);
      rec_com[1]=S0BUF;
      RI=0;
      while(RI==0&&timeout==0);
      rec_com[2]=S0BUF;
      RI=0;
      tmp=&(rec_com[3]);
      counter=rec_com[2];
      do
      {
         while(RI==0&&timeout==0);
         *tmp=S0BUF;
         tmp++;
         counter--;
         RI=0;
      }
      while(timeout==0&&counter!=0);
      if(!timeout)
        rec_ok=1;  
      TR0=0;    
    }
  if(TI==1)
    {
       TI=0;
    }
}
void int_t0() interrupt 1
{
  static counter=0;
  counter++;
  TH0=-60000/256;
  TL0=-60000%256;
  if(counter==5)
  {
    timeout=1;
    counter=0;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -