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

📄 uart.lst

📁 一个完整的51单片机的操作糸统源程序! 内容十分丰富!很有借鉴价值!
💻 LST
字号:
C51 COMPILER V7.10   UART                                                                  12/14/2004 10:51:16 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\Uart.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE ..\SourceFile\Uart.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\
                    -Uart.lst) OBJECT(.\Uart.obj)

line level    source

   1          /*************************************************/
   2          
   3          /**************串行口控制********************/
   4          
   5          /*************2003年1月24日*********************/
   6          
   7          /************WROTE BY WANGSW********************/
   8          
   9          /*
  10          UART所需的定时器由T1或T2提供,而不是T0
  11          
  12                  SCON:串行口控制寄存器
  13                  SM0(9F),SM1(9E)
  14                          SM0,SM1|工作方式|        说明                   |所用波特率 
  15                             0,0     |  方式0       |同步移位寄存器|       Fosc/12                 
  16                             0,1     |  方式1       | 10位异步收发       |由定时器控制 
  17                     1,0     |  方式2       | 11位异步收发       |Fosc/32或Fosc/64     
  18                     1,1     |  方式3       | 11位异步收发       |由定时器控制
  19                 SM2(9D)          多机通信0:单机,1:多机
  20                 REN(9C)          接收控制0:禁止接收,1:允许接收    
  21                 TB8      (9B)            发送数据第九位
  22                 RB8      (9A)            接收数据第九位
  23                 TI       (99)            发送中断标记
  24                 RI       (98)            接收中断标志
  25          */
  26          
  27          #include "reg52x2.h"
  28          #include <stdlib.h>
  29          #include <stdio.h>
  30          
  31          #include "define.h"
  32          
  33          #include "uart.h"
  34          
  35          #include "lcd.h"
  36          #include "timer.h"
  37          #include "string.h"
  38          
  39          
  40          
  41          bool bDC = FALSE;
  42          byte len = 0;
  43          byte idata UartCommandPool[0x10];       /*r定义串口命令堆栈(数组),数组中元素为明码形式的字符串型命令的每个字符的
             -ASCII码字*/
  44          byte idata UartDataPool[3];
  45          byte*  pUartCommandPool;
  46          byte*  pUartDataPool;
  47          
  48          UartSign eUartSign;
  49          
  50          static byte code *UartCmdString[] =
  51          {
  52                  /*系统命令*/    
  53                  "DEBUG START",
C51 COMPILER V7.10   UART                                                                  12/14/2004 10:51:16 PAGE 2   

  54                  "DEBUG END"
  55          
  56                  /*用户命令*/
  57                  
  58          };
  59          
  60          #define UART_CMD        sizeof(UartCmdString) / 2
  61          
  62          static void UartInterruptServer(void);
  63          
  64          static void UartCmdProcess(void);
  65          
  66          static void UartDataProcess(void);
  67          
  68          
  69          
  70          /******************************************************************************************
  71          *函数名:                UartInterruptServer
  72          *参数:                  无
  73          *返回值:                无
  74          *描述:                  串口中断服务子程序
  75          *编写:                  王绍伟
  76          *版本信息:              V1.0                    2003年8月15日
  77          ******************************************************************************************/
  78          static void UartInterruptServer(void) interrupt 4
  79          {
  80   1              ES = 0;
  81   1              RI = 0;
  82   1      
  83   1              if(bDC == FALSE)                                /*命令即字符串*/
  84   1              {
  85   2                      *pUartCommandPool = SBUF;
  86   2                      if(*pUartCommandPool == 0x0D)           /*回车*/
  87   2                      {
  88   3                              *pUartCommandPool = 0;                  /*字符串最后一位为NULL*/
  89   3                              pUartCommandPool = UartCommandPool;     
  90   3                              msg_queue_in(MSG_UART, NONE);
  91   3                              return;
  92   3                      }
  93   2                      else
  94   2                      {
  95   3                              pUartCommandPool++;
  96   3                      }
  97   2              }
  98   1              else
  99   1              {
 100   2                      *(pUartDataPool++) =SBUF;               /*r如果是数据,则存放于数据堆栈*/
 101   2                      if(!(--len))
 102   2                      {
 103   3                              *pUartDataPool = '\0';
 104   3                              pUartDataPool = UartDataPool;
 105   3                              msg_queue_in(MSG_UART, NONE);
 106   3                              return;
 107   3                      }
 108   2              }
 109   1              ES=1;
 110   1      }
 111          
 112          
 113          /******************************************************************************************
 114          *函数名:                UartCommand
 115          *参数:                  无
C51 COMPILER V7.10   UART                                                                  12/14/2004 10:51:16 PAGE 3   

 116          *返回值:                无
 117          *描述:                  串口消息处理/执行程序
 118          *编写:                  王绍伟
 119          *版本信息:              V1.0                    2003年8月15日
 120          ******************************************************************************************/
 121          static void UartCmdProcess()
 122          {
 123   1              switch(eUartSign)
 124   1              {
 125   2                      case DEBUG_START:               
 126   2                              bDC = 0;        
 127   2                              break;
 128   2                      case DEBUG_END:
 129   2                              bDC=0;
 130   2                              break;
 131   2              }
 132   1      }
 133          
 134          
 135          /******************************************************************************************
 136          *函数名:                UartData
 137          *参数:                  无
 138          *返回值:                无
 139          *描述:  
 140          *编写:                  王绍伟
 141          *版本信息:              V1.0                    2003年8月15日
 142          ******************************************************************************************/
 143          static void UartDataProcess()
 144          {
 145   1              switch(eUartSign)
 146   1              {
 147   2                      case UART_SETUP:
 148   2                              bDC = 0;
 149   2                              break;
 150   2              }
 151   1              /*命令处理程序*/
 152   1      }
 153          
 154          
 155          
 156          /******************************************************************************************
 157          *函数名:                uart_init
 158          *参数:                  eBaudRate
 159          *返回值:                无
 160          *描述:                  串口初始化程序,主要设定了波特率以及T1作为波特率产生
 161                                          器的工作方式等,并且指定了串口数据以及命令存放堆栈
 162          *编写:                  王绍伟
 163          *版本信息:              V1.0                    2003年8月15日
 164          ******************************************************************************************/
 165          extern void uart_init(UartBaudrate eBaudRate)
 166          {
 167   1              ES = 0;                 /*关串行口中断*/        
 168   1              
 169   1      #ifdef SPEEDUP
 170   1              RESETBIT(PCON, 7);   /*SMOD=1                   波特率加速位*/
 171   1      #else
                      SETBIT(PCON, 7);
              #endif
 174   1              
 175   1              TMOD &= 0x0F;
 176   1              TMOD |= 0x20;
 177   1              ET1 = 0;                                /*中断无效*/
C51 COMPILER V7.10   UART                                                                  12/14/2004 10:51:16 PAGE 4   

 178   1              TH1 = eBaudRate;
 179   1              TL1 = eBaudRate;
 180   1              TR1 = 1;                                /*定时器开启*/
 181   1              SCON = 0x50;
 182   1              pUartDataPool = UartDataPool;
 183   1              pUartCommandPool = UartCommandPool;
 184   1              ES = 1;                         /*串行口中断printf需要串口关闭*/
 185   1      }
 186          
 187          
 188          /******************************************************************************************
 189          *函数名:                uart_send_data
 190          *参数:                  pData
 191          *返回值:                len
 192          *描述:                  以串口发送以pData为首地址,len长度的字节数据
 193          *编写:                  王绍伟
 194          *版本信息:              V1.0                    2003年8月15日
 195          ******************************************************************************************/
 196          extern void uart_send(byte* pData, byte len)
 197          {
 198   1              bool bES;
 199   1              byte data i;
 200   1              bES = ES;               /*禁止串口产生中断,而以查询的方式发送数据*/
 201   1              ES = 0;
 202   1              if(!len)
 203   1              {
 204   2                      i = len;
 205   2              }
 206   1              else
 207   1              {
 208   2                      i = strlen(pData);
 209   2              }
 210   1              while(i--)
 211   1              {
 212   2                      SBUF = *pData++;
 213   2                      while(!TI);
 214   2                      TI = 0;
 215   2              }
 216   1              ES = bES;
 217   1      }
 218          
 219          
 220          /******************************************************************************************
 221          *函数名:                uart_process
 222          *参数:                  无
 223          *返回值:                无
 224          *描述:                  串口处理程序,
 225          *编写:                  王绍伟
 226          *版本信息:              V1.0                    2003年8月15日
 227          ******************************************************************************************/
 228          extern void uart_process(void)
 229          {
 230   1              byte i;
 231   1              if(bDC == FALSE)                                        /*若是命令,则比较命令字符串,设置串口命令标识*/
 232   1              {
 233   2      
 234   2                      for(i = 0; i < UART_CMD; i++)
 235   2                      {
 236   3                              if(!strcmp(UartCommandPool, UartCmdString[i]))
 237   3                              {
 238   4                                      eUartSign = i;
 239   4                                      ES = 1; 
C51 COMPILER V7.10   UART                                                                  12/14/2004 10:51:16 PAGE 5   

 240   4                                      UartCmdProcess();                                               /*对命令进行处理*/
 241   4                                      break;
 242   4                              }
 243   3                      }
 244   2                      
 245   2                      ES = 1;                                                         /*设置完命令标识后允许串口中断*/
 246   2              }
 247   1              else                                                                    
 248   1              {
 249   2                      UartDataProcess();                                                      
 250   2              }
 251   1      }
 252          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    431    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =     12       4
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       1
   IDATA SIZE       =     19    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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