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

📄 18b20.lst

📁 采用DS18B20单线温度传感器测温 由51单片机控制
💻 LST
字号:
C51 COMPILER V8.02   18B20                                                                 04/20/2007 12:04:09 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN C:\DOCUME~1\ADMINI~1\桌面\DS18B2~1\18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\DOCUME~1\ADMINI~1\桌面\DS18B2~1\18B20.C DB SB OE

line level    source

   1           #include"reg51.h"
   2           #include"intrins.h"
   3          
   4           #define uchar  unsigned char
   5           #define uint unsigned int
   6           #define dis_show P0
   7           #define dis_con P2
   8          
   9           sbit DS=P3^7;
  10           sbit DIN=P1^7;
  11          //sbit P1_6=P1^6;
  12          
  13          
  14          uchar code dis_7[11]={0x18,0xde,0x34,0x94,0xd2,0x91,0x11,0xd8,0x10,0x90,0xf7};//数码管0~9,不亮 ,-
  15          uchar code  scan_con[2]={0xfe,0xfd};//列扫描
  16          uchar data temp_data[2] ={0x01,0x91}; //读出温度暂存单元  ={0x50,0x05};   高位存高位 低位存低位
  17          uchar data dis_data[5];
  18          void delay(uint t)
  19          {
  20   1              for(;t>0;t--);//循环一次延时11us
  21   1      }
  22          
  23          //18b20复位程序
  24          
  25          void reset()
  26          {
  27   1              uint h;
  28   1              bit flag=1;
  29   1              while(flag)
  30   1              {
  31   2                      while(flag)
  32   2                      {
  33   3                              DS=1;
  34   3                              _nop_(); _nop_();  _nop_();
  35   3                              DS=0;//以上程序段制造一个下降延
  36   3                              delay(50);//延时550us  最短延时480us
  37   3                              DS=1;//18b20在上升延后等待15~60us发出存在脉冲,低电平持续60~240us 复位成功
  38   3                              delay(3);
  39   3                              flag=DS;
  40   3                      }
  41   2      
  42   2                      delay(50);//延时550us 看电平能不能升高  如果能升高证明是 低电平脉冲
  43   2                      DS=1;
  44   2                      flag=~DS;
  45   2      
  46   2                 }
  47   1      
  48   1      }
