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

📄 route0.lst

📁 一个温度采集系统的单片机程序与WINDOWS 串口通信程序
💻 LST
字号:
C51 COMPILER V7.00  ROUTE0                                                                 03/18/2005 10:41:38 PAGE 1   


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

stmt level    source

   1          #include<rount3.h>
   2          #include<reg51.h>
   3          #include<intrins.h>
   4          bit     page_ch_flg;
   5          
   6          unsigned char sla_adr0;
   7          unsigned char sla_adr1;
   8          unsigned char init_adr0;
   9          unsigned char init_adr1;
  10          
  11          ////////////////////////////
  12          //名称:延迟程序
  13          //功能:根据参数延迟
  14          ////////////////////////////
  15          void delay_time(unsigned int us)          //29us/40us/52us/64us
  16          {  
  17   1      unsigned int data i;    
  18   1              for(i=0;i<=us;i++) 
  19   1              _nop_();
  20   1      }
  21          
  22          
  23          void delay_time_1s  (void)                //实际模拟仿真测试 /0.9s
  24          {
  25   1      unsigned char data i;
  26   1            while(i<4)
  27   1            {
  28   2                delay_time(8000);
  29   2              _nop_();
  30   2              delay_time(8000);
  31   2              i++;
  32   2            }
  33   1      } 
  34          
  35          //////////////////////////////////////////
  36          //名称:测温子程序
  37          //功能:读取64个DS18B20温度值,存放到扩展RAM区
  38          //////////////////////////////////////////
  39          void read_one_tmp(vs_rom)         //读取ONE DS18B20温度值
  40          unsigned char data  *vs_rom;
  41          {
  42   1      
  43   1      unsigned char i;
  44   1      unsigned char id_rom[8];                
  45   1                              
  46   1              if(page_ch_flg==1)
  47   1              {       
  48   2                      sla_adr0|=pagel;
  49   2                      rdadr(&id_rom[0],sla_adr0,init_adr1,8);
  50   2                      goto    next;
  51   2              }
  52   1              if(init_adr1==0xf8)                             //判断是否页溢出?
  53   1              page_ch_flg     =1;     
  54   1                                                        
  55   1              rdadr(&id_rom[0],sla_adr0,init_adr1,8);         //第一次发送EEPROM中DS18B20 ID存放首地址               
C51 COMPILER V7.00  ROUTE0                                                                 03/18/2005 10:41:38 PAGE 2   

  56   1              
  57   1      next:init_adr1+=8;              
  58   1         if(!OWReset())
  59   1         {
  60   2              OWWriteByte(0x55);                  //写匹配ID命令
  61   2              for(i=0;i<8;i++)
  62   2              OWWriteByte(id_rom[i]);                 //发送8字节DS18B20 ID
  63   2              OWWriteByte(0xBE);
  64   2              for(i=0;i<2;i++)
  65   2              *(vs_rom+i)     =OWReadByte();                  //读取2字节温度数据             
  66   2              _nop_();                 
  67   2         } 
  68   1      _nop_();    
  69   1      }
  70          
  71          //////////////////////////////////////////////////////////////////
  72          /////////////////////////////////////////////////////////////////
  73          
  74          void do_one_tmp(us_rom,us_rom_bcd)        //将读取的温度数据转换成十进制数 
  75          unsigned char data  *us_rom;
  76          unsigned char data  *us_rom_bcd;
  77          {
  78   1      unsigned char i =0;
  79   1      unsigned char temp,shift,mode;
  80   1      unsigned char us_rom_var[2];
  81   1      unsigned char us_bcd_var;
  82   1      float us_tmp_bcd,mode_f;
  83   1      unsigned char flag;
  84   1      
  85   1      us_rom_var[0]   =*us_rom;                       //温度整数位
  86   1      us_rom_var[1]   =*(us_rom+1);           //温度小数位
  87   1      flag    =(us_rom_var[1]>>3)&0x01;
  88   1      us_rom_var[1]   =((us_rom_var[1]&0x03)<<4)|((us_rom_var[0]&0xf0)>>4);
  89   1      us_rom_var[0]   =us_rom_var[0]&0x0f;
  90   1      
  91   1         while(1)                                 //计算整数值,结果存tmp_rom_bcd[1]
  92   1         {
  93   2              shift   =0x01;    
  94   2              mode    =1;     
  95   2              while(i<6)             
  96   2              {
  97   3                      temp=us_rom_var[1]&shift;
  98   3                      if(temp)                                //此位为1,加上权值
  99   3                      us_bcd_var+=mode;
 100   3      
 101   3                      mode=mode*2;
 102   3                      shift=shift<<1;
 103   3                      i++;
 104   3              }
 105   2              if(flag)                                        //判断是否为负数?yes,整数最高位置1  
 106   2              us_bcd_var|=0x80;
 107   2              break;
 108   2         }
 109   1         *(us_rom_bcd+1)      =us_bcd_var;            //求得温度整数位        
 110   1         
 111   1         i            =0;
 112   1         shift        =0x01;                              //计算小数值,结果存tmp_rom_bcd[0]  
 113   1         mode_f       =6.25;  
 114   1         while(i<4)
 115   1         {
 116   2          temp=us_rom_var[0]&shift;
 117   2          if(temp)
C51 COMPILER V7.00  ROUTE0                                                                 03/18/2005 10:41:38 PAGE 3   

 118   2          us_tmp_bcd+=mode_f;
 119   2          
 120   2          mode_f=mode_f*2;
 121   2          shift=shift<<1;
 122   2          i++;
 123   2         }
 124   1         *us_rom_bcd=us_tmp_bcd;                              //求得温度小数位
 125   1      }
 126          
 127          void wr_tmp_ram(vs_rom_bcd)                 //将BCD码温度数据存EEPROM,小数在低地址  
 128          unsigned char data *vs_rom_bcd;
 129          {
 130   1      unsigned char *p;
 131   1      
 132   1      p               =vs_rom_bcd;
 133   1      wradr(p,sla_adr1,init_adr0,2);
 134   1      init_adr0+=2;
 135   1      }
 136          
 137          void read_all_tmp(void)                   //读取64个DS18B20温度值  
 138          {
 139   1      unsigned char i;
 140   1      unsigned char tmp_rom[2];
 141   1      unsigned char tmp_rom_bcd[2];
 142   1      //unsigned char test_rom[8];
 143   1      
 144   1      init_adr0       =0x00;                           //EEPROM存放首地址0x0000/0x0200
 145   1      init_adr1       =0x00;
 146   1      sla_adr0        =0xA0;                           //24C02硬件地址
 147   1      sla_adr1        =0xA0;
 148   1      sla_adr1        =sla_adr1|pageh;
 149   1      page_ch_flg     =0;                                      //初始化相关变量
 150   1      
 151   1              for(i=0;i<64;i++)
 152   1              {                       
 153   2                      read_one_tmp(tmp_rom);
 154   2                    do_one_tmp(tmp_rom,tmp_rom_bcd);
 155   2                    wr_tmp_ram(tmp_rom_bcd);      
 156   2                    
 157   2            } 
 158   1      //      init_adr0       =0x00;                  //test  
 159   1      //      sla_adr1        =0xA4;                                          
 160   1      //      rdadr(&test_rom[0],sla_adr1,init_adr0,8);       
 161   1      //      _nop_();                    
 162   1      }
 163          ///////////////////////////////////////////////////////////////////////////
 164          
 165          main()
 166          {
 167   1      unsigned char test_rom[8];
 168   1      unsigned char nxt_rom[2];       
 169   1      
 170   1      OWReset();
 171   1      OWWriteByte(0xCC);
 172   1      OWWriteByte(0x44);
 173   1      delay_time_1s();
 174   1      
 175   1      //page_ch_flg   =0;
 176   1      //init_adr0     =0x00;
 177   1      //init_adr1     =0x00;
 178   1      //sla_adr0      =0xA0;
 179   1      //sla_adr1      =0xA4;
C51 COMPILER V7.00  ROUTE0                                                                 03/18/2005 10:41:38 PAGE 4   

 180   1      //read_one_tmp(test_rom,1);
 181   1      //do_one_tmp(test_rom,nxt_rom);
 182   1      //wr_tmp_ram(nxt_rom);
 183   1      read_all_tmp();
 184   1              init_adr0       =0x00;                  //test  
 185   1            sla_adr1  =0xA4;                                          
 186   1              rdadr(&test_rom[0],sla_adr1,init_adr0,8);       
 187   1              _nop_();        
 188   1      
 189   1      }
*** WARNING C280 IN LINE 168 OF ROUTE0.C: 'nxt_rom': unreferenced local variable


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


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

⌨️ 快捷键说明

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