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

📄 uart0.lst

📁 C8051F020单片机用UART0实现RS-232通信
💻 LST
字号:
C51 COMPILER V7.06   UART0                                                                 12/08/2008 09:51:30 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN UART0.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe UART0.c DB OE

stmt level    source

   1          //-----------------------------------------------------------------------------
   2          // WUART0.c
   3          //-----------------------------------------------------------------------------
   4          //
   5          // 作者: daqian
   6          // DATE: 2007年12月7号
   7          //
   8          // Target: C8051F02x
   9          // Tool chain: KEIL C51
  10          //
  11          // 描述:
  12          //    用UART0实现RS-232通信,运行前将TX0和P0.0短接,将RXD和P0.1短接,当接收到一个
  13          //    数据后,再将接收到的数据送出。
  14          //
  15          //-----------------------------------------------------------------------------
  16          // 包含文件
  17          //-----------------------------------------------------------------------------
  18          
  19          #include <c8051f020.h>              // SFR声明
  20          #include <intrins.h>
  21          
  22          //-----------------------------------------------------------------------------
  23          // C8051F02X的16位SFR定义
  24          //-----------------------------------------------------------------------------
  25          
  26          sfr16 DP       = 0x82;              // 数据指针寄存器
  27          sfr16 TMR3RL   = 0x92;              // Timer3 重加载寄存器
  28          sfr16 TMR3     = 0x94;              // Timer3 寄存器
  29          sfr16 ADC0     = 0xbe;              // ADC0 转换结果寄存器
  30          sfr16 ADC0GT   = 0xc4;              // ADC0 下限寄存器
  31          sfr16 ADC0LT   = 0xc6;              // ADC0 上限寄存器
  32          sfr16 RCAP2    = 0xca;              // Timer2 捕捉寄存器
  33          sfr16 T2       = 0xcc;              // Timer2 寄存器
  34          sfr16 RCAP4    = 0xe4;              // Timer4 捕捉寄存器
  35          sfr16 T4       = 0xf4;              // Timer4 寄存器
  36          sfr16 DAC0     = 0xd2;              // DAC0 数据寄存器
  37          sfr16 DAC1     = 0xd5;              // DAC1 数据寄存器
  38          
  39          //-----------------------------------------------------------------------------
  40          // 全局常量
  41          //-----------------------------------------------------------------------------
  42          
  43          #define SYSCLK          22118400          // SYSCLK frequency in Hz
  44          #define BAUDRATE        9600              // Baud rate of UART in bps
  45          bit ReceiveBit;                           // 接受标志位
  46          unsigned char temp;
  47          
  48          //-----------------------------------------------------------------------------
  49          // 函数原型
  50          //-----------------------------------------------------------------------------
  51          
  52          
  53          sbit button = P0^5;
  54          sbit b0=P1^0;
  55          sbit light7=P2^7;
C51 COMPILER V7.06   UART0                                                                 12/08/2008 09:51:30 PAGE 2   

  56          sbit light6=P2^6;
  57          sbit light5=P2^5;
  58          sbit light4=P2^4;
  59          sbit light3=P2^3;
  60          sbit light2=P2^2;
  61          sbit light1=P2^1;
  62          sbit light0=P2^0;
  63          
  64          
  65          
  66          void main (void);
  67          void SYSCLK_Init (void);              
  68          void PORT_Init (void);
  69          void UART0_Init (void);
  70          void UART0_ISR (void);
  71          void delay (unsigned int x);//unsigned int m
  72          
  73          //-----------------------------------------------------------------------------
  74          // 主程序
  75          //-----------------------------------------------------------------------------
  76          
  77          void main (void) 
  78          { 
  79   1          char bdata i;
  80   1          WDTCN = 0xde;                    // 禁止看门狗定时器
  81   1          WDTCN = 0xad;
  82   1              ReceiveBit = 1;
  83   1          SYSCLK_Init ();
  84   1              PORT_Init ();
  85   1          UART0_Init ();
  86   1          EA = 1;                          // 允许全局变量
  87   1          ES0 = 1;
  88   1      //      T1M=0;                           //系统时钟12分频,兼容51
  89   1              temp = 0x22;
  90   1              light7 = 0;
  91   1              delay(100000);
  92   1              light6 = 0;
  93   1              delay(100000);
  94   1              light5 = 0;
  95   1              delay(100000);
  96   1              light4 = 0;
  97   1              delay(100000);
  98   1              light3 = 0;
  99   1              delay(100000);
 100   1              light2 = 0;
 101   1              delay(100000);
 102   1              light1 = 0;
 103   1              delay(100000);
 104   1              light0 = 0;
 105   1              delay(100000);
 106   1      
 107   1              while(1)
 108   1              {                                // 是否接收到一个数据
 109   2      //       if(button==0)
 110   2                 {
 111   3      /*       b0=1;
 112   3                 delay (6000000);                // 延时
 113   3                 b0=0;
 114   3                 delay (6000000);*/
 115   3      //       if(ReceiveBit) 
 116   3                 {
 117   4                     SBUF0 = temp;                 // 将接收到的数据送出
C51 COMPILER V7.06   UART0                                                                 12/08/2008 09:51:30 PAGE 3   

 118   4                     while(TI0 == 0);// 发送标志位是否产生
 119   4                     TI0 = 0;// 清发送标志位
 120   4      //                 ReceiveBit=0;
 121   4                 }
 122   3                 }
 123   2      
 124   2              }
 125   1              _nop_();
 126   1      
 127   1      }
