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

📄 16c554.lst

📁 通过车载终端采集GPS数据
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   16C554                                                                09/25/2008 11:56:16 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE 16C554
OBJECT MODULE PLACED IN .\output\bin\16c554.obj
COMPILER INVOKED BY: C:\Keil709\C51\BIN\C51.EXE extendUART\16c554.c LARGE BROWSE INCDIR(audio\;eeprom\;extendUART\;flash
                    -\;gps\;inter\;key\;mcu\;menu\;usb\;gprs\;main\;1wire\) DEBUG OBJECTEXTEND PRINT(.\output\16c554.lst) OBJECT(.\output\bin
                    -\16c554.obj)

line level    source

   1          /**********************************************************
   2          *此程序是一个测试程序,实际上GPRS是在通道A,此程序改在通道B
   3          *16C554的驱动程序
   4          *16C554是一个4串口的芯片
   5          *B口分配为调试以及客流采集器
   6          *C口分配给LED屏
   7          **********************************************************/
   8          
   9          #include "w77e532.h"
  10          #include "16c554.h"
  11          #include "uart.h"
  12          #include "mcuInit.h"
  13          #include "string.h"
  14          unsigned char volatile xdata uartInt        _at_ (INT_BASE);
  15          
  16          /*通道A的寄存器定义*/
  17          unsigned char volatile xdata chALcr         _at_ (CHA_BASE+LCR_ADD);
  18          unsigned char volatile xdata chAMcr         _at_ (CHA_BASE+MCR_ADD);
  19          unsigned char volatile xdata chAIer         _at_ (CHA_BASE+IER_ADD);
  20          unsigned char volatile xdata chAIir         _at_ (CHA_BASE+IIR_ADD);
  21          unsigned char volatile xdata chALsr         _at_ (CHA_BASE+LSR_ADD);
  22          unsigned char volatile xdata chAMsr         _at_ (CHA_BASE+MSR_ADD);
  23          unsigned char volatile xdata chARxd         _at_ (CHA_BASE+RBR_ADD);
  24          unsigned char volatile xdata chAScr         _at_ (CHA_BASE+SCR_ADD);
  25          #define chATxd  chARxd
  26          #define chADll  chARxd
  27          #define chADlm  chAIer
  28          #define chAFcr  chAIir
  29          
  30          /*通道B的寄存器定义*/
  31          unsigned char volatile xdata chBLcr         _at_ (CHB_BASE+LCR_ADD);
  32          unsigned char volatile xdata chBMcr         _at_ (CHB_BASE+MCR_ADD);
  33          unsigned char volatile xdata chBIer         _at_ (CHB_BASE+IER_ADD);
  34          unsigned char volatile xdata chBIir         _at_ (CHB_BASE+IIR_ADD);
  35          unsigned char volatile xdata chBLsr         _at_ (CHB_BASE+LSR_ADD);
  36          unsigned char volatile xdata chBMsr         _at_ (CHB_BASE+MSR_ADD);
  37          unsigned char volatile xdata chBRxd         _at_ (CHB_BASE+RBR_ADD);
  38          unsigned char volatile xdata chBScr         _at_ (CHB_BASE+SCR_ADD);
  39          #define chBTxd  chBRxd
  40          #define chBDll  chBRxd
  41          #define chBDlm  chBIer
  42          #define chBFcr  chBIir
  43          
  44          /*通道C的寄存器定义*/
  45          unsigned char volatile xdata chCLcr         _at_ (CHC_BASE+LCR_ADD);
  46          unsigned char volatile xdata chCMcr         _at_ (CHC_BASE+MCR_ADD);
  47          unsigned char volatile xdata chCIer         _at_ (CHC_BASE+IER_ADD);
  48          unsigned char volatile xdata chCIir         _at_ (CHC_BASE+IIR_ADD);
  49          unsigned char volatile xdata chCLsr         _at_ (CHC_BASE+LSR_ADD);
  50          unsigned char volatile xdata chCMsr         _at_ (CHC_BASE+MSR_ADD);
  51          unsigned char volatile xdata chCRxd         _at_ (CHC_BASE+RBR_ADD);
  52          unsigned char volatile xdata chCScr         _at_ (CHC_BASE+SCR_ADD);
  53          #define chCTxd  chCRxd
