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

📄 uart0.lst

📁 F020集成以太网接口核心模块串口通信例程源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.05   UART0                                                                 08/18/2007 20:00:10 PAGE 1   


C51 COMPILER V7.05, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN uart0.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe uart0.c DB OE

stmt level    source

*** WARNING C500 IN LINE 1 OF UART0.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
   1          
   2          //----------------------------------------------------------------
   3          // C8051F020实验核心模块测试程序
   4          // uart0通信实验
   5          // 
   6          // 实现功能:通过交叉开关,将UART0配置到P00,P01引脚上,实现:
   7          // 1.通过计算机向模块发送命令控制底板上的LED灯
   8          // 2.串口通信协议是基于字符的,可使用超级终端进行调试。支持BACKSPACE
   9          //   键,但是不支持其它功能键和方向键。
  10          //
  11          // 实验条件:
  12          // 1.底板上JP1的1,2,4,6设置为ON状态
  13          // 
  14          // 
  15          // 说明:
  16          // 本模块中配套的测试程序都是以消息驱动的.
  17          //---------------------------------------------------------------
  18          // 修改记录
  19          // 版本      时间         人员          内容
  20          // 1.0       2007/4/30    scj          建立文件,实现基本功能
  21          // 1.1       2007/6/4     scj          根据V122底板修改
  22          //
  23          //---------------------------------------------------------------
  24          // 串口命令:
  25          // 1.setled=2,on: 点亮LED2
  26          // 2.setled=2,off:关闭LED2
  27          //---------------------------------------------------------------
  28          
  29          #include "F020.h"
  30          #include <string.h>
  31          #include <ctype.h>
  32          
  33          
  34          //--------------------------------------------
  35          // 数据类型定义
  36          //--------------------------------------------
  37          
  38          // 基本数据类型
  39          typedef unsigned char BYTE;       // 8位无符号数
  40          typedef unsigned int  WORD;       // 16位无符号数
  41          typedef unsigned long DWORD;      // 32位无符号数
  42          
  43          // 结构体
  44          typedef struct
  45          {
  46                  BYTE base;          // DIDA次数
  47                  BYTE second;        // 秒
  48                  BYTE minute;        // 分
  49                  
  50          }S_TIME;
  51          
  52          
  53          //--------------------------------------------
  54          // 引脚定义
