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

📄 uart0.lst

📁 f330与mfrc522 通信 构成读卡器 上传源码和原理图。
💻 LST
字号:
C51 COMPILER V6.23a  UART0                                                                 04/14/2008 15:21:34 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN Uart0.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe Uart0.c DB OE

stmt level    source

   1          
   2          //*********************************************************
   3          // 项  目:  通用控制器-V1.0
   4          // 文件名:      Uart0.C
   5          // 描  述:  串口0中断服务程序
   6          //*********************************************************
   7          
   8          //===============================================
   9          #include "main.h"                    //全部头文件
  10          #include "Uart0.h" 
  11          #include "MFRC522.h"
  12          //===============================================
  13          
  14          //***********************************************
  15          //变量定义
  16          //***********************************************
  17          UCHAR  bdata       BitFlag1;    //位寻址变量
  18          sbit   NewPack   = BitFlag1^0;  //串口新数据包标志
  19          sbit   Head_flag = BitFlag1^1;  //串口包头标志
  20          
  21          UCHAR   bdata  DataFormat;      //读卡器数据输出格式
  22          sbit   ReqMode   = BitFlag1^0;  //寻卡方式:0-非休眠卡,1-所有卡
  23          sbit   keySelect = BitFlag1^0;  //密钥选择:0=KeyA,1=KeyB
  24          sbit   OutFomart = BitFlag1^0;  //输出格式:1=读系列号,0=读数据块/
  25          sbit   ReadMode  = BitFlag1^0;  //读卡方式:0=块,1=字节
  26          sbit   AutoSend  = BitFlag1^0;  //自动发送:0=被动,1=自动
  27          
  28          extern UCHAR xdata rx_buf[TX_PLOAD_WIDTH];  //
  29          extern UCHAR xdata tx_buf[TX_PLOAD_WIDTH];
  30          extern UCHAR   data SetxxBuf [4];
  31          
  32          UCHAR  data   CardId;    //读卡器地址 
  33          UCHAR  data   SioBurd;   //读卡器波特率
  34          UCHAR  data   CardCs1;   //读卡器参数1
  35          
  36          UCHAR  data   Sio_Lth; 
  37          UCHAR  idata  Pack_len;                     //数据长度
  38          UCHAR  idata  ComTBufHead, ComTBufTail;
  39          UCHAR  idata  ComRBufHead, ComRBufTail;
  40          
  41          UCHAR  xdata  ComTBuf[Com0TBuf_len] _at_ Com0TBuf_addr;  //00H
  42          UCHAR  xdata  ComRBuf[Com0RBuf_len] _at_ Com0RBuf_addr;  //40H
  43          //***********************************************
  44          //函数开始
  45          //===============================================
  46          //初始化UART0
  47          //===============================================
  48          void Init_Com0(void)                 //初始化串口0
  49          {
  50   1              ClearComRBuf();                  //清发送、接收缓冲区
  51   1              OpenCom0();                      //设置串口0
  52   1      }
  53          //-----------------------------------------------
  54          //清发送、接收缓冲区
  55          //-----------------------------------------------
