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

📄 subpro_ds.lst

📁 一个温度采集系统的单片机程序与WINDOWS 串口通信程序
💻 LST
字号:
C51 COMPILER V7.00  SUBPRO_DS                                                              03/16/2005 20:37:51 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE SUBPRO_DS
OBJECT MODULE PLACED IN SubPro_ds.OBJ
COMPILER INVOKED BY: C:\PROGRA~1\Keil\C51\BIN\c51.exe SubPro_ds.c DB OE SMALL ROM(LARGE)

stmt level    source

   1          #include<reg51.h>
   2          #include<transmit_data_h.h>
   3          #include<intrins.h>
   4          
   5          #define  identity        1
   6          #define  columne         1
   7          
   8          extern void delay_time_1s  (void);  
   9          
  10          unsigned char code  ds_id[]     ={
  11          0x28,0xDF,0x62,0x7A,0x00,0x00,0x00,0xDF,
  12          0x28,0xCE,0x95,0x7A,0x00,0x00,0x00,0x44
  13                                                 }; 
  14                                           
  15          unsigned char code syn_data[6]={0x55,0x55,0x55,0x55,0xff,0xaa};     //无线发送同步字节
  16          unsigned char code end_data[6]={0xff,0x00,0xff,0xff,0xff,0xff};     //无线发送结束字节
  17                                           
  18          
  19          
  20          ////////////////////////////////////////
  21          //名称:数据无线传输
  22          //功能:2051取RAM单元数据封装成数据帧发送给PC
  23          ///////////////////////////////////////
  24          
  25          //串口发送一个字节子程序
  26          void send_byte_pc(unsigned char us)
  27          {
  28   1      SBUF    =us;
  29   1      while(TI==0);
  30   1      TI      =0;
  31   1      }       
  32                  
  33          
  34          void send_nbyt_pc(var_id)      //串口发送10个字节给PC
  35          unsigned char data *var_id;
  36          {
  37   1       unsigned char i;
  38   1              for(i=0;i<4;i++)
  39   1              {
  40   2                      send_byte_pc(*(var_id+i) );
  41   2            }
  42   1      }
  43          //发送结束字节
  44          void send_end_pc(void)
  45          {
  46   1      unsigned char data i;
  47   1              for(i=0;i<6;i++)
  48   1              {
  49   2                      send_byte_pc(end_data[i]);
  50   2            }
  51   1      }
  52          
  53          
  54          //发送同步字节
  55          void send_syn_pc(void)
