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

📄 iofor232.lst

📁 异步通信软件模拟
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   IOFOR232                                                              06/08/2005 21:57:39 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE IOFOR232
OBJECT MODULE PLACED IN iofor232.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil20\C51\BIN\C51.EXE iofor232.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //--------------------------------------------------------------------------------------------------------
             ---------
   2          // UART.C
   3          // 通用模拟串口程序
   4          // 资源需求:一个硬件计数器,两个I/O口
   5          // 硬件计数器的计数时间设定为三倍波特率
   6          // 定义的两个I/O口,用于发送和接收,分别用在receive()和transmit(char)中
   7          // 设立了专门的接收缓冲区,用于存储接收数据
   8          // 注意:必需根据波特率来设定定时器;
   9          //        每次通信开始必须调用初始化函数init_uart()
  10          //--------------------------------------------------------------------------------------------------------
             ---------
  11          //----------------------------------管脚定义、库函数声明-------------------------------------------------
  12          #include <reg51.h>
  13          #include <stdio.h>
  14          //端口定义
  15          sbit RXD3=P1^0;
  16          sbit TXD3=P1^1;
  17          //-----------------------------------------------变量声明-------------------------------------------------
             -----
  18          #define IN_BUF_SIZE 10           //输入缓冲区长度定义
  19          #define TRUE 1
  20          #define FALSE 0
  21          static unsigned char inbuf[IN_BUF_SIZE];  //输入缓冲区
  22          static unsigned char qin = 0;
  23          static unsigned char qout = 0;
  24          static char flag_rx_waiting_for_stop_bit;
  25          static char flag_rx_off;
  26          static char rx_mask;
  27          static char flag_rx_ready;
  28          static char flag_tx_ready;
  29          static char timer_rx_ctr;
  30          static char timer_tx_ctr;
  31          static char bits_left_in_rx;
  32          static char bits_left_in_tx;
  33          static char rx_num_of_bits;
  34          static char tx_num_of_bits;
  35          static char internal_rx_buffer;
  36          static char internal_tx_buffer;
  37          static char user_tx_buffer;
  38          //----------------------------------与硬件有关的函数声明------------------------------------------------
  39          bit get_rx_pin_status();                       //1.返回接收管脚返回的值(0或1)
  40          void set_tx_pin_high(void);                    //2. 发送管脚置高,输出1
  41          void set_tx_pin_low();                        //3.发送管脚置低,输出0
  42          void timer_set();                             //4. 设置定时器的值为波特率的三倍
  43          void set_timer_interrupt();                     //5. 使能定时器中断
  44          void  idle();                                //6.等待端口输入时,执行,根据具体应用进行修改
  45          //-----------------------------------声明与硬件无关的函数-------------------------------------------
  46          void flush_input_buffer( void );                  // 清空接收缓存区
  47          char kbhit( void );                             // 判断数据是否正常接收
  48          char get_char( void );                          // 从接收缓存区读出一个数据
  49          void turn_rx_on( void );                        // 启动接收函数
  50          void turn_rx_off( void );                        // 结束接收函数
  51          extern void put_char( char );                     // 向发送端发送一个数据.
  52          void timer_isr(void);                                             //中断处理函数
C51 COMPILER V7.06   IOFOR232                                                              06/08/2005 21:57:39 PAGE 2   

  53          //-------------------------------------------------------------------------------------------------------
  54          //  函数名称:set_tx_pin_high 
  55          //  功能说明: 置串口发送端口为高,与硬件有关 
  56          //--------------------------------------------------------------------------------------------------------
  57          void  set_tx_pin_high( void)
  58                   {
  59   1               TXD3=1;
  60   1               }
  61          //-------------------------------------------------------------------------------------------------------
  62          //  函数名称: set_tx_pin_low 
  63          //  功能说明: 置串口发送端口为低,与硬件有关
  64          //--------------------------------------------------------------------------------------------------------
  65          void set_tx_pin_low( void)
  66                   {
  67   1               TXD3=0;
  68   1               }
  69          //-------------------------------------------------------------------------------------------------------
  70          //  函数名称:get_rx_pin_status 
  71          //  功能说明: 返回接收端口的状态,高为1,低为0,与硬件有关
  72          //--------------------------------------------------------------------------------------------------------
  73          bit get_rx_pin_status()
  74               {
  75   1               return(RXD3);
  76   1               }
  77          //-------------------------------------------------------------------------------------------------------
  78          //  函数名称: timer_set 
  79          //  功能说明: 设置定时器工作状态,与硬件有关
  80          //--------------------------------------------------------------------------------------------------------
  81          void timer_set()
  82               {
  83   1                TMOD=0x22;  //定时器1为工作模式2(8位自动重装),0为模式2(8位自动重装) 
  84   1             PCON=0x00;
  85   1                 TR0=0;        //在发送或接收才开始使用
  86   1             TF0=0; 
  87   1             TH0=(256-96);  //9600bps 就是 1000000/9600=104.167微秒 执行的timer是
  88   1                               //104.167*11.0592/12= 96 
  89   1             TL0=TH0;
  90   1             ET0=1;
  91   1                }
  92          //-------------------------------------------------------------------------------------------------------
  93          //  函数名称: set_timer_interrupt
  94          //  功能说明: 打开定时器中断允许,与硬件有关
  95          //--------------------------------------------------------------------------------------------------------
  96          void set_timer_interrupt()
  97                {
  98   1                 EA=1;
  99   1                }
 100          //-------------------------------------------------------------------------------------------------------
 101          //  函数名称: IntTimer0
 102          //  功能说明: 定时器中断函数,与硬件有关,但不做处理,直接调用通用中断处理函数
 103          //--------------------------------------------------------------------------------------------------------
 104          void IntTimer0() interrupt 1
 105          {
 106   1        timer_isr();              //调用中断处理函数
 107   1      }
 108          //-------------------------------------------------------------------------------------------------------
 109          //  函数名称: idle
 110          //  功能说明: 等待定时器中断时的执行程序,与具体应用有关
 111          //--------------------------------------------------------------------------------------------------------
 112          void idle()
 113                {
 114   1      
C51 COMPILER V7.06   IOFOR232                                                              06/08/2005 21:57:39 PAGE 3   

 115   1                }
 116          //-------------------------------------------------------------------------------------------------------
 117          //  函数名称: timer_isr
 118          //  功能说明: 中断处理函数,与硬件无关,通用函数
 119          //--------------------------------------------------------------------------------------------------------
 120          void timer_isr(void)        /*中断服务程序*/
 121          {
 122   1      char mask, start_bit, flag_in;
 123   1      //发送程序
 124   1      if ( flag_tx_ready )
 125   1      {
 126   2      if ( --timer_tx_ctr<=0 )
 127   2      {
 128   3      mask = internal_tx_buffer&1;
 129   3      internal_tx_buffer >>= 1;
 130   3      if ( mask )
 131   3      {
 132   4      set_tx_pin_high();
 133   4      }
 134   3      else
 135   3      {
 136   4      set_tx_pin_low();
 137   4      }
 138   3      timer_tx_ctr = 3;
 139   3      if ( --bits_left_in_tx<=0 )
 140   3      {
 141   4      flag_tx_ready = FALSE;
 142   4      }
 143   3      }
 144   2      }
 145   1      // 接收程序
 146   1      if ( flag_rx_off==FALSE )

⌨️ 快捷键说明

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