C51 COMPILER V7.05   UART0                                                                 08/18/2007 20:00:10 PAGE 2   

  55          //--------------------------------------------
  56          #define P_LED2  P31
  57          
  58          
  59          //--------------------------------------------
  60          // 宏定义
  61          //--------------------------------------------
  62          
  63          // 系统消息定义
  64          #define SECD_SIGNAL      0x01
  65          #define MINU_SIGNAL      0x02
  66          #define UART0RECV_SIGNAL 0x04
  67          
  68          
  69          // 常量定义
  70          
  71          //定时器0定时,使用SYSCLK/12作为时钟源
  72          //定时计算方法,TH0:TL0= 65536-t*SYSCLK/12
  73          //定时25ms,TH0:TL0=0x4C 00
  74          #define TMR0H 0x4C
  75          #define TMR0L 0x00
  76          
  77          #define TICKS_PER_SEC 40
  78          
  79          #define RECVBUF_LEN  20
  80          
  81          //--------------------------------------------
  82          // 函数声明
  83          //--------------------------------------------
  84          void CommandProc(char *pRecvString);
  85          void SendString(char *pSendString);
  86          
  87          //--------------------------------------------
  88          // 全局变量定义
  89          // 全局变量以g_开头
  90          // 位变量:              g_b
  91          // 无符号字节变量:      g_c
  92          // 无符号双字节变量:   g_w
  93          // 无符号4字节变量:    g_dw
  94          // 有符号数在类型前加s,比如char型位g_sc
  95          // 结构体为g_s后为大写
  96          //--------------------------------------------
  97          data BYTE   g_cMainSignal;              // 主消息变量
  98          
  99          data S_TIME g_sTime;                    // 主时钟
 100          
 101          data BYTE   g_cRecvPointer;             // 接收指针
 102          data BYTE   g_cRecvLength;              // 接收数据长度
 103          idata BYTE  g_cRecvBuffer[RECVBUF_LEN]; // 接收缓冲区
 104          
 105          //-----------------------------------------------
 106          // 初始化函数
 107          //
 108          //-----------------------------------------------
 109          void Timer_Init()
 110          {
 111   1              
 112   1              PCON = 0;
 113   1      
 114   1              //.......................................
 115   1              // 设置定时器的时钟信号
 116   1              // - T4M T2M T1M T0M  -  -  -
C51 COMPILER V7.05   UART0                                                                 08/18/2007 20:00:10 PAGE 3   

 117   1          // 0  1   0   1   0   0  0  0
 118   1              // 1:使用SYSCLK;0:使用SYSCLK/12
 119   1              // 定时器0,1,2,4均使用SYSCLK
 120   1              //.......................................
 121   1              CKCON = 0x70;
 122   1              
 123   1              
 124   1              //......................................
 125   1              // 定时0工作在16位定时器模式
 126   1              // 定时器1工作在8位重载模式
 127   1              //......................................
 128   1      
 129   1              TMOD = 0x21;                                            
 130   1                                              
 131   1              //....................................
 132   1              // T0作为系统节拍时钟
 133   1              // 定时计算方法= 65536-t*SYSCLK
 134   1              //.....................................
 135   1              TH0 = TMR0H;            
 136   1              TL0 = TMR0L;            
 137   1              
 138   1              //.......................................
 139   1              // T1作为串口0时钟
 140   1              // 串口0波特率=SYSCLK/32*(256-TMR1LOAD)
 141   1              // T1波特率=9600
 142   1              //.......................................
 143   1                      
 144   1              TH1  = 0xB8;    
 145   1              TL1  = 0xB8;    
 146   1              
 147   1              TCON = 0x00;    
 148   1                                              
 149   1              
 150   1              //..................................................
 151   1              // T2 and T3 not used
 152   1              //..................................................
 153   1              RCAP2H = 0x00;  // Timer 2 Capture Register High Byte
 154   1              RCAP2L = 0x00;  // Timer 2 Capture Register Low Byte    
 155   1              TH2    = 0x00;  // Timer 2 High Byte    
 156   1              TL2    = 0x00;  // Timer 2 Low Byte     
 157   1          T2CON  = 0x00;      // Timer 2 Control Register
 158   1                      
 159   1              TMR3RLL = 0x00; // Timer 3 Reload Register Low Byte
 160   1              TMR3RLH = 0x00; // Timer 3 Reload Register High Byte
 161   1              TMR3H   = 0x00; // Timer 3 High Byte
 162   1              TMR3L   = 0x00; // Timer 3 Low Byte
 163   1          TMR3CN  = 0x00;     // Timer 3 Control Register
 164   1      
 165   1          //.....................................................
 166   1              // T4 作为串口1波特率发生器
 167   1              // T4波特率=SYSCLK/32*(65536-RCAP4H:RCAP4L)
 168   1              // T4波特率=9600
 169   1              //.....................................................
 170   1          RCAP4H = 0xFF;  // Timer 4 Capture Register High Byte
 171   1          RCAP4L = 0xDC;  // Timer 4 Capture Register Low Byte
 172   1          TH4    = 0xFF;  // Timer 4 High Byte
 173   1          TL4    = 0xDC;  // Timer 4 Low Byte
 174   1          T4CON  = 0x30;  // Timer 4 Control Register
 175   1          
 176   1      
 177   1      }
 178          
