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

📄 ds18b20.lst

📁 18b20程序及中文资料.rar
💻 LST
字号:
C51 COMPILER V7.20   DS18B20                                                               10/26/2007 10:04:35 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1           #include<reg51.h>
   2           //显示模块
   3          
   4          unsigned char code segtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
   5                                                                  0x6f,0x63,0x39};
   6          unsigned char disp_buf[]={0,0,0,0};
   7          unsigned char code ledbit[]={0xfe,0xfd,0xfb,0xf7};
   8          unsigned char ledno=0,ms5;
   9          unsigned char temperature=0;//温度值
  10          unsigned int time;
  11          sbit DQ =P3^3;   //定义通信端口
  12          
  13          
  14          void delay(unsigned int i)
  15          {
  16   1              while(i--);
  17   1      }
  18          
  19          //初始化函数
  20          Init_DS18B20(void)
  21          {
  22   1              unsigned char x=0;
  23   1              DQ = 1;    //DQ复位
  24   1              delay(8);  //稍做延时
  25   1              DQ = 0;    //单片机将DQ拉低
  26   1              delay(80); //精确延时 大于 480us
  27   1              DQ = 1;    //拉高总线
  28   1              delay(14);
  29   1              x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  30   1              delay(20);
  31   1      }
  32          //读一个字节
  33          ReadOneChar(void)
  34          {
  35   1              unsigned char i=0;
  36   1              unsigned char dat = 0;
  37   1              for (i=8;i>0;i--)
  38   1              {
  39   2                      DQ = 0; // 给脉冲信号
  40   2                      dat>>=1;
  41   2                      DQ = 1; // 给脉冲信号
  42   2                      if(DQ)
  43   2                      dat|=0x80;
  44   2                      delay(4);
  45   2              }
  46   1       return(dat);
  47   1      }
  48          //写一个字节
  49          WriteOneChar(unsigned char dat)
  50          {
  51   1               unsigned char i=0;
  52   1               for (i=8; i>0; i--)
  53   1                      {
  54   2                              DQ = 0;
  55   2                              DQ = dat&0x01;
C51 COMPILER V7.20   DS18B20                                                               10/26/2007 10:04:35 PAGE 2   

  56   2                          delay(5);
  57   2                              DQ = 1;
  58   2                              dat>>=1;
  59   2                      }
  60   1      
  61   1      }
  62          //读取温度
  63          ReadTemperature(void)
  64          {
  65   1              unsigned char a=0;
  66   1              unsigned char b=0;
  67   1              unsigned int t=0;
  68   1              float tt=0;
  69   1              Init_DS18B20();
  70   1              WriteOneChar(0xCC); // 跳过读序号列号的操作
  71   1              WriteOneChar(0x44); // 启动温度转换
  72   1              Init_DS18B20();
  73   1              WriteOneChar(0xCC); //跳过读序号列号的操作
  74   1              WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  75   1              a=ReadOneChar();
  76   1              b=ReadOneChar();
  77   1              t=b;
  78   1              t<<=8;
  79   1              t=t|a;
  80   1              tt=t*0.0625;
  81   1              t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
  82   1              return(tt);
  83   1      }
  84          
  85          
  86          main()
  87          {
  88   1              TMOD=0x21;
  89   1              EA=1;
  90   1              ET0=1;
  91   1              ET1=1;
  92   1              TR0=1;
  93   1              TR1=1;
  94   1              TH0=0xee;
  95   1              TL0=0x00;
  96   1              TH1=0xff;
  97   1              TL1=0xfe;
  98   1       
  99   1        while(1)
 100   1        {     
 101   2         
 102   2        
 103   2        }
 104   1      }
 105          
 106          void tiemr1(void) interrupt 3
 107          {       
 108   1              time++;
 109   1              if(time==20000)
 110   1              {
 111   2              temperature=ReadTemperature();//读温度
 112   2              time=0;
 113   2              }
 114   1          
 115   1      
 116   1      }        
 117          
C51 COMPILER V7.20   DS18B20                                                               10/26/2007 10:04:35 PAGE 3   

 118          void timer0(void) interrupt 1
 119          { 
 120   1              TR0=0;
 121   1              TH0=0xee;
 122   1              TL0=0x00;
 123   1              P1=0xff;
 124   1        
 125   1              disp_buf[0]=temperature/10;
 126   1              disp_buf[1]=temperature%10;
 127   1              disp_buf[2]=10;
 128   1              disp_buf[3]=11;
 129   1              P1=ledbit[ledno];
 130   1              P0=segtab[disp_buf[ledno]];
 131   1              ledno++;
 132   1              if(ledno>3) ledno=0;
 133   1        //ms5++;
 134   1              TR0=1;  
 135   1      
 136   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    428    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9       4
   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 + -