C51 COMPILER V7.00  SUBPRO_DS                                                              03/16/2005 20:37:51 PAGE 2   

  56          {
  57   1      unsigned char data i;
  58   1              for(i=0;i<6;i++)
  59   1              {
  60   2                      send_byte_pc(syn_data[i]);
  61   2              }
  62   1      }
  63          
  64          void send_tmp_pc(unsigned char *us)            //两字节温度数据封装成数据帧发送给PC
  65          {
  66   1      send_syn_pc();
  67   1      send_nbyt_pc(us);
  68   1      send_end_pc();
  69   1      }
  70          
  71          
  72          void send_data_pc(void)                //读取两个DS18B20温度数据,无线传送给PC 
  73          {
  74   1      unsigned char data i,k;
  75   1      unsigned char data data_rom[4];
  76   1      unsigned char data index        =0;
  77   1      
  78   1      k       =0;  
  79   1         do
  80   1         {  
  81   2              
  82   2              if(!OWReset())
  83   2              {     
  84   3                      OWWriteByte(0x55);                //匹配id
  85   3                      for(i=index;i<8+index;i++)
  86   3                      {
  87   4                              OWWriteByte(ds_id[i]);
  88   4              }
  89   3              OWWriteByte(0xBE);          //读ScatchPad
  90   3              
  91   3              for(i=0;i<2;i++)
  92   3              {
  93   4                      data_rom[i+index/4]     =OWReadByte();
  94   4              }
  95   3                  
  96   3              }       
  97   2              index+=8;
  98   2              k++;
  99   2         }while(k<2);
 100   1      
 101   1      send_tmp_pc(&data_rom[0]);           
 102   1      //test:while(1);
 103   1      }
 104                                  
 105          /////////////////////////////////////////
 106          //名称:温度采集程序
 107          //功能:命令64个DS18B20同时开始温度采集
 108          ////////////////////////////////////////
 109          void send_ds_cmd(void) 
 110          {
 111   1              if(!OWReset())
 112   1              {
 113   2                      OWWriteByte(0xCC);      
 114   2                      OWWriteByte(0x44);
 115   2            }
 116   1      delay_time_1s();
 117   1      delay_time_1s();
C51 COMPILER V7.00  SUBPRO_DS                                                              03/16/2005 20:37:51 PAGE 3   

 118   1      }
 119          ////////////////////////////////////////
 120          //名称:出错处理
 121          //功能:接收到PC非法命令,作显示提示
 122          ////////////////////////////////////////
 123          void error_set(void) 
 124          {
 125   1      //printf("Command Error!\n");
 126   1              _nop_();
 127   1              _nop_();        
 128   1      }
 129          
 130          ////////////////////////////////////////////
 131          //名称:串口查询方式接收程序
 132          //功能:中断后,关中断使能,以查询方式接收PC命令字节,
 133          //      并对命令进行解析,返回命令值 
 134          /////////////////////////////////////////////
 135          unsigned char receive_cmd(us) 
 136          unsigned char *us;
 137          {
 138   1      unsigned char i;
 139   1      unsigned char data_tmp[3];
 140   1      //data_tmp[0]   =*(us+1);
 141   1      //unsigned char data_chk[15]={0xff,0x55,0x55,0xFF,0xAA,0x01,0x01,84}; //为观察指针变量引入测试变量
 142   1      //unsigned char data *us=&data_chk[0];
 143   1        
 144   1            for(i=0;i<15;)
 145   1              {
 146   2                      if( (*(us+i)==0xFF)&( *(us+i+1)==0xAA ) )         //识别帧同步字节      
 147   2                      {
 148   3                              data_tmp[0]     =*(us+i+2);               // 此处采用for语句得不到正确值?
 149   3                              data_tmp[1]     =*(us+i+3);
 150   3                              data_tmp[2]     =*(us+i+4);
 151   3                              
 152   3                              goto next;
 153   3                      }
 154   2                      i++;
 155   2            }     
 156   1       
 157   1      next:   if( (data_tmp[0]==identity)&(data_tmp[1]==columne) )      //判断是否为对本2051系统                  
             -                          
 158   1              return (data_tmp[2]);                                               //返回控制指令
 159   1              else
 160   1              return (0x00);                                       
 161   1      }
 162          
 163          ///////////////////////////////////////////
 164          //名称:无线字节接收子程序
 165          //功能:从串口以查询的方式接收一字节数据,数据返回
 166          //////////////////////////////////////////
 167          unsigned char receive_byte(void) reentrant
 168          {
 169   1      unsigned char pc_data;
 170   1      unsigned int i,j;
 171   1              
 172   1              while(RI==0&&j<2000)
 173   1              {
 174   2                 i++;                      //等待接收一字节数据,设定超限时间值
 175   2                 if(i>2000)
 176   2                 {
 177   3                      i       =0;
 178   3                      j++;
C51 COMPILER V7.00  SUBPRO_DS                                                              03/16/2005 20:37:51 PAGE 4   

 179   3                 }    
 180   2              };
 181   1                      
 182   1              while(RI==1)
 183   1              {
 184   2                      RI=0;
 185   2                  pc_data     =SBUF;
 186   2                  break;
 187   2            }
 188   1              return pc_data;
 189   1      }   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    432    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      13
   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 + -