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

📄 rount4.lst

📁 一个温度采集系统的单片机程序与WINDOWS 串口通信程序
💻 LST
字号:
C51 COMPILER V7.00  ROUNT4                                                                 06/14/2005 17:21:10 PAGE 1   


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

stmt level    source

   1          #include<rount3.h>
   2          #include<reg51.h>
   3          #include<intrins.h>
   4          //???????????????????????????????????????????????????????
   5          //???????????????????????????????????????????????????????
   6          bit     page_ch_flg;
   7          
   8          unsigned char sla_adr0;
   9          unsigned char sla_adr1;
  10          unsigned char init_adr0;
  11          unsigned char init_adr1;
  12          
  13          
  14          //////////////////////////////////////////
  15          //名称:测温子程序
  16          //功能:读取64个DS18B20温度值,存放到扩展RAM区
  17          //////////////////////////////////////////
  18          void read_one_tmp(vs_rom)         //读取ONE DS18B20温度值
  19          unsigned char data  *vs_rom;
  20          {
  21   1      
  22   1      unsigned char i;
  23   1      unsigned char id_rom[8];                
  24   1                              
  25   1              if(page_ch_flg==1)
  26   1              {       
  27   2                      sla_adr0|=pagel;
  28   2                      rdadr(&id_rom[0],sla_adr0,init_adr1,8);
  29   2                      goto    next;
  30   2              }
  31   1              if(init_adr1==0xf8)                             //判断是否页溢出?
  32   1              page_ch_flg     =1;     
  33   1                                                        
  34   1              rdadr(&id_rom[0],sla_adr0,init_adr1,8);         //第一次发送EEPROM中DS18B20 ID存放首地址               
  35   1              
  36   1      next:init_adr1+=8;              
  37   1         if(!OWReset())
  38   1         {
  39   2              OWWriteByte(0x55);                  //写匹配ID命令
  40   2              for(i=0;i<8;i++)
  41   2              OWWriteByte(id_rom[i]);                 //发送8字节DS18B20 ID
  42   2              OWWriteByte(0xBE);
  43   2              for(i=0;i<2;i++)
  44   2              *(vs_rom+i)     =OWReadByte();                  //读取2字节温度数据             
  45   2      //      *(vs_rom+i)     =0x01;
  46   2              _nop_();                 
  47   2         } 
  48   1      _nop_();    
  49   1      }
  50          
  51          //////////////////////////////////////////////////////////////////
  52          /////////////////////////////////////////////////////////////////
  53          
  54          void do_one_tmp(us_rom,us_rom_bcd)        //将读取的温度数据转换成十进制数 
  55          unsigned char data  *us_rom;
