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

📄 uart0.lst

📁 本程序是一个RS232转网口的。是一个透明传输的模块
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   UART0                                                                 09/26/2008 13:35:52 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN ..\OUT\Uart0.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Source\Uart0.c BROWSE DEBUG OBJECTEXTEND PRINT(..\OUT\Uart0.lst) OBJECT(
                    -..\OUT\Uart0.obj)

stmt level    source

   1          /*
   2          *****************************************************************************************************
   3          *
   4          *  File name: uart0.c     (MCU的串口0)
   5          *
   6          *  通讯终端: MCU <==>  PC
   7          *  波特率:  57600
   8          *
   9          *  功能:   
  10          *       MCU的UART0操作:1:接收上位机的数据,通过AT^SISW 发送到GPRS网络,
  11          *                       2:通过读GPRS接收来的数据,AT^SISR,再转发给PC端  
  12          *
  13          *
  14          *  NOTE: MODEM的UART0引到DB9的PIN4,PIN9,可用SSCOM与MODEM直接AT5指令交互通讯
  15          *
  16          *
  17          *****************************************************************************************************
  18          */
  19          #include "..\head\includes.h"
  20          
  21          
  22          unsigned char xdata TxBuf[LenTxBuf];     // 收发缓冲区实体
  23          unsigned char xdata RxBuf[LenRxBuf];
  24          unsigned char xdata *inRxBuf,*outRxBuf;  // inRxBuf指向收的收,outRxBuf指向收缓冲区的读
  25          unsigned char xdata *inTxBuf,*outTxBuf;
  26          unsigned char xdata bRxFull;                 //标志收缓冲区是否溢出
  27          unsigned char xdata bFullSend;               //收缓冲区是否溢出是否已发送满命令
  28          unsigned char xdata bEptSend;                //收缓冲区空时是否已发空命令
  29          bit TIflag=1;                            //Note:It must be 1.
  30          
  31          unsigned char xdata *inRxBuf_Bak=0;
  32          
  33          
  34          unsigned int  xdata Rx0_Counter;                    //二级缓冲区接收一侦实际长度
  35          unsigned char xdata Mid_Buf[MAX_FRAME_SIZE];        //二级缓冲区,用来记录一侦是否结束,结束后存入Te2NetBuf
  36          
  37          _UART_BUF_STRUCT_  xdata  Te2NetBuf[MAX_BUF_NUM];   // 终端到网络
  38          unsigned char      xdata  FrameIn;                  //用来指向Te2NetBuf进入数据的标量
  39          unsigned char      xdata  FrameOut;                 //用来指向Te2NetBuf取出数据的标量
  40          
  41          _UART_BUF_STRUCT_  xdata  Net2TeBuf[MAX_BUF_NUM2];  // 网络到终端
  42          unsigned char      xdata  FrameIn2;                 //用来指向Net2TeBuf进入数据的标量
  43          unsigned char      xdata  FrameOut2;                //用来指向Net2TeBuf取出数据的标量
  44          /*
  45          *****************************************************************************************************
  46          *Func:  串口中断程序
  47          *Note:
  48          *    1:
  49          *    2:
  50          *****************************************************************************************************
  51          */
  52          void Uart0_ISR(void) interrupt 4
  53          {
  54   1              unsigned char xdata *t;
C51 COMPILER V7.06   UART0                                                                 09/26/2008 13:35:52 PAGE 2   

  55   1      
  56   1              if (TI) {
  57   2                      TI=0;
  58   2                      if (inTxBuf == outTxBuf) {               //TxBuf Empty
  59   3                              TIflag=1;
  60   3                      } else {
  61   3                  ACC = *outTxBuf; 
  62   3                          if (ComcBit == '1') { 
  63   4                          TB8 = ~P; // 方式3:奇校验位
  64   4                      } else if (ComcBit == '2'){
  65   4                          TB8 = P;  // 方式3:偶校验位   
  66   4                      } 
  67   3                              SBUF=*outTxBuf; 
  68   3                              outTxBuf++;
  69   3                              if (outTxBuf == TxBuf+LenTxBuf)     // Begin ->end ->begin
  70   3                                      outTxBuf = TxBuf;
  71   3                      }
  72   2              }
  73   1              if (RI) {
  74   2                      RI=0;
  75   2                      TimerMil[T_FRAME_END] = FRAME_END_TIME;
  76   2                      t=inRxBuf;
  77   2                      t++;                                     //保留指针位置
  78   2                      if (t == RxBuf+LenRxBuf) {
  79   3                              t = RxBuf;                   //如果到缓冲区末尾,则返回缓冲区头
  80   3                      }
  81   2                      if (t != outRxBuf) {         //如果相等,说明缓冲区满了,RxBuf Full     
  82   3                              *inRxBuf = SBUF;
  83   3                              inRxBuf = t;
  84   3                      } else {
  85   3                              bEptSend = FALSE;            //在满了之后,需等待发送空信号
  86   3                              bFullSend =FALSE;
  87   3                              bRxFull = TRUE;              //收缓冲区满
  88   3                      }
  89   2              }
  90   1      }
  91          
  92          /*
  93          *****************************************************************************************************
  94          *Func:           uart相关寄存器
  95          *Note: 波特率:每秒传送多少位。
  96          *
  97          *    1: SCON寄存器 7    6   5    4    3    2     1     0
  98          *    ------------------------------------------------------------------------
  99          *                  SM0    SM1   SM2    REN    TB8    RB8     TI       RI
 100          *    ------------------------------------------------------------------------
 101          *                  0       0  : 方式0: 
 102          *                  0       1  : 方式1: 8位数据位的UART工作方式
 103          *                  REN 置1允许接收,置0禁止接收
 104          
 105          *    ------------------------------------------------------------------------
 106          *    2: PCON寄存器  7      6     5      4      3      2       1       0
 107          *    ------------------------------------------------------------------------
 108          *                  SMOD(置1波特率加倍速) 
 109          *    ------------------------------------------------------------------------
 110          *
 111          *    3: IE寄存器    7      6     5      4      3      2       1       0
 112          *    ------------------------------------------------------------------------
 113          *                  EA      X     X      ES     ET1   EX1     ET0     EX0
 114          *    ------------------------------------------------------------------------
 115                                                
 116          *****************************************************************************************************
C51 COMPILER V7.06   UART0                                                                 09/26/2008 13:35:52 PAGE 3   

 117          */
 118          void Uart0Init(void)      
 119          {
 120   1          unsigned int baudrate=9600;
 121   1      
 122   1          baudrate = vBaudRate[ConfigReg.reg.BautRateStr[0]-0x31];
 123   1      
 124   1              TMOD=TMOD & 0x0F;
 125   1              TMOD=TMOD | 0x20;    
 126   1          switch(baudrate) {
 127   2                       case 1200:
 128   2                       case 2400:
 129   2                       case 4800:
 130   2               case 9600:
 131   2                       case 19200:
 132   2                                PCON &= 0x7F;
 133   2                                break;
 134   2               case 38400:
 135   2               case 57600:
 136   2                            baudrate /= 2;
 137   2                                PCON |= 0x80;
 138   2                                break;
 139   2                       default:
 140   2                            baudrate = 9600;                            //默认为9600
 141   2                                PCON &= 0x7F;                               // 9600
 142   2                                break;
 143   2          }
 144   1      
 145   1          TH1  =  256 - XTAL / baudrate / 32 / 12;
 146   1          TL1  = TH1;
 147   1              //0: NONE 1:OLD   2:EVEN
 148   1          if ((ConfigReg.reg.WPCOMC[0] == '1') || (ConfigReg.reg.WPCOMC[0] == '2')) { 
 149   2                  SCON = 0xd0; // 方式3:奇偶校验位
 150   2              } else {
 151   2                  SCON = 0x50; // 方式1:无校验位
 152   2              }
 153   1      
 154   1              ET1  = 0;
 155   1              TR1  = 1;
 156   1      }
 157          
 158          /*
 159          *****************************************************************************************************
 160          *Func:  串口缓冲区初始化
 161          *Note:
 162          *    1: 
 163          *    2:
 164          *****************************************************************************************************
 165          */
 166          void Uart0BufferInit(void)
 167          {
 168   1          unsigned char i;
 169   1      
 170   1              inTxBuf  = TxBuf;
 171   1              outTxBuf = TxBuf;
 172   1              inRxBuf  = RxBuf;
 173   1              outRxBuf = RxBuf;
 174   1      
 175   1              bRxFull   = FALSE;                       //收缓冲区非满
 176   1              bFullSend = FALSE;
 177   1              bEptSend  = TRUE;
 178   1      
C51 COMPILER V7.06   UART0                                                                 09/26/2008 13:35:52 PAGE 4   

 179   1          Rx0_Counter = 0;                 //一侦实际长度
 180   1          TimerMil[T_FRAME_END] = 0;       //一侦结束时间
 181   1      
 182   1              for (i=0; i<MAX_BUF_NUM; i++) {
 183   2              Te2NetBuf[i].statu = 0;
 184   2              }
 185   1          for (i=0; i<MAX_BUF_NUM2; i++) {
 186   2              Net2TeBuf[i].statu = 0;
 187   2              }
 188   1          FrameIn2 = FrameOut2 = 0;
 189   1              FrameIn  = FrameOut  = 0;
 190   1      
 191   1              EA=1;
 192   1              ES=1;
 193   1      }
 194          
 195          
 196          /*
 197          *****************************************************************************************************
 198          *Func:  从串口缓冲区读1字节数据,并对缓冲区状态进行检查。如果满了,则
 199                                  发送缓冲区满信号,如果为空,则发送缓冲区为空信号。
 200          *Note:
 201          *    1:   为了实现接收串口的数据,对缓冲区溢出情况进行处理
 202          *    2:
 203          *****************************************************************************************************
 204          */
 205          #if 0
              bit Mygetch(unsigned char xdata *ch)
              {
                      ES = 0;

⌨️ 快捷键说明

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