*** WARNING C280 IN LINE 79 OF UART0.C: 'i': unreferenced local variable
 128          
 129          
 130          //-----------------------------------------------------------------------------
 131          // 初始化程序
 132          //-----------------------------------------------------------------------------
 133          
 134          //-----------------------------------------------------------------------------
 135          // 系统时钟初始化
 136          //-----------------------------------------------------------------------------
 137          //
 138          // 该程序初始化系统时钟,使用11.0592MHz的晶振作为时钟源
 139          //
 140          void SYSCLK_Init (void)
 141          {
 142   1         int i;                           // 延时计数器
 143   1      
 144   1         OSCXCN = 0x67;                   // 启动外部振荡器使用
 145   1                                          // 11.0592MHz 的晶体
 146   1      
 147   1         for (i=0; i < 256; i++) ;        // 等待振荡器起振
 148   1       
 149   1         while (!(OSCXCN & 0x80)) ;       // 等待晶体振荡器稳定
 150   1      
 151   1         OSCICN = 0x88;                   // 选择外部振荡器作为系统时钟源并允许时钟丢失检测器
 152   1                                          
 153   1      
 154   1      }
 155          
 156          //-----------------------------------------------------------------------------
 157          // IO口初始化
 158          //-----------------------------------------------------------------------------
 159          //
 160          // 配置交叉开关和GPIO端口
 161          //
 162          void PORT_Init (void)
 163          {
 164   1         XBR0     = 0x04;                 // 允许UART0
 165   1         XBR1     = 0x00;
 166   1         XBR2     = 0x40;                 // 允许交叉开关和弱上拉
 167   1         P0MDOUT |= 0x01;                 // 使能TX0作为推拉输出
 168   1         P1MDOUT |= 0x40;                 // 允许P1.6(LED)为推挽输出
 169   1      }
 170          
 171          //-----------------------------------------------------------------------------
 172          // UART0_Init(串口通信扩展用)
 173          //-----------------------------------------------------------------------------
 174          //
 175          // 配置UART0使用Timer1, 波特率为<baudrate>,桢格式为8-N-1.
 176          //
 177          void UART0_Init (void)
 178          {
C51 COMPILER V7.06   UART0                                                                 12/08/2008 09:51:30 PAGE 4   

 179   1         SCON0   = 0x50;                  // SCON0: mode 1, 8-bit UART, enable RX
 180   1         TMOD    = 0x20;                  // TMOD: timer 1, mode 2, 8-bit reload
 181   1         TH1    = 244;  // set Timer1 reload value for baudrate:-(SYSCLK/BAUDRATE/16)
 182   1         TL1    = TH1;
 183   1         TR1    = 1;                      // start Timer1
 184   1      //   CKCON |= 0x10;                   // Timer1 uses SYSCLK as time base
 185   1         PCON  |= 0x80;                   // SMOD0 = 1
 186   1         //TI0    = 1;                      // Indicate TX0 ready
 187   1      }
 188          
 189          //-----------------------------------------------------------------------------
 190          // UART0_ISR(串口中断0子程序)
 191          //-----------------------------------------------------------------------------
 192          //
 193          void UART0_ISR (void) interrupt 4
 194          {
 195   1          if(RI0)// 是发送中断还是接收中断
 196   1              {
 197   2            RI0 = 0;// 清接收标志位
 198   2            temp = SBUF0; // 保存接收到的数据
 199   2            ReceiveBit = 1;                 // 置接收标志
 200   2              delay(200);
 201   2      
 202   2              }
 203   1      }
 204          
 205          
 206          void delay(unsigned int x)
 207          {
 208   1              int i;
 209   1              for(i=0;i<=x;i++);
 210   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    231    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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