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

📄 pca_uart_device.lst

📁 STC单片机基本程序和模块的介绍和源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   PCA_UART_DEVICE                                                       02/25/2009 10:34:59 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE PCA_UART_DEVICE
OBJECT MODULE PLACED IN PCA_UART_Device.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE PCA_UART_Device.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          
   3          #include <reg52.h>
   4          
   5          #define BAUD_RATE 70000 // 用户定义的SW_UART波特率
   6          #define SYSCLK 24014772 // 系统时钟取自外部18.432MHz晶体
   7          #define    TIMER_INI       0X49   //比较定时器初始化,也就是设置为软件定时器
   8          #define    NEG_CAP_INT     0x11   //下降沿捕捉中断
   9          #define    DISABLED_MODE   0x00   //禁止下降沿捕捉模式
  10          #define    FOSC12_MOD      0x09   //系统时钟的12分频
  11          #define    RELOAD 0xf3 //此为串口1,串口波特率重装数值。晶振:24M,12T模式,SMOD=0,
  12                               //串口波特率基准采用4800bps.
  13          
  14          sbit     RXD_PIN = P1^3; //接收数据端
  15          sbit     TXD_PIN = P1^4; //发送数据端
  16          
  17          /*--------------------模块0的各种状态---------------*/
  18          
  19          uint8    idata    Rx_state;//接收状态
  20          uint8    idata    Rx_buffer;//接收缓存寄存器
  21          uint8    idata    Rx_shift;//作为接收使用的移位寄存器
  22          uint8    idata    Rx_count;//状态计数器
  23          uint8    idata    Rx_data_ready;//数据接收准备
  24          uint8    idata    Rx_data_error;//接收数据错误标志
  25          uint16   idata    Rx_time; //接收时的临时时间参数
  26          //接收的4种状态
  27          #define    S_RX_START_EDGE    0X01//数据边缘状态
  28          #define    S_RX_START_BIT     0X02//数据起始接收状态
  29          #define    S_RX_DATA_BIT      0x03//数据状态
  30          #define    S_RX_STOP_BIT      0x04//停止位
  31          
  32          #define    RX_FULL_BIT    SYSCLK/BAUD_RATE//此为接收一位时的计数次数,可以由用户自定义
  33          #define    RX_HALF_BIT    (RX_FULL_BIT / 2) //1/2位的时间
  34          
  35          /*--------------------模块1的各种状态---------------*/
  36          
  37          uint8    idata    Tx_state;//发送状态
  38          uint8    idata    Tx_buffer;//发送缓存寄存器
  39          uint8    idata    Tx_shift;//作为发送使用的移位寄存器
  40          uint8    idata    Tx_count;//发送状态计数器
  41          uint8    idata    Tx_data_ready;//发送数据准备标志
  42          uint8    idata    Tx_timer_en;//发送时间允许位
  43          uint16   idata    Tx_time; //接收时的临时时间参数
  44          
  45          #define    S_TX_START_BIT    0x01//发送起始状态
  46          #define    S_TX_DATA_BIT     0x02//发送数据状态
  47          #define    S_TX_STOP_BIT     0x03//发送停止位
  48          #define    S_TX_STOP_END     0x04//结束位
  49          
  50          #define    TX_FULL_BIT    SYSCLK/BAUD_RATE //此为发送一位时的计数次数,可以由用户自定义,
  51                                                                           //为了要和硬件串口(即串口1和串口2)实现发送和接收数据
  52          
  53          /*--------------------函数原型---------------*/
  54          
  55          void    Transmit(void);
