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

📄 ds18b20.lst

📁 此程序为ds18b20温度采集芯片的keil c 程序没有加入显示的部分,但已调试过.可用
💻 LST
字号:
C51 COMPILER V7.06   DS18B20                                                               07/30/2007 12:05:35 PAGE 1   


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

stmt level    source

*** WARNING C500 IN LINE 1 OF DS18B20.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
   1          #include <reg51.h>
   2          #include "intrins.h"
   3          unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7, 
   4                                           0xef,0xdf,0xbf,0x7f}; 
   5          unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,   //显示码值
   6                                              0x66,0x6d,0x7d,0x07, 
   7                                              0x7f,0x6f,0x77,0x7c, 
   8                                              0x39,0x5e,0x79,0x71,0x00,0x40}; 
   9          unsigned char code dotcode[32]={0,3,6,9,12,16,19,22, 
  10                                          25,28,31,34,38,41,44,48, 
  11                                          50,53,56,59,63,66,69,72, 
  12                                          75,78,81,84,88,91,94,97}; 
  13          unsigned char displaycount; 
  14          unsigned char displaybuf[8]={16,16,16,16,16,16,16,16}; 
  15          unsigned char timecount; 
  16          unsigned char readdata[8]; 
  17          sbit DQ=P3^7; 
  18          bit sflag; 
  19          bit resetpulse(void)  //复位子程序
  20          { 
  21   1        unsigned char i; 
  22   1        DQ=0; 
  23   1        for(i=255;i>0;i--); 
  24   1        DQ=1; 
  25   1        for(i=60;i>0;i--); 
  26   1        return(DQ); 
  27   1        for(i=200;i>0;i--); 
  28   1      } 
  29          void writecommandtods18b20(unsigned char command) //写ds18b20的命令控制字
  30          { 
  31   1        unsigned char i; 
  32   1        unsigned char j; 
  33   1        for(i=0;i<8;i++) 
  34   1          { 
  35   2            if((command & 0x01)==0) 
  36   2              { 
  37   3                DQ=0;                   //写0
  38   3                for(j=35;j>0;j--); 
  39   3                DQ=1; 
  40   3              } 
  41   2              else 
  42   2                { 
  43   3                  DQ=0;              
  44   3                  for(j=2;j>0;j--); //写1
  45   3                  DQ=1; 
  46   3                  for(j=33;j>0;j--); 
  47   3                } 
  48   2            command=_cror_(command,1);  //command的值循环右移一位    
  49   2          } 
  50   1      }
  51          
  52          
  53          unsigned char readdatafromds18b20(void) 
  54          { 
C51 COMPILER V7.06   DS18B20                                                               07/30/2007 12:05:35 PAGE 2   

  55   1        unsigned char i; 
  56   1        unsigned char j; 
  57   1        unsigned char temp; 
  58   1        temp=0; 
  59   1        for(i=0;i<8;i++) 
  60   1          { 
  61   2            temp=_cror_(temp,1); //将读入的一位值右移一位;因为ds18b20传数值时是低位在前
  62   2            DQ=0; 
  63   2            _nop_(); 
  64   2            _nop_(); 
  65   2            DQ=1; 
  66   2            for(j=10;j>0;j--); 
  67   2            if(DQ==1) 
  68   2              {
  69   3                temp=temp | 0x80; //读入1
  70   3              } 
  71   2              else 
  72   2                { 
  73   3                  temp=temp | 0x00; //读入0
  74   3                } 
  75   2            for(j=200;j>0;j--); 
  76   2          } 
  77   1        return(temp); 
  78   1      } 
  79          
  80          
  81          void main(void) 
  82          { 
  83   1        TMOD=0x01; 
  84   1        TH0=(65536-4000)/256; //定时4ms
  85   1        TL0=(65536-4000)%6; 
  86   1        ET0=1; 
  87   1        EA=1; 
  88   1        while(resetpulse()); 
  89   1        writecommandtods18b20(0xcc); //跳跃ROM命令,同时访问总路线上所有的从机设备
  90   1        writecommandtods18b20(0x44); //启动温度转换命令
  91   1        TR0=1; 
  92   1        while(1) 
  93   1          { 
  94   2            ; 
  95   2          } 
  96   1      } 
  97          
  98          
  99          void t0(void) interrupt 1 using 0 
 100          { 
 101   1        unsigned char x; 
 102   1        unsigned int result; 
 103   1        TH0=(65536-4000)/256; 
 104   1        TL0=(65536-4000)%6; 
 105   1        if(displaycount==2) 
 106   1          { 
 107   2            P0=displaycode[displaybuf[displaycount]] | 0x80; 
 108   2          } 
 109   1          else 
 110   1            { 
 111   2              P0=displaycode[displaybuf[displaycount]]; 
 112   2            } 
 113   1        P2=displaybit[displaycount]; 
 114   1        displaycount++; 
 115   1        if(displaycount==8) 
 116   1          { 
C51 COMPILER V7.06   DS18B20                                                               07/30/2007 12:05:35 PAGE 3   

 117   2            displaycount=0; 
 118   2          } 
 119   1        
 120   1        timecount++; 
 121   1        if(timecount==150) 
 122   1          { 
 123   2            timecount=0; 
 124   2            while(resetpulse()); 
 125   2            writecommandtods18b20(0xcc); 
 126   2            writecommandtods18b20(0xbe); //写CCH后写BEH应用于单节点系统
 127   2            readdata[0]=readdatafromds18b20(); 
 128   2            readdata[1]=readdatafromds18b20(); 
 129   2            for(x=0;x<8;x++)
 130   2              { 
 131   3                displaybuf[x]=16; 
 132   3              } 
 133   2            sflag=0; 
 134   2            if((readdata[1] & 0xf8)!=0x00) 
 135   2              { 
 136   3                sflag=1; 
 137   3                readdata[1]=~readdata[1]; 
 138   3                readdata[0]=~readdata[0]; 
 139   3                result=readdata[0]+1; 
 140   3                readdata[0]=result; 
 141   3                if(result>255) 
 142   3                  { 
 143   4                    readdata[1]++; 
 144   4                  } 
 145   3              } 
 146   2            readdata[1]=readdata[1]<<4; 
 147   2            readdata[1]=readdata[1] & 0x70; 
 148   2            x=readdata[0]; 
 149   2            x=x>>4; 
 150   2            x=x & 0x0f; 
 151   2            readdata[1]=readdata[1] | x; 
 152   2            x=2; 
 153   2            result=readdata[1]; 
 154   2            while(result/10) 
 155   2              { 
 156   3                displaybuf[x]=result; 
 157   3                result=result/10; 
 158   3                x++; 
 159   3              } 
 160   2            displaybuf[x]=result; 
 161   2            if(sflag==1) 
 162   2              { 
 163   3                displaybuf[x+1]=17; 
 164   3              } 
 165   2            x=readdata[0] & 0x0f; 
 166   2            x=x<<1; 
 167   2            displaybuf[0]=(dotcode[x]); 
 168   2            displaybuf[1]=(dotcode[x])/10; 
 169   2            while(resetpulse()); 
 170   2            writecommandtods18b20(0xcc); 
 171   2            writecommandtods18b20(0x44); 
 172   2          } 
 173   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    400    ----
   CONSTANT SIZE    =     58    ----
C51 COMPILER V7.06   DS18B20                                                               07/30/2007 12:05:35 PAGE 4   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18       2
   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 + -