*** WARNING C280 IN LINE 27 OF C:\DOCUME~1\ADMINI~1\桌面\DS18B2~1\18B20.C: 'h': unreferenced local variable
  49          //18b20写命令函数
  50          
  51          void write(uchar rule)
  52           {
  53   1              uchar i,temp;
  54   1              for(i=0;i<8;i++)
C51 COMPILER V8.02   18B20                                                                 04/20/2007 12:04:09 PAGE 2   

  55   1              {
  56   2                              temp=rule&0x01;
  57   2                              DS=1;
  58   2                              _nop_(); _nop_();  _nop_();
  59   2                              DS=0;//以上程序段制造一个下降延
  60   2                              _nop_(); _nop_();  _nop_();
  61   2                              DS=temp;//从低位起 按位取出 送给18B20
  62   2                              rule=rule>>1;
  63   2                              delay(6);//延时66us
  64   2              }
  65   1              DS=1;
  66   1              delay(1);
  67   1       }
  68          
  69          //读一温度字节
  70          uchar read()
  71          {
  72   1              uchar data i;
  73   1              uchar data temp=0x00;
  74   1              uchar data value=0;
  75   1              for(i=0;i<8;i++)
  76   1              {
  77   2                              DS=1;
  78   2                              _nop_(); _nop_();  _nop_();
  79   2                              DS=0;//以上程序段制造一个下降延
  80   2                              _nop_(); _nop_();  _nop_();
  81   2                              DS=1;
  82   2                               _nop_(); _nop_();  _nop_();
  83   2                               value>>=1;
  84   2                               DS=0;
  85   2                               _nop_(); _nop_();  _nop_(); _nop_();
  86   2                               DS=1;
  87   2                               _nop_(); _nop_();  _nop_(); _nop_();
  88   2                               if(DS) value|=0x80;
  89   2                              delay(6);
  90   2              }
  91   1              DS=1;
  92   1              return(value);
  93   1      }
  94          //读出温度函数
  95          read_temp()
  96          {        uchar h;
  97   1              reset();
  98   1              write(0xcc);//发skiprom命令
  99   1              write(0xbe);   //读命令
 100   1              temp_data[0]=read();
 101   1              for(h=0;h<50;h++)
 102   1                    display();         //多加了一次显示 为了解决在显示过程中因为数据处理时间过长引
*** WARNING C206 IN LINE 102 OF C:\DOCUME~1\ADMINI~1\桌面\DS18B2~1\18B20.C: 'display': missing function-prototype
 103   1              temp_data[1]=read();                       //引起的显示眨眼问题
 104   1              reset();
 105   1              write(0xcc);//发skiprom命令
 106   1              write(0x44);//发送转换命令
 107   1      
 108   1      }
 109          
 110          
 111          //数据处理函数
 112          
 113          deal_data()
 114          {
 115   1              uchar data tmp[2];
C51 COMPILER V8.02   18B20                                                                 04/20/2007 12:04:09 PAGE 3   

 116   1      
 117   1              if(temp_data[1]>127)  //判断小于零
 118   1              {
 119   2                      temp_data[1]=~temp_data[1]+1;
 120   2                      temp_data[0]=~temp_data[0]+1;
 121   2                      dis_data[0]=0xbf;
 122   2              }
 123   1              tmp[1]=temp_data[1]<<4;
 124   1              tmp[2]=temp_data[0]>>4;
 125   1              tmp[2]=tmp[2]&0x0f;
 126   1              tmp[1]=tmp[1]|tmp[2];//整数部分
 127   1              tmp[0]=temp_data[0]&0x0f;  //小数部分
 128   1              //dis_data[1]=tmp[1]/100;  //百位
 129   1              dis_data[1]=tmp[1]%100/10;
 130   1              dis_data[2]=tmp[1]%10;  //dis_data[0--3]内容是“-” 高位到低位
 131   1              //dis_data[3]=tmp[0]/2 ; //小数点后只是0到8 没有 9
 132   1      
 133   1      }
 134          
 135          ///显示扫描函数
 136          display()
 137          {
 138   1              uchar i;
 139   1      //      dis_show=dis_data[0];
 140   1      //      dis_con=scan_con[0];
 141   1      //      delay(100);
 142   1              for(i=1;i<3;i++)
 143   1              {
 144   2                      dis_show=dis_7[dis_data[i]];
 145   2                      dis_con=scan_con[2-i];
 146   2                      //if(i==1) DIN=0;
 147   2                      delay(400);
 148   2      
 149   2              }
 150   1      }
 151          
 152          //主函数
 153          void main()
 154          {
 155   1          uint h;
 156   1              EA=0;
 157   1              reset();
 158   1              write(0xcc);//发skiprom命令
 159   1              write(0x44);//发送转换命令
 160   1              for(h=0;h<100;h++)
 161   1                  display();
 162   1              while(1)
 163   1              {
 164   2                  read_temp();
 165   2                  deal_data();
 166   2                  for(h=0;h<100;h++)
 167   2                  display();
 168   2               }
 169   1      }
C51 COMPILER V8.02   18B20                                                                 04/20/2007 12:04:09 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


P0 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0080H  1
P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P2 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A0H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
EA . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AFH  1
_write . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  rule . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
  temp . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0002H  1
deal_data. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  tmp. . . . . . . . . . . . . . . . .  AUTO     DATA   ARRAY    0000H  2
DS . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B7H  1
read . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0004H  1
  temp . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  value. . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
reset. . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  h. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_INT    0000H  2
  flag . . . . . . . . . . . . . . . .  AUTO     DATA   BIT      0000H  1
main . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  h. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0002H  2
temp_data. . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0000H  2
read_temp. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  h. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
dis_data . . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0002H  5
scan_con . . . . . . . . . . . . . . .  PUBLIC   CODE   ARRAY    000BH  2
dis_7. . . . . . . . . . . . . . . . .  PUBLIC   CODE   ARRAY    0000H  11
_delay . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  t. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0006H  2
display. . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    406    ----
   CONSTANT SIZE    =     13    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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