C51 COMPILER V7.06   PCA_UART_DEVICE                                                       02/25/2009 10:34:59 PAGE 2   

  56          uint8   Rx_get_char(void);    //接收处理函数
  57          void    Tx_put_char(uint8 idata send_data);    //发送处理函数
  58          void    Rx_enable(void);
  59          void    Rx_disable(void);
  60          void    Pca_init(void);
  61          void    Receive(void); 
  62          void    Display_LED(void);
  63          void    Delays(void);
  64          void    Serial_Port_Initial(void);              //串口初始化原型
  65          void    Send_UART(uint8);                               //发送数据原型
  66          void    UART_Interrupt_Receive(void);   //中断接收
  67          void    delay(uint16 idata In,uint16 idata Out); 
  68          
  69          /****************************************************************************** 
  70          函数:main()
  71          功能:程序开始执行位置
  72          ******************************************************************************/ 
  73          
  74          void   main(void)
  75          {
  76   1      
  77   1              Serial_Port_Initial();//初始化串口
  78   1          Pca_init();   //初始化pca
  79   1          Rx_disable(); //接收禁止
  80   1          Rx_enable();  //接收使能
  81   1              Rx_buffer=0x20;//发送一个字节数据
  82   1          while(1)
  83   1          {
  84   2              if( 0x01 == Rx_get_char())
  85   2              {
  86   3                  Tx_put_char(Rx_buffer);    //发送处理函数
  87   3                  delay(10,5);
  88   3              }
  89   2                      Delays();
  90   2          }
  91   1      } 
  92          
  93          /****************************************************************************** 
  94          函数:Display_LED()
  95          功能:LED灯闪烁
  96          说明:LED灯闪烁,作为接收成功数据之后进行的闪烁
  97          ******************************************************************************/ 
  98          void Display_LED(void)//LED灯闪烁
  99          {
 100   1              uint8 i=0;
 101   1              for(i=0;i<5;i++)
 102   1              {
 103   2              P4_0=1;
 104   2              Delays();
 105   2              P4_0=0;
 106   2              Delays();
 107   2              }
 108   1      }
 109          
 110          
 111          /****************************************************************************** 
 112          函数:Pca_init()
 113          功能:PCA各个寄存器初始化
 114          说明:进行PCA模块的初始化,这样对于之后的数据发送有一个准备过程,PCA初始为一切状态 
 115          ******************************************************************************/ 
 116          void Pca_init(void)
 117          {
C51 COMPILER V7.06   PCA_UART_DEVICE                                                       02/25/2009 10:34:59 PAGE 3   

 118   1          Rx_time = 0;//清0时间
 119   1          Tx_time = 0; 
 120   1      
 121   1          CMOD = FOSC12_MOD;//采用12分频
 122   1          CCON = 0X00;//清0,为初始状态
 123   1          CL = 0X00;//计数器清0
 124   1          CH = 0X00;
 125   1      
 126   1          Rx_data_ready = 0;
 127   1          Rx_data_error = 0;
 128   1          CCAPM0 = DISABLED_MODE; //模块全为0,无此功能
 129   1      
 130   1          Tx_data_ready = 1;//准备发送数据
 131   1          Tx_timer_en = 0;//发送时间允许标志位
 132   1          Tx_state = S_TX_START_BIT;//开始位
 133   1          CCAPM1 = DISABLED_MODE; //模块全为1,无此功能
 134   1      
 135   1      //    EC = 1;
 136   1          EA = 1;//开中断
 137   1          CR = 1;//开始计数
 138   1      } 
 139          
 140          /****************************************************************************** 
 141          函数:Rx_get_char()
 142          功能:接收处理函数
 143          说明:此函数进行的接收处理,0时表示没有收到数据,1时为收到数据 
 144          ******************************************************************************/ 
 145          uint8    Rx_get_char(void)    //接收处理函数
 146          {
 147   1          if( Rx_data_ready == 0 )//是否接收到数据
 148   1          {
 149   2              return 0;    //没有收到数据
 150   2          }
 151   1          else
 152   1          {
 153   2              Rx_data_ready = 0;
 154   2              return 1;        //收到数据
 155   2          }
 156   1      } 
 157          
 158          /****************************************************************************** 
 159          函数:Serial_Port_Initial()
 160          功能:串口初始化
 161          说明:串口采用串口1,方式1来传送接收数据,使用独立波特率发生器作为波特率发生器
 162                采用4800bps传输速率。 
 163          ******************************************************************************/ 
 164          
 165          void Serial_Port_Initial(void)//串口初始化
 166          {
 167   1              SCON=0x50;      //采用串口方式1。
 168   1              BRT=RELOAD;     //装入重装数
 169   1      //AUXR 8Eh Auxiliary Register T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS
 170   1              AUXR|=0x11;  //00010001;开启BRTR即启动Serial,开启S1BRS即使用独立波特率发生器作
 171   1                      //为波特率发生器
 172   1              ES=1;       //允许串口中断
 173   1              EA=1;           //开启总中断
 174   1      
 175   1      }
 176          /****************************************************************************** 
 177          函数:Send_UART()
 178          功能:串口发送数据
 179          说明:串口采用串口1,方式1来传送接收数据,使用独立波特率发生器作为波特率发生器
C51 COMPILER V7.06   PCA_UART_DEVICE                                                       02/25/2009 10:34:59 PAGE 4   

 180                采用4800bps传输速率。 
 181          ******************************************************************************/ 
 182          
 183          void Send_UART(uint8 i)//发送数据
 184          {
 185   1              ES=0;
 186   1              TI=0;
 187   1              SBUF=i;
 188   1              while(TI==0);   
 189   1              TI=0;
 190   1              ES=1;
 191   1      }
 192          /****************************************************************************** 
 193          函数:UART_Interrupt_Receive()
 194          功能:串口接收数据
 195          说明:串口采用串口1,方式1来传送接收数据,使用独立波特率发生器作为波特率发生器
 196                采用4800bps传输速率。 
 197          ******************************************************************************/ 
 198          
 199          void UART_Interrupt_Receive(void) interrupt 4//中断接收
 200          {       
 201   1              uint8 k=0;
 202   1              if(RI==1)
 203   1              {
 204   2                      RI=0;
 205   2                      k=SBUF;
 206   2                      Send_UART(k+1);
 207   2              }
 208   1          else TI=0;    
 209   1      }
 210          
 211          
 212          /****************************************************************************** 
 213          函数:Delays()
 214          功能:软件延时
 215          说明:本函数采用软件延时一定的时间
 216          ******************************************************************************/ 
 217          
 218          void Delays(void)//延时
 219          {
 220   1              unsigned short j=0;
 221   1              unsigned short g=0;
 222   1              for(j=0;j<100;j++)
 223   1              {
 224   2                      for(g=0;g<5000;g++)
 225   2                      {
 226   3                      ;       
 227   3                      }
 228   2              }                       
 229   1      }
 230          
 231          /****************************************************************************** 
 232          函数:Tx_put_char()
 233          功能:发送处理函数
 234          说明:进行发送前的准备,以进行数据发送,目的就是定时一段时间得到中断,之后进行数据发送
 235                    当然也可以强制进入中断,不过有一个过渡过程更为自然。
 236          ******************************************************************************/ 
 237          void    Tx_put_char(uint8 idata send_data)    //发送处理函数
 238          {
 239   1          while( Tx_data_ready == 0 )   //等待准备发送数据
 240   1          {
 241   2              ;

⌨️ 快捷键说明

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