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

📄 comm.lst

📁 c8051f310xmodembootloader.rar
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.16   COMM                                                                  12/10/2009 11:19:18 PAGE 1   


C51 COMPILER V8.16, COMPILATION OF MODULE COMM
OBJECT MODULE PLACED IN comm.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE comm.c LARGE BROWSE INTVECTOR(0X1000) DEBUG OBJECTEXTEND

line level    source

   1          #include "global.h"
   2          
   3          
   4          unsigned char xdata TxBuf[LenTxBuf],RxBuf[LenRxBuf];//收发缓冲区实体
   5          unsigned char xdata *inTxBuf,*outTxBuf, *inRxBuf,*outRxBuf;//收发缓冲区读写指针
   6          //inRxBuf指向收的收,outRxBuf指向收缓冲区的读。
   7          bit TIflag=1;//Note:It must be 1.
   8          
   9          
  10          
  11          
  12          /******************************************************************************
  13          ** 函数: UART0_Init()
  14          ** 入参: 
  15          ** 返回: 
  16          ** 说明:
  17          ** UART0_Init
  18          ** Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
  19          ******************************************************************************/
  20          
  21          void UART0_Init (void)
  22          {
  23   1         SCON0 = 0x50;                       // SCON0: 8-bit variable bit rate
  24   1                                             //        level of STOP bit is ignored
  25   1                                             //        RX enabled
  26   1                                             //        ninth bits are zeros
  27   1                                             //        clear RI0 and TI0 bits
  28   1         if (SYSCLK/BAUDRATE/2/256 < 1) {
  29   2            TH1 = -(SYSCLK/BAUDRATE/2);
  30   2            CKCON &= ~0x0B;                  // T1M = 1; SCA1:0 = xx
  31   2            CKCON |=  0x08;
  32   2         } else if (SYSCLK/BAUDRATE/2/256 < 4) {
  33   2            TH1 = -(SYSCLK/BAUDRATE/2/4);
  34   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01                  
  35   2            CKCON |=  0x09;
  36   2         } else if (SYSCLK/BAUDRATE/2/256 < 12) {
  37   2            TH1 = -(SYSCLK/BAUDRATE/2/12);
  38   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
  39   2         } else {
  40   2            TH1 = -(SYSCLK/BAUDRATE/2/48);
  41   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
  42   2            CKCON |=  0x02;
  43   2         }
  44   1      
  45   1         TL1 = TH1;                          // init Timer1
  46   1         TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
  47   1         TMOD |=  0x20;                       
  48   1         TR1 = 1;                            // START Timer1
  49   1         Buff_Init();
  50   1      
  51   1      }
  52          
  53          /******************************************************************************
  54          ** 函数: Buff_Init (void)
  55          ** 入参: 
C51 COMPILER V8.16   COMM                                                                  12/10/2009 11:19:18 PAGE 2   

  56          ** 返回: 
  57          ** 说明: 
  58          ******************************************************************************/
  59          void Buff_Init (void)
  60          {
  61   1      
  62   1          inTxBuf=TxBuf;outTxBuf=TxBuf;
  63   1              inRxBuf=RxBuf;outRxBuf=RxBuf;
  64   1              EA=1;ES0=1;
  65   1      
  66   1      }
  67          
  68          /******************************************************************************
  69          ** 函数: UATR0_ISR()  interrupt
  70          ** 入参: 
  71          ** 返回: 
  72          ** 说明:  interrupt 4
  73          ******************************************************************************/
  74          
  75          void serial(void) interrupt 4
  76          { 
  77   1       
  78   1         unsigned char *t;
  79   1      
  80   1      if(TI0) 
  81   1            { 
  82   2                       TI0=0;
  83   2              if(inTxBuf==outTxBuf) {TIflag=1;return;}//TxBuf Empty
  84   2                      SBUF0=*outTxBuf; outTxBuf++;
  85   2                      if(outTxBuf==TxBuf+LenTxBuf) outTxBuf=TxBuf;
  86   2                }
  87   1      
  88   1      
  89   1      if (RI0)
  90   1            {         
  91   2                      RI0=0;
  92   2              //这里,缓冲区的读写方式跟8019as的ram区一样,是循环读,而且也用了
  93   2                      //两个指针,一个用来收,一个用来读
  94   2                      t=inRxBuf;t++;                          //保留指针位置
  95   2                      if(t==RxBuf+LenRxBuf) t=RxBuf;  //如果到缓冲区末尾,则返回缓冲区头
  96   2                      if(t==outRxBuf) return;                 //如果相等,说明缓冲区满了,RxBuf Full
  97   2                      *inRxBuf=SBUF0;
  98   2                      inRxBuf=t;
  99   2      
 100   2             }
 101   1             
 102   1      
 103   1      }
 104          
 105          /**********************************************************************
 106          ** 函数原型:    void   Printf_Char(u8_t ascii)
 107          ** 参数说明:   ascii: 发送到串口的ASCII
 108          ** 返 回 值:   无      
 109          ** 说    明:   往串口发送一个字符
 110          ************************************************************************/
 111          
 112          void Printf_Char(unsigned char ascii)
 113          {
 114   1              unsigned char *t;
 115   1      
 116   1              ES0=0;
 117   1              if(TIflag)
C51 COMPILER V8.16   COMM                                                                  12/10/2009 11:19:18 PAGE 3   

 118   1              {
 119   2                      TIflag=0;
 120   2                      TI0=1;
 121   2              }
 122   1              t=inTxBuf;t++;
 123   1              if(t==TxBuf+LenTxBuf) t=TxBuf;
 124   1              if(t==outTxBuf) {ES0=1;return;}                 //TxBuf Full
 125   1              *inTxBuf=ascii;
 126   1              inTxBuf=t;
 127   1              ES0=1;
 128   1      }
 129          
 130          
 131          /**********************************************************************
 132          ** 函数原型:    void           Printf_String(u8_t code *string)
 133          ** 参数说明:   string:        字符串的起始地址
 134          ** 返 回 值:   无      
 135          ** 说    明:   向串口发送字符串,碰到0x00结束
 136          ************************************************************************/
 137          void Printf_String(unsigned char  *string)
 138          {
 139   1      
 140   1         while(*string!=0)
 141   1         {
 142   2           Printf_Char(*string);
 143   2           string++;
 144   2         }
 145   1      }
 146          
 147          /**********************************************************************
 148          **函数原型:    Get_Char()
 149          **参数说明:    无
 150          **返 回 值:    temp      
 151          **说    明:    从串口缓冲区接收一个字符
 152          ************************************************************************/
 153          bit Get_Char(unsigned char xdata *ch)
 154          {
 155   1       
 156   1              ES0=0;
 157   1              if(inRxBuf==outRxBuf) {ES0=1;return 0;}         //RxBuf Empty
 158   1              *ch=*outRxBuf;  outRxBuf++;                                     //数据被读走,读指针加1
 159   1              if(outRxBuf==RxBuf+LenRxBuf) outRxBuf=RxBuf;    //如果读指针到缓冲区尾部,则返回到头部
 160   1              ES0=1;
 161   1              return 1;
 162   1      
 163   1      }
 164          
 165          /**********************************************************************
 166          **函数原型:    process_uart
 167          **入口参数:             com_len
 168          **出口参数:             无
 169          **返 回 值:    无
 170          **功能说明:             接收上位机的配置,检测串口有数据,等待一帧数据结束处理
 171          ***********************************************************************/
 172          
 173          void process_uart()
 174          {
 175   1        unsigned char dat_len=0;
 176   1        unsigned char xdata ch;
 177   1      
 178   1        while(Get_Char(&ch))
 179   1        {
C51 COMPILER V8.16   COMM                                                                  12/10/2009 11:19:18 PAGE 4   

 180   2           delayms(2);
 181   2           combuf[dat_len]=ch;
 182   2               dat_len++;
 183   2               if(dat_len==maxlen+1) dat_len=0;
 184   2                if(dat_len==32)                                  //简单的利用串口长度来确认帧到来
 185   2                {
 186   3                       if((combuf[30]==0x55)&&(combuf[31]==0xaa))
 187   3                       {
 188   4                         dat_len=0;
 189   4                         process_incmd();                        //处理串口接收的配置表
 190   4                       }
 191   3                       else
 192   3                   { 
 193   4                         dat_len=0;                              //不处理
 194   4                   }
 195   3                }
 196   2                
 197   2                 
 198   2        }
 199   1       
 200   1      }
 201          
 202          
 203          /**********************************************************************
 204          **函数原型:    process_incmd
 205          **入口参数:             无
 206          **出口参数:             无
 207          **返 回 值:    无
 208          **功能说明:             处理接收的PC命令
 209          ***********************************************************************/
 210          
 211          void process_incmd()
 212          {
 213   1      
 214   1        READER_PCS xdata *pcs;
 215   1      
 216   1        pcs=(READER_PCS xdata *)(combuf);
 217   1      
 218   1        switch(pcs->pcs_cmd)
 219   1        {
 220   2              case PCS_read_READER:
 221   2                   PCS_r_reader();                        //pc命令上传读卡机参数
 222   2                   break;
 223   2      
 224   2          case PCS_read_TAG:
 225   2                   PCS_rw_tag(PCS_read_TAG);              //pc命令上传微波卡参数
 226   2                   break;
 227   2      
 228   2          case PCS_write_READER:                          //pc命令配置读卡机参数
 229   2                   PCS_w_reader();
 230   2                   break;
 231   2      
 232   2              case PCS_write_TAG:
 233   2               PCS_rw_tag(PCS_write_TAG);                 //pc命令配置微波卡参数

⌨️ 快捷键说明

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