C51 COMPILER V7.00  ROUNT4                                                                 06/14/2005 17:21:10 PAGE 2   

  56          unsigned char data  *us_rom_bcd;
  57          {
  58   1      unsigned char i =0;
  59   1      unsigned char temp,shift,mode;
  60   1      unsigned char us_rom_var[2];
  61   1      unsigned char us_bcd_var;
  62   1      float us_tmp_bcd,mode_f;
  63   1      unsigned char flag;
  64   1      
  65   1      us_rom_var[0]   =*us_rom;                       //温度整数位
  66   1      us_rom_var[1]   =*(us_rom+1);           //温度小数位
  67   1      flag    =(us_rom_var[1]>>3)&0x01;
  68   1      us_rom_var[1]   =((us_rom_var[1]&0x03)<<4)|((us_rom_var[0]&0xf0)>>4);
  69   1      us_rom_var[0]   =us_rom_var[0]&0x0f;
  70   1      
  71   1         while(1)                                 //计算整数值,结果存tmp_rom_bcd[1]
  72   1         {
  73   2              shift   =0x01;    
  74   2              mode    =1;     
  75   2              while(i<6)             
  76   2              {
  77   3                      temp=us_rom_var[1]&shift;
  78   3                      if(temp)                                //此位为1,加上权值
  79   3                      us_bcd_var+=mode;
  80   3      
  81   3                      mode=mode*2;
  82   3                      shift=shift<<1;
  83   3                      i++;
  84   3              }
  85   2              if(flag)                                        //判断是否为负数?yes,整数最高位置1  
  86   2              us_bcd_var|=0x80;
  87   2              break;
  88   2         }
  89   1         *(us_rom_bcd+1)      =us_bcd_var;            //求得温度整数位        
  90   1         
  91   1         i            =0;
  92   1         shift        =0x01;                              //计算小数值,结果存tmp_rom_bcd[0]  
  93   1         mode_f       =6.25;  
  94   1         while(i<4)
  95   1         {
  96   2          temp=us_rom_var[0]&shift;
  97   2          if(temp)
  98   2          us_tmp_bcd+=mode_f;
  99   2          
 100   2          mode_f=mode_f*2;
 101   2          shift=shift<<1;
 102   2          i++;
 103   2         }
 104   1         *us_rom_bcd=us_tmp_bcd;                              //求得温度小数位
 105   1      }
 106          
 107          void wr_tmp_ram(vs_rom_bcd)                 //将BCD码温度数据存EEPROM,小数在低地址  
 108          unsigned char data *vs_rom_bcd;
 109          {
 110   1      unsigned char *p;
 111   1      
 112   1      p               =vs_rom_bcd;
 113   1      wradr(p,sla_adr1,init_adr0,2);
 114   1      init_adr0+=2;
 115   1      }
 116          
 117          void read_all_tmp(void)                   //读取64个DS18B20温度值  
C51 COMPILER V7.00  ROUNT4                                                                 06/14/2005 17:21:10 PAGE 3   

 118          {
 119   1      unsigned char i;
 120   1      unsigned char tmp_rom[2];
 121   1      unsigned char tmp_rom_bcd[2];
 122   1      //unsigned char test_rom[8];
 123   1      
 124   1      init_adr0       =0x00;                           //EEPROM存放首地址0x0000/0x0200
 125   1      init_adr1       =0x00;
 126   1      sla_adr0        =0xA0;                           //24C02硬件地址
 127   1      sla_adr1        =0xA0;
 128   1      sla_adr1        =sla_adr1|pageh;
 129   1      page_ch_flg     =0;                                      //初始化相关变量
 130   1      
 131   1              for(i=0;i<64;i++)
 132   1              {                       
 133   2                      read_one_tmp(tmp_rom);
 134   2                    do_one_tmp(tmp_rom,tmp_rom_bcd);
 135   2              wr_tmp_ram(tmp_rom_bcd);            
 136   2                    
 137   2            } 
 138   1      //      init_adr0       =0x00;                  //test  
 139   1      //    sla_adr1  =0xA4;                                          
 140   1      //      rdadr(&test_rom[0],sla_adr1,init_adr0,8);       
 141   1      //      _nop_();                    
 142   1      }
 143          ///////////////////////////////////////////////////////////////////////////
 144          
 145          
 146          ///////////////////////////////////////////////////
 147          //名称:温度采集
 148          //功能:定时命令DS18B20采集温度数据,存入EEPROM中
 149          //////////////////////////////////////////////////
 150          void collect_ds_tmp(void)
 151          {
 152   1              if(!OWReset())          //命令DS18B20温度转
 153   1              {
 154   2                      OWWriteByte(0xCC);      
 155   2                      OWWriteByte(0x44);
 156   2            }
 157   1      delay_time_1s();
 158   1      _nop_();
 159   1      delay_time_1s();
 160   1      
 161   1      read_all_tmp();         //读取温度转换数据,存入EEPROM中
 162   1      }
 163          
 164          
 165          //???????????????????????????????????????????????????????
 166          //???????????????????????????????????????????????????????


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    403    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      30
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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