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

📄 hand_serial_all.lst

📁 c8051单片机使用smbus(I2C)接口的测试程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02a   HAND_SERIAL_ALL                                                      07/08/2003 15:36:23 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE HAND_SERIAL_ALL
OBJECT MODULE PLACED IN hand_serial_all.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE hand_serial_all.c LARGE OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND TABS(2)

stmt level    source

   1          
   2          #include "hand_serial_all_h.h"
   3          
   4          BYTE code hex_[]={"0123456789ABCDEF"}; 
   5          
   6          //串口0全局变量
   7          type_of_ring_buffer  send_buff_com_0;
   8          type_of_ring_buffer  recv_buff_com_0;
   9          xdata BYTE send_buff_com_0_array[SERIAL_BUFF_LEN];
  10          xdata BYTE recv_buff_com_0_array[SERIAL_BUFF_LEN];
  11          bit send_idle_com_0;
  12          
  13          //串口1全局变量
  14          type_of_ring_buffer  send_buff_com_1;
  15          type_of_ring_buffer  recv_buff_com_1;
  16          xdata BYTE send_buff_com_1_array[SERIAL_BUFF_LEN];
  17          xdata BYTE recv_buff_com_1_array[SERIAL_BUFF_LEN];
  18          bit send_idle_com_1;
  19          
  20          idata BYTE Count10ms; //延迟10ms的变量
  21          
  22          
  23          //ring_buff begin:
  24          void init_ring_buffer(type_of_ring_buffer *ring_buffer, BYTE data_buffer_len,BYTE *data_buff_array) 
  25          {
  26   1          
  27   1        ring_buffer->ring_buffer_len  = data_buffer_len;
  28   1        ring_buffer->read_index = 0;
  29   1        ring_buffer->write_index  = 0;
  30   1        ring_buffer->empty=1;
  31   1        ring_buffer->buffer_ptr =data_buff_array;
  32   1      }
  33          
  34          BYTE get_char_from_buff(type_of_ring_buffer *ring_buffer) 
  35          {
  36   1        BYTE t_data;
  37   1        t_data=ring_buffer->buffer_ptr[ring_buffer->read_index];
  38   1        ring_buffer->buffer_ptr[ring_buffer->read_index++]=0;//读完后清空
  39   1        ring_buffer->read_index = ring_buffer->read_index%ring_buffer->ring_buffer_len;
  40   1        if(ring_buffer->read_index==ring_buffer->write_index)
  41   1          ring_buffer->empty=1;
  42   1        else ring_buffer->empty=0;
  43   1        return(t_data);
  44   1      }
  45          
  46          void put_char_to_buff(type_of_ring_buffer *ring_buffer,BYTE t_data) 
  47          {
  48   1        ring_buffer->buffer_ptr[ring_buffer->write_index++] = t_data;
  49   1        ring_buffer->write_index =  ring_buffer->write_index%ring_buffer->ring_buffer_len;
  50   1        if(ring_buffer->read_index==ring_buffer->write_index)
  51   1          ring_buffer->empty=1;
  52   1        else ring_buffer->empty=0;
  53   1        
  54   1      }
  55          