C51 COMPILER V6.23a  UART0                                                                 04/14/2008 15:21:34 PAGE 2   

  56          void ClearComRBuf(void)              //
  57          {
  58   1              unsigned char i;
  59   1      
  60   1              ComRBufHead=ComRBufTail=0;
  61   1      
  62   1              ComTBufHead=ComTBufTail=0;
  63   1      
  64   1              for (i=0;i<Com0TBuf_len;i++)
  65   1      
  66   1                 { ComTBuf[i]=0; }             //清发送缓冲区
  67   1      
  68   1              for (i=0;i<Com0RBuf_len;i++)
  69   1      
  70   1                 { ComRBuf[i]=0; }             //清接收缓冲区
  71   1      
  72   1      }
  73          /***********************************************
  74          //打开UART0
  75          /***********************************************/
  76          void OpenCom0(void)    
  77          
  78          {   //CKCON=T3H,T3L,T2H,T2L,T1,T0,SCA1,SCA0
  79   1          CKCON &= 0xF7;      //T1M=0,T1CLK=SYSCLK/12
  80   1              TMOD = 0x21;    //T1 方式2,重加载
  81   1              TH1 = TBUAD;    //MAIN.H定义:256-SYSCLK/12/BUAD=106
  82   1              TR1 =1;         //S0MD,-,MCE0,REN0,TB80,RB80,TI0,RI0                   
  83   1              SCON0 = 0x30;   //  0  0   1    1    0    0   0   0
  84   1      
  85   1              ComTBufHead=ComTBufTail=0;       //置发送缓冲头、尾指针=0
  86   1              ComRBufHead=ComRBufTail=0;       //置接收缓冲头、尾指针=0 
  87   1              ES0=1;                                   //容许串口0中断   
  88   1      }
  89          
  90          /***********************************************
  91          //UART0中断处理程序
  92          //接收数据包格式:STX,长度,目地,源地,类型,命令.....ETX
  93          //                AA  10   25   81    01    XX       BB
  94          /***********************************************/
  95          
  96          void CommISR(void) interrupt 4
  97          {
  98   1              if (RI0==1)
  99   1      
 100   1               { RS232_Rev();  }
 101   1                 
 102   1              //串口发送中断处理
 103   1              if (TI0==1)   
 104   1      
 105   1               { RS232_Send();}
 106   1      }
 107          /***********************************************
 108          //串口接收中断处理
 109          /***********************************************/
 110          void RS232_Rev(void)
 111          {       
 112   1              unsigned char tmp; 
 113   1                  
 114   1              RI0=0;                             //接收数据 
 115   1          tmp  = SBUF0;
 116   1          ComRBuf[ComRBufTail]=tmp; 
 117   1          ComRBufTail++;         //存储指针+1
C51 COMPILER V6.23a  UART0                                                                 04/14/2008 15:21:34 PAGE 3   

 118   1      
 119   1                 if (Head_flag == FALSE)
 120   1                     
 121   1                         { 
 122   2                           ComRBufTail = 0; 
 123   2      
 124   2                                if (tmp==0xAA)
 125   2                              {
 126   3                            ComRBufTail=1;    //发现AA包头,指针=01
 127   3                                Head_flag=TRUE;   //置包头标志
 128   3                              } 
 129   2                   return;
 130   2                         }
 131   1      
 132   1              if (ComRBufTail == 2 && tmp != CardId)
 133   1      
 134   1                         { //地址不符合,禁止接收
 135   2                           ComRBufTail = 0;      
 136   2                           Head_flag   = FALSE;   //清包头标志
 137   2                   return;
 138   2                         }
 139   1                          
 140   1               //AA包头,地址符合
 141   1      
 142   1                  if (ComRBufTail>=Com0RBuf_len)
 143   1      
 144   1                         {                     //包长异常
 145   2                               NewPack=0;
 146   2                   Head_flag=0;
 147   2                       ComRBufTail=0;      //重新开始
 148   2                   return;
 149   2                          }
 150   1      
 151   1                  if (tmp==0xBB && ComRBufTail==ComRBuf[2]+5)  //判包尾标志BB,
 152   1                                                          
 153   1                    {   //已收包尾,且包长>6         
 154   2                                  Pack_len=ComRBufTail;     //数据包长度
 155   2                          ComRBufTail=0;
 156   2                      Head_flag=0;
 157   2                      NewPack=1;
 158   2                      Pack_Exec();               //数据包解析                                 
 159   2                    }
 160   1                }
 161          
 162          /***********************************************
 163          //串口发送中断处理
 164          /***********************************************/ 
 165          void RS232_Send(void)
 166            {     
 167   1              TI0=0;                //清发送中断
 168   1                              
 169   1          if (ComTBufHead==Com0TBuf_len)
 170   1                 {     
 171   2                       ComTBufHead=0;   //到最大长度指针归零
 172   2                 }
 173   1          if (ComTBufHead<Sio_Lth)        //
 174   1                 {     
 175   2                       SBUF0=ComTBuf[ComTBufHead];  //未完发送下字节
 176   2                       ComTBufHead++;
 177   2                 }
 178   1               else RW485 = 0;          
 179   1         }
