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

📄 uart0.lst

📁 C8051F系列单片机
💻 LST
字号:
C51 COMPILER V7.20   UART0                                                                 10/18/2005 11:08:10 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN UART0.OBJ
COMPILER INVOKED BY: c:\KEIL\C51\BIN\C51.exe UART0.c DB OE

line level    source

   1          //-----------------------------------------------------------------------------
   2          // 版权归新华龙电子公司所有
   3          //-----------------------------------------------------------------------------
   4          //
   5          //文件名:      UART0.c
   6          //
   7          //编写人:      LC
   8          //
   9          //编写时间:2005/03/10
  10          //
  11          //目标器件: C8051F02x
  12          //
  13          //编译工具: Silicon Laboratories IDE
  14          //
  15          //程序说明:     此程序用UART0实现RS-232通信,运行前将TX0和P00 短接,RX0和
  16          //                      P01短接,当接收到一个数据后,再将接收到的数据送出。
  17          
  18          #include <c8051f020.h>                  /*SFR定义*/
  19          #include <intrins.h>
  20          //-----------------------------------------------------------------------------
  21          // Global CONSTANTS
  22          //-----------------------------------------------------------------------------
  23          
  24          #define BAUDRATE     9600               /*UART0的波特率*/
  25          #define SYSCLK       11059200           /*系统时钟*/
  26          sbit BUZ = P3^5;
  27          //-----------------------------------------------------------------------------
  28          // Function PROTOTYPES
  29          //-----------------------------------------------------------------------------
  30          
  31          void SYSCLK_Init (void);
  32          void PORT_Init (void);
  33          void UART0_Init (void);
  34          
  35          bit     ReceiveBit;                             /*接收标志位*/
  36          unsigned char temp;
  37          
  38          /*延时子程序*/
  39          void delay(unsigned int m)
  40          {
  41   1              unsigned int n;
  42   1              n=0;
  43   1              while(n < m)
  44   1              {n++;}
  45   1              return;
  46   1      }
  47          //-----------------------------------------------------------------------------
  48          // MAIN Routine
  49          //-----------------------------------------------------------------------------
  50          
  51          void main(void)
  52          {
  53   1              unsigned char i;
  54   1              WDTCN = 0xde;                       /*关看门狗*/
  55   1              WDTCN = 0xad;
C51 COMPILER V7.20   UART0                                                                 10/18/2005 11:08:10 PAGE 2   

  56   1              ReceiveBit=0;
  57   1              SYSCLK_Init ();                     /*初始化系统时钟*/
  58   1              PORT_Init ();                       /*初始挂交叉开关和I/O口*/
  59   1              UART0_Init ();                      /*初始化UART0*/
  60   1              EA=1;
  61   1              ES0=1;
  62   1              while(1){
  63   2                      while (ReceiveBit==1) {                 /*是否接收到一个数据*/
  64   3                              ES0=0;                                          /*关串口中断0*/
  65   3                              EA=0;                                           /*关总中断*/
  66   3                              ReceiveBit=0;                           /*清接收标志位*/
  67   3                              delay(60000);                           /*延时*/
  68   3                              delay(60000);
  69   3                              delay(60000);
  70   3                              SBUF0=temp;                                     /*将接收到数据送出*/
  71   3                              while(TI0==0);                          /*发送标志位是否产生*/
  72   3                              TI0=0;                                          /*清发送标志位*/
  73   3                      BUZ=0;                                          /*蜂鸣器响*/
  74   3                              for(i=0; i<3; i++)                      /*延时*/
  75   3                              {
  76   4                                      delay(60000);
  77   4                              }
  78   3                              BUZ=1;                                          /*蜂鸣器灭*/
  79   3                              ES0=1;                                          /*开中断标志*/
  80   3                              EA=1;
  81   3                      }
  82   2                      _nop_();
  83   2              }
  84   1      }
  85          
  86          //-----------------------------------------------------------------------------
  87          // SYSCLK_Init
  88          //-----------------------------------------------------------------------------
  89          //
  90          // This routine initializes the system clock to use an 22.1184MHz crystal
  91          // as its clock source.
  92          //
  93          void SYSCLK_Init (void)
  94          {
  95   1         int i;                              /*延时计数器*/
  96   1      
  97   1         OSCXCN = 0x67;                      /*打开外部晶体振荡器*/
  98   1         for (i=0; i < 256; i++) ;           /*延时*/
  99   1      
 100   1         while (!(OSCXCN & 0x80)) ;          /*查询外部晶体是否稳定起振*/
 101   1      
 102   1         OSCICN = 0x88;                      /*用外部晶体作为系统时钟,并使能时钟丢失检测*/
 103   1      }
 104          
 105          //-----------------------------------------------------------------------------
 106          // PORT_Init
 107          //-----------------------------------------------------------------------------
 108          //
 109          // Configure the Crossbar and GPIO ports
 110          //
 111          void PORT_Init (void)
 112          {
 113   1         XBR0    = 0x04;                     /*使能UART0*/
 114   1         XBR1    = 0x00;
 115   1         XBR2    = 0x40;                     /*使能交叉开关和弱上拉*/
 116   1         P0MDOUT |= 0x01;                    /*使能TX0作为推挽输出*/
 117   1         P1MDOUT |= 0x40;                    /*时能P1.6 (LED)作为推挽输出*/
C51 COMPILER V7.20   UART0                                                                 10/18/2005 11:08:10 PAGE 3   

 118   1         P3MDOUT |= 0xdf;
 119   1      }
 120          
 121          //-----------------------------------------------------------------------------
 122          // UART0_Init
 123          //-----------------------------------------------------------------------------
 124          //
 125          // Configure the UART0 using Timer1, for <baudrate> and 8-N-1.
 126          //
 127          void UART0_Init (void)
 128          {
 129   1         SCON0   = 0x50;                     /*SCON0:模式1,8位UART,时能RX*/
 130   1         TMOD    = 0x20;                     /*TMOD: 定时器工作再模式2, 8位重载*/
 131   1         TH1    = -(SYSCLK/BAUDRATE/16);     /*设置定时1用作波特率的重载值*/
 132   1         TR1    = 1;                         /*开定时器1*/
 133   1         CKCON |= 0x10;                      /*定时器1用系统时钟作为它的时基*/
 134   1         PCON  |= 0x80;                      /*SMOD00 = 1*/
 135   1      }
 136          
 137          /*串口中断0子程序*/
 138          void UART0_ISR (void) interrupt 4
 139          {
 140   1              if(!TI0)               //是发送中断还是接收中断
 141   1              {
 142   2                      RI0 = 0;                        /*清接收标志位*/
 143   2                      temp =SBUF0;            /*保存接收到的数据*/
 144   2                      ReceiveBit=1;           /*置接收标志*/
 145   2              }
 146   1              TI0 = 0;                                /*清发送标志位*/
 147   1      }


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


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

⌨️ 快捷键说明

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