C51 COMPILER V7.02a   HAND_SERIAL_ALL                                                      07/08/2003 15:36:23 PAGE 2   

  56          //ring buff end.
  57          
  58          
  59          
  60          /*串口初始化a 
  61            fosc=40MHZ; SMOD=0时 (256-11)=9600,(256-22)=4800,(256-43)=2400,(256-87)=1200*/
  62          void serial_init(void)
  63          {
  64   1        //初始化串口变量
  65   1        init_ring_buffer(&send_buff_com_0,SERIAL_BUFF_LEN,send_buff_com_0_array);
  66   1        init_ring_buffer(&recv_buff_com_0,SERIAL_BUFF_LEN,recv_buff_com_0_array);
  67   1      
  68   1        init_ring_buffer(&send_buff_com_1,SERIAL_BUFF_LEN,send_buff_com_1_array);
  69   1        init_ring_buffer(&recv_buff_com_1,SERIAL_BUFF_LEN,recv_buff_com_1_array);
  70   1        
  71   1      
  72   1      
  73   1        //串口0,1用定时器1作为波特率发生器
  74   1        TMOD  |= 0x20;                     // TMOD: timer 1, mode 2, 8-bit reload
  75   1        TH1    = BAUD_TIMER;              // set Timer1 reload value for baudrate
  76   1        TR1    = 1;                         // start Timer1
  77   1      
  78   1        PCON  |= 0x80;                      // SMOD00 = 1
  79   1        PCON  |= 0x10;                      // SMOD01 = 1
  80   1        
  81   1      /*
  82   1      
  83   1        T2CON = 0x30;                        //串口0用定时器2
  84   1        TH2 =(65536-BAUD_TIMER2)/256;      //波特率
  85   1        TL2 =(65536-BAUD_TIMER2)%256; 
  86   1        RCAP2H=(65536-BAUD_TIMER2)/256;    
  87   1        RCAP2L=(65536-BAUD_TIMER2)%256; 
  88   1        TR2=1;                              
  89   1      
  90   1        T4CON = 0x30;                        //串口1用定时器4
  91   1        TH4 =(65536-BAUD_TIMER4)/256;      //波特率
  92   1        TL4 =(65536-BAUD_TIMER4)%256; 
  93   1        RCAP4H=(65536-BAUD_TIMER4)/256;    
  94   1        RCAP4L=(65536-BAUD_TIMER4)%256; 
  95   1        TR4_ON;                               
  96   1      */
  97   1        SCON0   = 0x50;                     // SCON0: mode 1, 8-bit UART, enable RX
  98   1        TI0    = 1;                         // Indicate TX0 ready
  99   1        ES0=1;
 100   1        send_idle_com_0=1;
 101   1        
 102   1        //串口1
 103   1        SCON1=0x50;
 104   1        TI1_ON;
 105   1        ES1_ON;
 106   1        send_idle_com_1=1;
 107   1        
 108   1      
 109   1      }
 110          
 111          //*****************************************
 112          //串口0中断处理
 113          serial0() interrupt 4  using 1
 114          {
 115   1        BYTE idata t_data;
 116   1        if (TI0 ) 
 117   1          {
C51 COMPILER V7.02a   HAND_SERIAL_ALL                                                      07/08/2003 15:36:23 PAGE 3   

 118   2            TI0 = 0;  
 119   2            if (!send_buff_com_0.empty)              
 120   2            {
 121   3      //        SBUF=get_char_from_buff(&send_buff_com_0); 
 122   3            SBUF0=send_buff_com_0.buffer_ptr[send_buff_com_0.read_index++];
 123   3            send_buff_com_0.read_index = send_buff_com_0.read_index%send_buff_com_0.ring_buffer_len;
 124   3            if(send_buff_com_0.read_index==send_buff_com_0.write_index)
 125   3              send_buff_com_0.empty=1;
 126   3            else send_buff_com_0.empty=0;
 127   3            }
 128   2            else send_idle_com_0=1; 
 129   2          }
 130   1          if (RI0)  
 131   1          {
 132   2            RI0 = 0;  
 133   2            t_data = SBUF0;
 134   2      //      put_char_to_buff(&recv_buff_com_0,t_data);
 135   2          recv_buff_com_0.buffer_ptr[recv_buff_com_0.write_index++] = t_data;
 136   2          recv_buff_com_0.write_index = recv_buff_com_0.write_index%recv_buff_com_0.ring_buffer_len;
 137   2          if(recv_buff_com_0.read_index==recv_buff_com_0.write_index)
 138   2            recv_buff_com_0.empty=1;
 139   2          else recv_buff_com_0.empty=0;
 140   2          
 141   2          }
 142   1      }
 143          
 144          //串口1中断处理
 145          serial1() interrupt 20  using 1
 146          {
 147   1        BYTE idata t_data;
 148   1        if (TI1 ) 
 149   1        {
 150   2          TI1_OFF;  
 151   2          if (!send_buff_com_1.empty)              
 152   2          {
 153   3            SBUF1=send_buff_com_1.buffer_ptr[send_buff_com_1.read_index++];
 154   3            send_buff_com_1.read_index = send_buff_com_1.read_index%send_buff_com_1.ring_buffer_len;
 155   3            if(send_buff_com_1.read_index==send_buff_com_1.write_index)
 156   3              send_buff_com_1.empty=1;
 157   3            else send_buff_com_1.empty=0;
 158   3          }
 159   2          else 
 160   2            send_idle_com_1=1; 
 161   2        }
 162   1        if(RI1)  
 163   1        {
 164   2          RI1_OFF;  
 165   2          t_data = SBUF1;
 166   2          recv_buff_com_1.buffer_ptr[recv_buff_com_1.write_index++] = t_data;
 167   2          recv_buff_com_1.write_index = recv_buff_com_1.write_index%recv_buff_com_1.ring_buffer_len;
 168   2          if(recv_buff_com_1.read_index==recv_buff_com_1.write_index)
 169   2            recv_buff_com_1.empty=1;
 170   2          else recv_buff_com_1.empty=0;
 171   2        }
 172   1      }
 173          
 174          BYTE if_empty_com_0(void)
 175          {
 176   1        return(recv_buff_com_0.empty);
 177   1      }
 178          
 179          BYTE if_empty_com_1(void)
C51 COMPILER V7.02a   HAND_SERIAL_ALL                                                      07/08/2003 15:36:23 PAGE 4   

 180          {
 181   1        return(recv_buff_com_1.empty);
 182   1      }
 183          
 184          
 185          void putbyte_com_0(char c)
 186          {
 187   1        ES0=0;
 188   1      //  put_char_to_buff(&send_buff_com_0,c);
 189   1        send_buff_com_0.buffer_ptr[send_buff_com_0.write_index++] = c;
 190   1        send_buff_com_0.write_index = send_buff_com_0.write_index%send_buff_com_0.ring_buffer_len;
 191   1        if(send_buff_com_0.read_index==send_buff_com_0.write_index)
 192   1          send_buff_com_0.empty=1;
 193   1        else send_buff_com_0.empty=0;
 194   1        
 195   1        if(send_idle_com_0==1)
 196   1        {
 197   2          TI0=1;
 198   2          send_idle_com_0=0;

⌨️ 快捷键说明

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