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

📄 pca_uart_host.lst

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


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

stmt level    source

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

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

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

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

 242   1          Tx_buffer = send_data;//将要发送的数据放入缓冲区
 243   1          Tx_data_ready = 0;
 244   1          if( Tx_timer_en != 1 )

⌨️ 快捷键说明

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