C51 COMPILER V7.09   16C554                                                                09/25/2008 11:56:16 PAGE 2   

  54          #define chCDll  chCRxd
  55          #define chCDlm  chCIer
  56          #define chCFcr  chCIir
  57          
  58          /*通道D的寄存器定义*/
  59          unsigned char volatile xdata chDLcr         _at_ (CHD_BASE+LCR_ADD);
  60          unsigned char volatile xdata chDMcr         _at_ (CHD_BASE+MCR_ADD);
  61          unsigned char volatile xdata chDIer         _at_ (CHD_BASE+IER_ADD);
  62          unsigned char volatile xdata chDIir         _at_ (CHD_BASE+IIR_ADD);
  63          unsigned char volatile xdata chDLsr         _at_ (CHD_BASE+LSR_ADD);
  64          unsigned char volatile xdata chDMsr         _at_ (CHD_BASE+MSR_ADD);
  65          unsigned char volatile xdata chDRxd         _at_ (CHD_BASE+RBR_ADD);
  66          unsigned char volatile xdata chDScr         _at_ (CHD_BASE+SCR_ADD);
  67          #define chDTxd  chDRxd
  68          #define chDDll  chDRxd
  69          #define chDDlm  chDIer
  70          #define chDFcr  chDIir
  71          
  72          /*与GPRS相连的串口数据结构*/
  73          struct 
  74          {
  75              unsigned char txState;          /*发送状态标志*/
  76              unsigned char rxState;          /*接收状态标志*/
  77              unsigned char txTimer;          /*发送数据包间隔控制定时器*/
  78              unsigned char rxTimer; 
  79              unsigned int txLen;            /*发送数据长度*/
  80              unsigned int rxLen;            /*接收数据长度*/
  81              unsigned char *txPtr;           /*当前发送指针*/
  82              unsigned char xdata *rxHeadPtr;
  83              unsigned char xdata *rxCurPtr;           /*当前接收指针*/
  84          } atInfo,siobInfo, siocInfo, siodInfo;            
  85          
  86          
  87          
  88          /*最大发送字节减1须为全1.即须是64,128,256,512,1024,2048等*/
  89          #define AT_MAX_SEND_BYTE    1024 - 1   
  90           
  91          char xdata rxTmpBuffer[350] _at_ 0x0;
  92          
  93          
  94          static void chA_init()
  95          {
  96   1          //chAIer = 0x00;        /*禁止中断*/
  97   1          //return;
  98   1      
  99   1      
 100   1          /*通道A的初始化*/
 101   1          chALcr = 0x80;        /*准备设置波特率*/
 102   1          chADlm = TI16C554_38400 >> 8;//9600 >> 8;
 103   1          chADll = TI16C554_38400;//9600;
 104   1          
 105   1          chALcr = 0x03;        /*设置为8,1,N*/
 106   1          chAMcr = 0x03;        /*设置RTS,DTR有效,也可以控制环回*/
 107   1          chAFcr = 0x00;        /*采用16C450模式*/
 108   1          chAIer = 0x03;        /*允许发送和接收中断*/
 109   1      
 110   1      }
 111          
 112          static void chB_init()
 113          {
 114   1          //chBIer = 0x00;        /*禁止中断*/
 115   1          //return;
C51 COMPILER V7.09   16C554                                                                09/25/2008 11:56:16 PAGE 3   

 116   1      
 117   1          /*通道B的初始化*/
 118   1          chBLcr = 0x80;        /*准备设置波特率*/
 119   1          chBDlm = TI16C554_19200 >> 8;
 120   1          chBDll = TI16C554_19200;
 121   1          
 122   1          chBLcr = 0x03;        /*设置为8,1,N*/
 123   1          chBMcr = 0x03;        /*设置RTS,DTR有效,也可以控制环回*/
 124   1          chBFcr = 0x00;        /*采用16C450模式*/
 125   1          chBIer = 0x03;        /*允许发送和接收中断*/
 126   1      
 127   1      }
 128          
 129          static void chC_init()
 130          {
 131   1        //  chCIer = 0x00;        /*禁止中断*/
 132   1          chCLcr = 0x80;        /*准备设置波特率*/
 133   1          chCDlm = TI16C554_19200 >> 8;
 134   1          chCDll = TI16C554_19200;
 135   1          
 136   1          chCLcr = 0x03;        /*设置为8,1,N*/
 137   1          chCMcr = 0x03;        /*设置RTS,DTR有效,也可以控制环回*/
 138   1          chCFcr = 0x00;        /*采用16C450模式*/
 139   1          chCIer = 0x03;        /*允许发送和接收中断*/
 140   1      }
 141          
 142          static void chD_init()
 143          {
 144   1          chDIer = 0x00;        /*禁止中断*/
 145   1          /*通道D的初始化*/
 146   1      //    chDLcr = 0x80;        /*准备设置波特率*/
 147   1      //    chDDlm = TI16C554_38400 >> 8;//9600 >> 8;
 148   1      //    chDDll = TI16C554_38400;//9600;
 149   1          
 150   1      //    chDLcr = 0x03;        /*设置为8,1,N*/
 151   1      //    chDMcr = 0x03;        /*设置RTS,DTR有效,也可以控制环回*/
 152   1      //    chDFcr = 0x00;        /*采用16C450模式*/
 153   1      //    chDIer = 0x03;        /*允许发送和接收中断*/
 154   1      }
 155          
 156          /**************************中断服务程序************************/
 157          char intPend;
 158          char bdata intSource;
 159          sbit intChA     = intSource ^ 0;//4;     /*通道A中断*/
 160          sbit intChB     = intSource ^ 1;//5;     /*通道B中断*/
 161          sbit intChC     = intSource ^ 2;//6;     /*通道C中断*/
 162          sbit intChD     = intSource ^ 3;//7;     /*通道D中断*/
 163          
 164          void ISRExtInt1(void) interrupt 2 using 2
 165          {
 166   1      
 167   1          intSource = uartInt & 0x0f;
 168   1          while(intSource != 0)
 169   1          {
 170   2              /*通道A*/
 171   2              if( intChA )
 172   2              {
 173   3                  intPend = chAIir;
 174   3                  if( intPend == 0x04 )
 175   3                  {/*接收数据中断*/
 176   4      
 177   4                      *atInfo.rxCurPtr = chARxd;
C51 COMPILER V7.09   16C554                                                                09/25/2008 11:56:16 PAGE 4   

 178   4                      atInfo.rxCurPtr ++;
 179   4                      if( atInfo.rxCurPtr == (char xdata *)0x100 )
 180   4                          atInfo.rxCurPtr = (char xdata *)0;
 181   4      
 182   4                      if( atInfo.rxHeadPtr == atInfo.rxCurPtr )
 183   4                          atInfo.rxCurPtr --;
 184   4      
 185   4      
 186   4                  }
 187   3                  else if( intPend == 0x02 )
 188   3                  {/*发送数据中断*/
 189   4      
 190   4                      if( atInfo.txLen == 0 )
 191   4                      {
 192   5                          atInfo.txState = 0;
 193   5                      }
 194   4                      else
 195   4                      {
 196   5                          chATxd = *atInfo.txPtr;
 197   5                          atInfo.txPtr ++;
 198   5                          atInfo.txLen --;
 199   5                      }
 200   4                      
 201   4                  }
 202   3              }
 203   2      
 204   2              /*通道B*/
 205   2              if( intChB )
 206   2              {
 207   3                  intPend = chBIir;
 208   3                  if( intPend == 0x04 )
 209   3                  {/*接收数据中断*/
 210   4      
 211   4                      *siobInfo.rxCurPtr = chBRxd;
 212   4                      siobInfo.rxTimer = 10;
 213   4                      siobInfo.rxState = 1;
 214   4                      if( siobInfo.rxLen < 0xFFFF )
 215   4                      {
 216   5                          siobInfo.rxLen ++;
 217   5                          siobInfo.rxCurPtr ++;
 218   5                      }
 219   4                  }
 220   3                  else if( intPend == 0x02 )
 221   3                  {/*发送数据中断*/
 222   4      
 223   4                      if( siobInfo.txLen == 0 )
 224   4                      {
 225   5                          siobInfo.txState = 0;
 226   5                      }
 227   4                      else
 228   4                      {
 229   5                          chBTxd = *siobInfo.txPtr;
 230   5                          siobInfo.txPtr ++;
 231   5                          siobInfo.txLen --;
 232   5                      }
 233   4                      
 234   4                  }
 235   3              }
 236   2      
 237   2      
 238   2              /*通道C*/
 239   2              if( intChC )
C51 COMPILER V7.09   16C554                                                                09/25/2008 11:56:16 PAGE 5   

 240   2              {
 241   3                  intPend = chCIir;
 242   3                  if( intPend == 0x04 )
 243   3                  {/*接收数据中断*/

⌨️ 快捷键说明

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