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

📄 uart.lst

📁 使用ch375和stc 51写的usb鼠标的代码
💻 LST
字号:
C51 COMPILER V7.06   UART                                                                  04/12/2006 14:55:28 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\HEX\uart.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uart.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\HEX\uart.obj)

stmt level    source

   1          #ifndef __UART_C__
   2          #define __UART_C__
   3          #endif
   4          
   5          #include "head.h"
   6          #include <reg52.h>
   7          #include <string.h>
   8          #include "uart.h"
   9          
  10          extern uint8 eaCount;
  11          //-----------------------------------
  12          // 串行口通讯子程序
  13          // 串行口初始化
  14          // 晶振22.0592M, SMOD=1, 使用6T, 波特率115200
  15          //波特率=晶振频率/(256-定时器计数)/(一条指令的机器周期)
  16          //-----------------------------------
  17          void ComInit(void)
  18          {
  19   1          TMOD = 0x21;                //T1为方式2, t0模式1
  20   1          TH0=0x00;                           //定时器0用于定时
  21   1              TL0=0x00;
  22   1          TH1  = 0xFe;                //
  23   1          TL1  = 0xFe;
  24   1          PCON = PCON | 0x80;         //SMOD=1
  25   1          SCON = 0x50;                //串行口工作在方式3
  26   1          TR0 = 1;
  27   1          TR1 = 1;
  28   1          ET0=1;
  29   1          EA = 1;
  30   1      }
  31          // 发送数据
  32          void SendChar(unsigned char buff)
  33          {
  34   1          SBUF = buff;
  35   1          while( !TI );
  36   1          TI=0;
  37   1      }
  38          
  39          //发送数组
  40          void uartPut(uint8 dat[], uint8 len)
  41          {
  42   1                      uint8 i;
  43   1                      ENTER_CRITICAL();
  44   1                      for(i=0; i<len; i++)
  45   1                      {
  46   2                                      SendChar(dat[i]);
  47   2                      }
  48   1                      EXIT_CRITICAL();
  49   1      }
  50          
  51          //--------------------------------
  52          //发送字符串
  53          //--------------------------------
  54          void  uartPutStr(uint8 *str)
  55          {
C51 COMPILER V7.06   UART                                                                  04/12/2006 14:55:28 PAGE 2   

  56   1                      uint8 len;
  57   1                      len = strlen(str);
  58   1                      uartPut(str, len);
  59   1      }
  60          
  61          //------------------------------------------
  62          //把bsd码数据转换成ascii码的
  63          //如:123转换为 49(1) 50(2) 51(3)
  64          //dat[]是2个字节的数组,存放16进制返回数据
  65          //原始数据放到dat[0]
  66          //-------------------------------------------
  67          void bcdToAscii(uint8 dat[])
  68          {
  69   1                      uint8 idata temp;
  70   1                      temp = dat[0];
  71   1                      dat[0] = (temp>>4);
  72   1                      if(0<=dat[0] && dat[0]<10)                                      //数字0-9
  73   1                      {
  74   2                                      dat[0] += 48;                                   //转换到数字对应的ascii码0(48)1(49)
  75   2                      }
  76   1                      else                                                                                    //数字10(a)-15(f)
  77   1                      {
  78   2                                      dat[0] += 55;                                   //转换到数字对应的ascii码10(a)(65)
  79   2                      }
  80   1                      dat[1] = (temp&0x0f);
  81   1                      if(0<=dat[1] && dat[1]<10)                                      //数字0-9
  82   1                      {
  83   2                                      dat[1] += 48;                                   //转换到数字对应的ascii码0(48)1(49)
  84   2                      }
  85   1                      else                                                                                    //数字10(a)-15(f)
  86   1                      {
  87   2                                      dat[1] += 55;                                   //转换到数字对应的ascii码10(a)(65)
  88   2                      }
  89   1      }
  90          
  91          //-----------------------------------------------
  92          //发送数字, 一个数字由两个ASCII码组成, 为16进制
  93          //比如, 0xef发送为e和f两个字符
  94          //----------------------------------------------
  95          void uartPutNum(uint8 *num, len)
  96          {
  97   1                      uint16  idata n;
  98   1                      uint8   idata temp[2];
  99   1                      if(NULL!=num)
 100   1                      {
 101   2                                       for(n=0; n<len; n++)
 102   2                                       {
 103   3                                                              *(temp) = *(num+n);
 104   3                                                              bcdToAscii(temp);
 105   3                                                              uartPut(temp, 2);
 106   3                                       }
 107   2                      }
 108   1      }
 109          
 110          //---------------------------------------------------------
 111          //函数功能:
 112          //打印字符串, 和一个已知长度的数字数组
 113          //参数说明:
 114          //format                字符串, 在有%的地方打印数字
 115          //num                           数字数组指针
 116          //len                           数字数组长度
 117          //---------------------------------------------------------
C51 COMPILER V7.06   UART                                                                  04/12/2006 14:55:28 PAGE 3   

 118          void uartPrint(const char *format, uint8 *num, uint8 len)
 119          {
 120   1                      if(NULL!=format)
 121   1                      {
 122   2                                      uint16 idata count, i;
 123   2                                      i=strlen(format);
 124   2                                      for(count=0; count<i; count++)
 125   2                                      {
 126   3                                                      if('%'!=(*(format+count)))
 127   3                                                      {
 128   4                                                                      uartPut(format+count, 1);
 129   4                                                      }
 130   3                                                      else
 131   3                                                      {
 132   4                                                                      uartPutNum(num, len);
 133   4                                                      }
 134   3                                      }
 135   2                      }
 136   1                      else
 137   1                      {
 138   2                                      return;
 139   2                      }
 140   1      
 141   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    363    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      18
   IDATA SIZE       =   ----       9
   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 + -