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

📄 uart.lst

📁 在uvision2开发平台下用C51语言开发
💻 LST
字号:
C51 COMPILER V8.02   UART                                                                  03/20/2008 16:38:57 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uart.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          * Copyright (c) 2006,北京航空航天大学光电研究所
   3          * All rights reserved.
   4          * 
   5          * 文件名称:uart.h
   6          * 文件标识:uart
   7          * 摘    要:串口通讯的相关定义
   8          * 
   9          * 当前版本:1.0
  10          * 作    者:jyduan
  11          * 完成日期:2006年3月日
  12          *
  13          * 取代版本: 
  14          * 原作者  :
  15          * 完成日期:
  16          */
  17          
  18          /*--------------------------------------------------------------------------
  19          uart.c
  20          
  21          c source file for uart Atmel  Atmel AT89S52
  22          --------------------------------------------------------------------------*/
  23          
  24          #include "REGX52.H" 
  25          #include "uart.h"
  26          #include "intrins.h"
  27          
  28          #define AT89S52 1       //如果使用的是AT89S52
  29          //#define unsigned char  uchar
  30          
  31          void init_uart(int fre); 
  32          //void SerialOut(unsigned char sdata);
  33          
  34          /*------------------------------------------------------------------------------
  35          ------------------------------------------------------------------------------*/
  36          char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
  37          
  38          /*------------------------------------------------------------------------------
  39          初使化串口
  40          ------------------------------------------------------------------------------*/
  41          void init_uart(int fre)
  42          {
  43   1      #if AT89S52 
  44   1              if (fre == 1200)
  45   1              {
  46   2                      TMOD = 0x20;//0010 0000   T/c方式2   8 bit auto-loaded pattern
  47   2                      TH1  = 0xa9;//初值a9  20M晶振 1200波特率时
  48   2                      TL1  = 0xa9;//
  49   2                      SCON = 0x50;//0101 0000  串口方式1 10位异步通讯
  50   2                      PCON = PCON|0x80;//SMOD置1,波特率=溢出率/16
  51   2      //              TR1  = 1;//开串口中断
  52   2              }
  53   1      #else
              
              #endif
C51 COMPILER V8.02   UART                                                                  03/20/2008 16:38:57 PAGE 2   

  56   1      }
  57          
  58          /*--------------------------------------------------------------------
  59          当输出仅为字符串时可使用
  60          ---------------------------------------------------------------------*/
  61          void printu(char * c)   
  62          {
  63   1      
  64   1          int i = 0, j = 0;
  65   1              char ct = *c;
  66   1      //    init_uart(1200);
  67   1              TR1  = 1;
  68   1          while (ct != '\0')
  69   1              {
  70   2      #if AT89S52
  71   2                      SBUF = ct;
  72   2                      while (!TI);
  73   2                      
  74   2                      j++;
  75   2                      TI = 0;
  76   2                      ct = *(c + j);
  77   2                      
  78   2      #endif
  79   2              }
  80   1          TR1  = 0;
  81   1      }
  82          
  83          void SerialOut(unsigned char sdata)
  84          {
  85   1          init_uart(1200);
  86   1          SBUF = sdata;
  87   1              while (!TI);
  88   1              TI = 0;
  89   1      }        
  90          
  91          
  92          /*-----------------------------------------------------------------------
  93          当输出为字符串时可使用或含有一控制符时使用,格式符仅用于16进制输出
  94          格式控制符为%x,回车控制符为/n
  95          -----------------------------------------------------------------------*/
  96          void printuf(char * c, unsigned char cb) 
  97          {
  98   1              int i = 0;
  99   1              char ct = *c;
 100   1              char cx1;
 101   1              char cx2;
 102   1          
 103   1      //      init_uart(1200);
 104   1          TR1  = 1;
 105   1      #if AT89S52
 106   1              while (ct != '\0')
 107   1              {
 108   2                      if (ct == '%')
 109   2                      {       
 110   3                              if (*(c + i + 1) == 'x')              
 111   3                              {
 112   4                                      i += 2;
 113   4                                      cx1 = cb / 16;
 114   4                                      cx2 = cb % 16;
 115   4                                      if (cx1 == 0)
 116   4                                      {
 117   5                                         SBUF = hex[cx2];
C51 COMPILER V8.02   UART                                                                  03/20/2008 16:38:57 PAGE 3   

 118   5                                         while (!TI);
 119   5                                         TI = 0;
 120   5                                      }
 121   4                      else
 122   4                                      {
 123   5                                         SBUF = hex[cx1];
 124   5                                         while (!TI);
 125   5                                         TI = 0;
 126   5                                         SBUF = hex[cx2];
 127   5                         while (!TI);
 128   5                                         TI = 0;                              
 129   5                                      }
 130   4                      ct = *(c + i);
 131   4                                      continue;
 132   4                              }
 133   3                              
 134   3                      }
 135   2                      if (ct == '\n')
 136   2                      {
 137   3                              if (*(c + i + 1) == 'n')
 138   3                              {
 139   4                                      i += 2;
 140   4                                      SBUF = 13;              ////ASCII玛,er= enter 回车
 141   4                                      while (!TI);
 142   4                                      {
 143   5                                              TI = 0;
 144   5                                              SBUF = 10;          //ASCII玛,nl = next line 换行
 145   5                                      }
 146   4      
 147   4                                      while (!TI);
 148   4                                      {
 149   5                                              TI = 0;
 150   5                                              ct = *(c + i);
 151   5                                      }
 152   4                                      continue;
 153   4                              }
 154   3                      }
 155   2                      SBUF = ct;
 156   2                      while (!TI);
 157   2                      TI = 0;
 158   2                      i++;
 159   2                      ct = *(c + i);
 160   2              }
 161   1      #endif
 162   1          TR1  = 0;
 163   1      }  
 164          
 165          /*-----------------------------------------------------------------------
 166          print sting number 当输出为字符串时可使用或含有一控制符时使用,格式符仅用于16进制输出
 167          格式控制符为%x,回车控制符为/n
 168          -----------------------------------------------------------------------*/
 169          /* 该函数已调试正常 */
 170          void printsn(char * c, unsigned char* cb) 
 171          {
 172   1              int i = 0, j = 0, k = 0;
 173   1              char ct = *c;
 174   1              unsigned char cx1;
 175   1              unsigned char cx2;
 176   1          unsigned char ctn = *cb;
 177   1      
 178   1      //      init_uart(1200);
 179   1          TR1  = 1;
C51 COMPILER V8.02   UART                                                                  03/20/2008 16:38:57 PAGE 4   

 180   1      #if AT89S52
 181   1              while (ct != '\0')
 182   1              {
 183   2                      if (ct == '%')
 184   2                      {       
 185   3                              if (*(c + i + 1) == 'x')              
 186   3                              {
 187   4                                      i += 2;
 188   4                                  while (ctn != '\0')
 189   4                          {
 190   5      //                    printuf("ctn = %x\n", ctn);
 191   5       //                   printuf("k = %x\n", k);
 192   5       //                                     TR1 = 1;
 193   5      //                                  printuf("ctn = %x\n", ctn);
 194   5                          cx1 = ctn / 16;
 195   5                                          cx2 = ctn % 16;
 196   5        //                  printuf("cx1 = %x\n", cx1);
 197   5        //                  printuf("cx2 = %x\n", cx2);
 198   5      //                                  TR1  = 1;
 199   5                                  SBUF = hex[cx1];
 200   5                                  while (!TI);
 201   5                                              TI = 0;
 202   5                                              SBUF = hex[cx2];
 203   5                                  while (!TI);
 204   5                                              TI = 0;               
 205   5                                  j++;
 206   5                                  ctn = *(cb + j);
 207   5      //                                  k++;
 208   5                                      }
 209   4                              ct = *(c + i);
 210   4                                      continue;
 211   4                              }
 212   3                      
 213   3                      }
 214   2                      if (ct == '\n')
 215   2                      {
 216   3                              if (*(c + i + 1) == 'n')
 217   3                              {
 218   4                                      i += 2;
 219   4                                      SBUF = 13;              ////ASCII玛,er= enter 回车
 220   4                                      while (!TI);
 221   4                                      {
 222   5                                              TI = 0;
 223   5                                              SBUF = 10;          //ASCII玛,nl = next line 换行
 224   5                                      }
 225   4      
 226   4                                      while (!TI);
 227   4                                      {
 228   5                                              TI = 0;
 229   5                                              ct = *(c + i);
 230   5                                      }
 231   4                                      continue;
 232   4                              }
 233   3                      }
 234   2                      SBUF = ct;
 235   2                      while (!TI);
 236   2                      TI = 0;
 237   2                      i++;
 238   2                      ct = *(c + i);
 239   2              }
 240   1      #endif
 241   1          TR1  = 0;
C51 COMPILER V8.02   UART                                                                  03/20/2008 16:38:57 PAGE 5   

 242   1      }  


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    508    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16      22
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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