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

📄 uart.lst

📁 linux下数据下载器的设计与实现
💻 LST
字号:
C51 COMPILER V7.50   UART                                                                  10/12/2007 17:05:46 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN UART.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE UART.c OBJECTADVANCED OPTIMIZE(11,SIZE) REGFILE(.\nand_fw2k.ORC) BROWSE ORD
                    -ER INCDIR(c:\cypress\usb\target\inc) DEFINE(NAND_2K) DEBUG

line level    source

   1          /************************************************************************************ 
   2           Copyright (C), 1988-2007, Xi'an Keyway Control & Measurement Technology Co., Ltd
   3           FileName: UART.c 
   4           Description     :串口模块,主要实现串口初始化及数据传输       
   5           Version         :1.0 
   6           Function List   :    
   7           History:         // 历史修改记录 
   8                <author>      <time>        <version >       <desc> 
   9                LigangWang    07/08/07       1.0             build this moudle   
  10          *************************************************************************************/
  11          
  12          #include "globals.h"
  13          
  14          /************************************************************************************* 
  15            Function:       UM_InitUART
  16            Description:    初始化串口,串口参数由CM_ConfigParameter全局变量决定
  17            Called By:      fw.c main()
  18            Input:          N/A
  19            Output:         N/A
  20            Return:         void
  21            Others:         该函数依赖全军变量 CM_ConfigParameter,故在调用该函数前需对其进行
  22                                            初始化。
  23          *************************************************************************************/
  24          
  25          void UM_InitUART()
  26          {
  27   1              TMOD = (TMOD & 0x0F) | 0x20;                                                    // 设置定时器1工作方式2,自动重载方式  
  28   1              if(CM_ConfigParameter.RS232_bps <= RS232_57600 
  29   1                      && CM_ConfigParameter.RS232_bps != 0x00)
  30   1              {
  31   2                      CKCON |= 0x10;                                                                  //T1M = CLKOUT/4
  32   2                      PCON |= 0x80 ;                                                          // 设置SMOD0=1,波特率加倍
  33   2                      EICON |= 0x80;                                                          // 设置SMOD1=1,波特率加倍  
  34   2              }
  35   1              else if(CM_ConfigParameter.RS232_bps == RS232_115200)   //快速波特率模式
  36   1              {
  37   2                      UART230 |= 3;
  38   2                      PCON &= 0x7F ;                                                          // 设置SMOD0=0,
  39   2                      EICON &= 0x7F;                                                          // 设置SMOD1=0,
  40   2              }
  41   1      
  42   1              SCON0 = 0x50;                                                                           // 设置串行口0工作方式1,10位异步收发,REN=0,允许接收。RI=0,TI=0 
  43   1              SCON1 = 0x50;                                                                                   // 设置串行口1工作方式1,10位异步收发,REN=0,允许接收。RI1=0,TI1=0 
  44   1              TH1  = CM_ConfigParameter.RS232_bps ;                           // 设置定时器1的初值       
  45   1              TL1  = CM_ConfigParameter.RS232_bps;
  46   1              ES1 = 1;                                                                                        //允许串口1中断
  47   1              TR1 = 1;                                                                                                //允许串口1工作
  48   1      
  49   1              EA = 1;                                                                                                 //打开中断
  50   1      }
  51          
  52          #ifdef DEBUG_VER
              
              /************************************************************************************* 
C51 COMPILER V7.50   UART                                                                  10/12/2007 17:05:46 PAGE 2   

                Function:       UM_SendChar
                Description:    以发送单字符值到串口1
                Called By:      ...
                Input:          ch @ char:欲发送的字符
                Output:         N/A
                Return:         void
                Others:         调用该函数前须调用UM_InitUART进行初始化串口
              *************************************************************************************/
              void UM_SendChar(char ch)
              {
                      SBUF1 = ch;                                                                                             //写字符到发送缓冲区
                      while(TI1 == 0);                                                                                //等待发送完
                      TI1 = 0;
              }
              
              /************************************************************************************* 
                Function:       UM_SendString
                Description:    以发送字符串到串口1,字符串以0结束,长度不固定
                Called By:      ...
                Input:          str @ char *:欲发送的字符串
                Output:         N/A
                Return:         void
                Others:         调用该函数前须调用UM_InitUART进行初始化串口
              *************************************************************************************/
              void UM_SendString(const char * str)
              {
                      while(*str != 0)
                      {
                              UM_SendChar(*str);
                              str++;
                      }
              }
              
              
              /************************************************************************************* 
                Function:       UM_SendByte
                Description:    发送一个Byte类型值转换成16进制字符串到串口,例如0x5A,则分别发送
                                                5、A的ASIIC值到串口
                Called By:      ...
                Input:          ch @ BYTE :欲发送的数值
                Output:         N/A
                Return:         void
                Others:         调用该函数前须调用UM_InitUART进行初始化串口
              *************************************************************************************/
              void UM_SendByte(BYTE ch)
              {
                      if((ch >> 4) > 9)                                                               //先发送高4位
                              UM_SendChar((ch >> 4)+0x41-10);                         //A~F,0x41为'A'的ASIIC码
                      else
                              UM_SendChar((ch >> 4)+0x30);                            //0~9,0x30为'0'的ASIIC码
              
                      if((ch & 0x0f) > 9)                                                             //处理低4位
                              UM_SendChar((ch & 0x0f)+0x41-10);
                      else
                              UM_SendChar((ch & 0x0f)+0x30);
                      UM_SendChar(' ');
              }
              
              /************************************************************************************* 
                Function:       UM_SendDword
                Description:    发送一个双Word类型值转换成16进制字符串到串口
                Called By:      ...
C51 COMPILER V7.50   UART                                                                  10/12/2007 17:05:46 PAGE 3   

                Input:          ch @ BYTE :欲发送的数值
                Output:         N/A
                Return:         void
                Others:         调用该函数前须调用UM_InitUART进行初始化串口
              *************************************************************************************/
              void UM_SendDword(DWORD ch)
              {
                      UM_SendByte(((BYTE*)&ch)[0]);                                   //高位优先
                      UM_SendByte(((BYTE*)&ch)[1]);
                      UM_SendByte(((BYTE*)&ch)[2]);
                      UM_SendByte(((BYTE*)&ch)[3]);
                      UM_SendChar(' ');
              }
              
              /************************************************************************************* 
                Function:       UM_SendWord
                Description:    发送一个Word类型值转换成16进制字符串到串口
                Called By:      ...
                Input:          ch @ BYTE :欲发送的数值
                Output:         N/A
                Return:         void
                Others:         调用该函数前须调用UM_InitUART进行初始化串口
              *************************************************************************************/
              void UM_SendWord(WORD ch)
              {
                      UM_SendByte(((BYTE*)&ch)[0]);                                   //高位优先
                      UM_SendByte(((BYTE*)&ch)[1]);
                      UM_SendChar(' ');
              }
              
              #endif  //endif DEBUG_VER
 148          
 149          /************************************************************************************* 
 150            Function:       Serial_Interrupt1
 151            Description:    串口1接收中断服务程序,用于接收单个字符并保存到缓冲区
 152            Called By:      ...
 153            Input:          N/A
 154            Output:         N/A
 155            Return:         void
 156            Others:         调用该函数前须调用UM_InitUART进行初始化串口
 157                                            1.FM_CurrentBuff用于指示当前缓冲区 0为FM_DataBuff1,1为FM_DataBuff2
 158                                            2.FM_DPointer1、FM_DPointer2分别用于缓冲区索引
 159                                            3.每接收一个字符索引加以,当当前缓冲区满后切换到另外一个缓冲区+
 160                                            4.每接收一个字符时清除timer0定时值
 161          *************************************************************************************/
 162          void Serial_Interrupt1() interrupt COM1_VECT
 163          {
 164   1              if(RI1 == 1)                                                                    
 165   1              {
 166   2                      RI1 = 0;
 167   2                      if(FM_CurrentBuff == 0)                                         //当前缓冲区为1  
 168   2                      {
 169   3                              FM_DataBuff1[FM_DPointer1] = SBUF1;             //保存数据
 170   3                              FM_DPointer1 ++;                                                //索引加1
 171   3                              if(FM_DPointer1 >= MAX_RS232_BUFF)              //缓冲区满后切换缓冲区
 172   3                                      FM_CurrentBuff = 1;
 173   3                      }
 174   2                      else                                                                            //当前缓冲区为2
 175   2                      {
 176   3                              FM_DataBuff2[FM_DPointer2] = SBUF1;
 177   3                              FM_DPointer2 ++;
 178   3                              if(FM_DPointer2 >= MAX_RS232_BUFF)
C51 COMPILER V7.50   UART                                                                  10/12/2007 17:05:46 PAGE 4   

 179   3                                      FM_CurrentBuff = 0;
 180   3                      }
 181   2              }
 182   1      
 183   1              timer0_tick = 0;                                                                //定时器清零
 184   1      } 
 185          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    247    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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