C51 COMPILER V7.05   UART0                                                                 08/18/2007 20:00:10 PAGE 4   

 179          //...........................................................
 180          // 功能:UART0初始化
 181          // 输入参数:无
 182          // 输出参数:无
 183          // 注意:1.应该首先使用交叉开关为UART0分配相应的引脚
 184          //       2.初始化定时器1作为波特率发生器
 185          //..........................................................
 186          void UART0_Init()
 187          {
 188   1              
 189   1          SCON0 = 0x50;          // 8位波特率异步通信模式
 190   1      
 191   1          REN0  = 1;             // 使能UART0接收
 192   1          TR1   = 1;             // 启动定时器1
 193   1      }
 194          
 195          //......................................................
 196          // 功能:配置交叉开关和端口方向
 197          // 输入参数:无
 198          // 输出参数:无
 199          // 注意:该函数使能交叉开关
 200          //       TX0,RX0被分配到P00,P01
 201          //.....................................................
 202          
 203          void Port_IO_Init()
 204          {
 205   1          // P0.0  -  TX0 (UART0), Open-Drain, Digital
 206   1          // P0.1  -  RX0 (UART0), Open-Drain, Digital
 207   1          // P0.2  -  SCK  (SPI0), Open-Drain, Digital
 208   1          // P0.3  -  MISO (SPI0), Open-Drain, Digital
 209   1          // P0.4  -  MOSI (SPI0), Open-Drain, Digital
 210   1          // P0.5  -  NSS  (SPI0), Open-Drain, Digital
 211   1          // P0.6  -  SDA (SMBus), Open-Drain, Digital
 212   1          // P0.7  -  SCL (SMBus), Open-Drain, Digital
 213   1      
 214   1          // P1.0  -  Skipped,     Open-Drain, Analog
 215   1          // P1.1  -  Skipped,     Open-Drain, Analog
 216   1          // P1.2  -  Skipped,     Open-Drain, Analog
 217   1          // P1.3  -  Skipped,     Open-Drain, Analog
 218   1          // P1.4  -  Skipped,     Open-Drain, Analog
 219   1          // P1.5  -  Skipped,     Open-Drain, Analog
 220   1          // P1.6  -  Skipped,     Open-Drain, Analog
 221   1          // P1.7  -  Skipped,     Open-Drain, Analog
 222   1      
 223   1          // P2.0  -  TX1 (UART1), Open-Drain, Digital
 224   1          // P2.1  -  RX1 (UART1), Open-Drain, Digital
 225   1          // P2.2  -  INT0 (Tmr0), Open-Drain, Digital
 226   1          // P2.3  -  INT1 (Tmr1), Open-Drain, Digital
 227   1          // P2.4  -  Unassigned,  Open-Drain, Digital
 228   1          // P2.5  -  Unassigned,  Open-Drain, Digital
 229   1          // P2.6  -  Unassigned,  Open-Drain, Digital
 230   1          // P2.7  -  Unassigned,  Open-Drain, Digital
 231   1      
 232   1          // P3.0  -  Unassigned,  Open-Drain, Digital
 233   1          // P3.1  -  Unassigned,  Push-Pull,  Digital
 234   1          // P3.2  -  Unassigned,  Open-Drain, Digital
 235   1          // P3.3  -  Unassigned,  Open-Drain, Digital
 236   1          // P3.4  -  Unassigned,  Open-Drain, Digital
 237   1          // P3.5  -  Unassigned,  Open-Drain, Digital
 238   1          // P3.6  -  Unassigned,  Open-Drain, Digital
 239   1          // P3.7  -  Unassigned,  Open-Drain, Digital
 240   1      
C51 COMPILER V7.05   UART0                                                                 08/18/2007 20:00:10 PAGE 5   

 241   1          P1MDIN    = 0x00;
 242   1          P3MDOUT   = 0x02;
 243   1          XBR0      = 0x07;
 244   1          XBR1      = 0x14;
 245   1          XBR2      = 0x44;
 246   1      
 247   1      
 248   1      
 249   1      }
 250          
 251          void Oscillator_Init()
 252          {
 253   1          int i = 0;
 254   1          OSCXCN    = 0x67;
 255   1          for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
 256   1          while ((OSCXCN & 0x80) == 0);
 257   1          OSCICN    = 0x08;
 258   1      }
 259          
 260          void Interrupts_Init()
 261          {
 262   1              //..................................
 263   1              // 初始化中断
 264   1              // EA IEGF0 ET2 ES0 ET1 EX1 ET0 EX0
 265   1          //..................................
 266   1          IE  = 0;
 267   1      
 268   1              ET0 = 1;        // 打开定时器0中断
 269   1      
 270   1              

⌨️ 快捷键说明

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