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

📄 main.lst

📁 自编的C51串口通讯程序
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  12/03/2004 10:33:36 PAGE 1   


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

stmt level    source

   1          #include <REG51.H>
   2          
   3          #define F_CPU            11059200     //11.0592Mhz 
   4          #define UART_BAND_RATE      9600      // 9600 band
   5          
   6          typedef unsigned char   uint8_t;
   7          //typedef signed char   int8_t;
   8          typedef unsigned int    uint16_t;
   9          //typedef signed int    int16_t;
  10          typedef unsigned long   uint32_t;
  11          //typedef signed long   int32_t;
  12          
  13          //接收数据
  14          uint8_t receive_start,receive_number=0,bus_changed;
  15          uint8_t receive_data[100];
  16          
  17          uint8_t *uart_data_ptr;
  18          uint8_t uart_counter;
  19          
  20          void sei(void)
  21          {
  22   1              EA = 1;
  23   1      }
  24          /*
  25          void cli(void)
  26          {
  27                  EA = 0;
  28          }
  29          */
  30          
  31          void uart_init(void)
  32          /* initialize uart */
  33          {      
  34   1      //      TH1 = 256-((F_CPU*(SMOD+1))/(384*UART_BAND_RATE));//mode 1 baud (SMOD=0 OR 1)
  35   1      
  36   1              SCON  = 0x50;                           // mode 1: 8-bit UART, enable receiver   
  37   1              TMOD |= 0x20;                           // timer 1 mode 2: 8-Bit reload          
  38   1              PCON |= 0x80;                                           //SMOD=1,baud*2
  39   1              TH1 = 0xfA;                                     // 11.0592M,value 9600 baud       
  40   1              TR1 = 1;                                // timer 1 run                           
  41   1              ES = 1;                                                         // UART INTERRUPT open
  42   1              
  43   1      }
  44          
  45          void delay(uint8_t delay_time)      
  46          {
  47   1              uint8_t i,j,k;
  48   1              for(i=0;i<255;i++)
  49   1                      {
  50   2                              for(j=0;j<200;j++)
  51   2                                      {
  52   3                                                              for(k=0;k<delay_time;k++)
  53   3                                                              ;
  54   3                                                      
  55   3                                      }
C51 COMPILER V7.06   MAIN                                                                  12/03/2004 10:33:36 PAGE 2   

  56   2                      }               
  57   1      }
  58          
  59          void uart_isr(void) interrupt 4 
  60          {
  61   1                      if (TI) 
  62   1                      { // 输出中断
  63   2                                      TI = 0;
  64   2                                      uart_data_ptr++;
  65   2                              if (--uart_counter)
  66   2                              {
  67   3                                              SBUF = *uart_data_ptr;
  68   3                                      }
  69   2                      }
  70   1                      if (RI) 
  71   1                      {//接收中断
  72   2                              uint8_t receive;
  73   2                              RI = 0;
  74   2                              receive = SBUF;
  75   2      /*      /////////////////////// 接收协议:开始,长度receive_data[1],没结束      
  76   2                              if ((receive==0xAA)&&(receive_number==0)) receive_start=1;
  77   2                              if (receive_start==1) 
  78   2                              {
  79   2                                      receive_data[receive_number]=receive;
  80   2                                      receive_number++;
  81   2                              }
  82   2                              if(receive_number == (receive_data[1]+2))//receive_data[1]存放有效数据的长度
  83   2                              {
  84   2                                      receive_start=receive_number=0;
  85   2                                      bus_changed=1;
  86   2                              }
  87   2      */
  88   2              /////////////////////////接收协议:开始,结束,没长度            
  89   2                              if ((receive==0xDD)&&(receive_number==0)) receive_start=1;
  90   2                              if (receive_start==1) 
  91   2                              {
  92   3                                      receive_data[receive_number]=receive;
  93   3                                      receive_number++;
  94   3                              }
  95   2                              if ((receive==0xEE)&&(receive_start==1)&&(receive_number>1))
  96   2                              {
  97   3                                      receive_start=0;
  98   3                                      bus_changed=1;
  99   3                              }
 100   2              /////////////////////////               
 101   2                              
 102   2                      }
 103   1      }
 104          
 105          
 106          
 107          void uart_send(uint8_t *p,uint8_t size)
 108          /* send buffer <buf> to uart */
 109          {   
 110   1              uart_data_ptr  = p;
 111   1              uart_counter=size;
 112   1              TI = 0;
 113   1              SBUF = *uart_data_ptr;
 114   1          
 115   1      }
 116          
 117          
C51 COMPILER V7.06   MAIN                                                                  12/03/2004 10:33:36 PAGE 3   

 118          
 119          void execute_cmd(void)
 120          {
 121   1              if(receive_data[2]==0x01)
 122   1              {
 123   2                      P1 = 0x01;      //p1.0=1;
 124   2              }
 125   1              if(receive_data[2]==0x02)
 126   1              {
 127   2                      P1 = 0x02;      //p1.1=1;
 128   2              }
 129   1              if(receive_data[2]==0x03)
 130   1              {
 131   2                      P1 = 0x04;      //p1.2=1;
 132   2              }
 133   1              if(receive_data[2]==0x04)
 134   1              {
 135   2                      P1 = 0x08;      //p1.3=1;
 136   2              }
 137   1      }
 138          
 139          
 140          int main(void)
 141          {
 142   1      
 143   1          uart_init();
 144   1          sei();                 //允许中断  
 145   1          for (;;) 
 146   1          {    
 147   2              if(bus_changed == 1)//已接收
 148   2      //              if(receive_number >= 3)
 149   2                      {
 150   3                              execute_cmd(); // 执行命令
 151   3                              uart_send("ok",2);
 152   3                                      delay(1);
 153   3                              //接收到数据,发送"ok"
 154   3                                      uart_send(receive_data,receive_number);
 155   3                                      bus_changed=0;
 156   3                                      receive_number=0;
 157   3                      }
 158   2              //      uart_send("yes",3);
 159   2                      delay(1);
 160   2          }            
 161   1      }


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


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

⌨️ 快捷键说明

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