C51 COMPILER V6.23a  UART0                                                                 04/14/2008 15:21:34 PAGE 4   

 180          /***********************************************
 181          //接收数据包解析:
 182          /***********************************************/
 183          void Pack_Exec(void)
 184          {
 185   1           unsigned char i,ptype,pcom; 
 186   1      
 187   1       if (NewPack)
 188   1      
 189   1          {      
 190   2           pcom   = ComRBuf[3];    //包命令  
 191   2      
 192   2           switch (pcom)
 193   2      
 194   2                    {
 195   3                          case 0x80:          //设置信息
 196   3      
 197   3                                 Card_Setxx(); 
 198   3      
 199   3                                 break; 
 200   3                  //-------------------
 201   3                              case 0x81:          //
 202   3                                 Read_Setxx();    //读设置信息
 203   3                                 break; 
 204   3                  //-------------------
 205   3                  case 0x8E:          //设置读卡器输出方式
 206   3                                 
 207   3                                 break;
 208   3                  //-------------------
 209   3                  case 0x21:          //输出到P1口
 210   3                                 
 211   3                                 break;
 212   3                  //-------------------
 213   3                  case 0x22:       //
 214   3                                 i=3; 
 215   3                                 break;
 216   3                  //-------------------
 217   3                  default: 
 218   3                                 i=0xff;       //
 219   3                                 break;
 220   3                        }   
 221   2                       NewPack = 0;   
 222   2           }
 223   1               
 224   1      }
*** WARNING C280 IN LINE 185 OF UART0.C: 'ptype': unreferenced local variable
 225          /***********************************************
 226          //上位机设置读卡器参数
 227          /***********************************************/
 228          void  Card_Setxx(void)
 229          {
 230   1           unsigned char i;
 231   1               i = 1;
 232   1      
 233   1               SetxxBuf[0] = ComRBuf[4];
 234   1               SetxxBuf[1] = ComRBuf[5];
 235   1               SetxxBuf[2] = ComRBuf[6];
 236   1               SetxxBuf[3] = ComRBuf[7];
 237   1           //
 238   1               CardId     = SetxxBuf[0]; 
 239   1               SioBurd    = SetxxBuf[1];
 240   1           DataFormat = SetxxBuf[2];
C51 COMPILER V6.23a  UART0                                                                 04/14/2008 15:21:34 PAGE 5   

 241   1               CardCs1    = SetxxBuf[3];
 242   1           //擦除FLASH
 243   1               FLASH_PageErase (FLASH_TEMP);
 244   1           //设置写FLASH
 245   1           FLASH_Write (FLASH_TEMP, SetxxBuf, 4);
 246   1           //设置命令回答
 247   1           Cmd_Ack();
 248   1           
 249   1      }
 250          //===============================================
 251          //读设置信息
 252          //===============================================
 253          void Read_Setxx(void)
 254          {
 255   1            ComTBuf[0] = 0xaa;  //
 256   1                ComTBuf[1] = CardId; 
 257   1            ComTBuf[2] = 04;
 258   1                ComTBuf[3] = 0;           //'00'OK 
 259   1                ComTBuf[4] = CardId;
 260   1                ComTBuf[5] = SioBurd; 
 261   1            ComTBuf[6] = DataFormat;       //读P1口状态
 262   1                ComTBuf[7] = CardCs1;
 263   1                ComTBuf[8] = 0xbb; 
 264   1                //
 265   1                RW485 = 1;     //使能发送
 266   1                ComTBufHead=1;
 267   1                Sio_Lth = 9;  
 268   1                SBUF0   = ComTBuf[0];  //启动串口发送 
 269   1      }
 270          //===============================================
 271          //读本地口状态:读口状态并生成数据包
 272          //===============================================
 273          void Cmd_Ack(void)
 274              {
 275   1                ComTBuf[0] = ComRBuf[0];  //
 276   1                ComTBuf[1] = ComRBuf[1]; 
 277   1            ComTBuf[2] = ComRBuf[2];
 278   1                ComTBuf[3] = 0;           //'00'OK 
 279   1                ComTBuf[4] = ComRBuf[4];
 280   1                ComTBuf[5] = ComRBuf[5]; 
 281   1            ComTBuf[6] = ComRBuf[6];       //读P1口状态
 282   1                ComTBuf[7] = ComRBuf[7];
 283   1                ComTBuf[8] = ComRBuf[8]; 
 284   1                //
 285   1                RW485 = 1;     //使能发送
 286   1                ComTBufHead=1;
 287   1                Sio_Lth = 9;  
 288   1                SBUF0   = ComTBuf[0];  //启动串口发送  
 289   1              }
 290          //********************************************


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    522    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       3
   IDATA SIZE       =      5    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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