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

📄 ds18b20显示温度.lst

📁 DS18B20程序传给有用的人看阿拉丁及为激发沃尔夫奇偶数肯德基罚款
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.01   DS18B20显蔩温度                                                       04/26/2008 15:19:26 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE DS18B20显蔩温度
OBJECT MODULE PLACED IN DS18B20显示温度.OBJ
COMPILER INVOKED BY: D:\Program Files\keil c\C51\BIN\C51.EXE DS18B20显示温度.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*====功能:DS18B20测温,用LED显示,实时扫描=====*/
   2          /*====作者:张贺平=====*/
   3          /*====时间:20080331=====*/
   4          
   5          #pragma db code
   6          #include<reg51.h>
   7          #include <intrins.h> // _nop_()function
   8          #define NOP _nop_( )
   9          
  10          #define uchar unsigned char
  11          #define uint  unsigned int
  12          
  13          sbit PORT_BIT_1820=P1^6;
  14          /*=====数码管位定义=====*/ 
  15          sbit LED_0=P1^0;
  16          sbit LED_1=P1^1;
  17          sbit LED_2=P1^2;
  18          sbit LED_3=P1^3;
  19          sbit DB=P0^7;
  20          
  21          /*=====数码管码定义0,1,2,3,4,5,6,7,8,9==共阳接法=====*/
  22          uchar a[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 
  23                      0x80,0x90}; 
  24                        
  25          uchar one,two,three,four;      //定义全局变量
  26          
  27          /**************子函数声明****************/
  28          void wr_1820(uchar  val);
  29          uint get_tmpr(void);
  30          void init_1820(void);
  31          uint rd_1820(void);
  32          void delay(uint t);
  33          void start(void);
  34          void display(void);
  35          void led_analyze(uint i);
  36          
  37          void delay(uint t)      //延时
  38          {
  39   1        uint i;
  40   1        for(i=0;i<t;i++);              
  41   1      }  
  42          
  43          //********************************************
  44          void start(void)
  45          {
  46   1         init_1820();
  47   1         wr_1820(0xcc);
  48   1         wr_1820(0x44);
  49   1      }
  50          
  51          uint get_tmpr(void)
  52          {
  53   1         uint tmpr;
  54   1              
  55   1         EA=0;
C51 COMPILER V8.01   DS18B20显蔩温度                                                       04/26/2008 15:19:26 PAGE 2   

  56   1         init_1820();
  57   1         wr_1820(0xcc);
  58   1         wr_1820(0x44);
  59   1         delay(250);
  60   1         init_1820();
  61   1         wr_1820(0xcc);
  62   1         wr_1820(0xbe);
  63   1         tmpr=rd_1820();
  64   1       /*  init_1820();
  65   1         wr_1820(0xcc);
  66   1         wr_1820(0x44);   /* start convert */
  67   1         EA=1;
  68   1         return tmpr;
  69   1      }
  70          
  71          void init_1820(void)
  72          {  uchar  i;
  73   1         PORT_BIT_1820=1;       //1.6us
  74   1         PORT_BIT_1820=0; /* 1--8+7us */
  75   1         for(i=0;i<100;i++);/* delay 400--960us */  //300us
  76   1           PORT_BIT_1820=1;
  77   1         for(i=0;i<200;i++)  /* delay 15--60us */
  78   1          { if (PORT_BIT_1820==0) break;}
  79   1         for(i=0;i<=200;i++)
  80   1          { if (PORT_BIT_1820==1)  break;}
  81   1         for(i=0;i<60;i++); /* delay 480us */
  82   1      }
  83          
  84          void wr_1820(uchar val)
  85          {
  86   1         uchar i,j;
  87   1         PORT_BIT_1820=1;  //1.6us
  88   1         NOP;              //3.6us
  89   1         for(j=0;j<8;j++)
  90   1          { 
  91   2               PORT_BIT_1820=0;
  92   2           NOP;
  93   2               NOP;
  94   2               NOP;
  95   2               NOP;
  96   2           NOP;  /* delay 5us  */
  97   2           if ((val&0x01)==1)
  98   2             PORT_BIT_1820=1;
  99   2           else
 100   2             PORT_BIT_1820=0;
 101   2           for(i=0;i<30;i++)NOP;    /* delay 56 us */   //20.6us
 102   2             PORT_BIT_1820=1;
 103   2             val=val>>1;
 104   2         }
 105   1      }
 106          uint rd_1820(void)
 107          { 
 108   1         uchar  j,i,k,tt[9],vv;
 109   1         float tmpr;
 110   1         vv=0;
 111   1         for(k=0;k<8;k++)
 112   1           {  
 113   2                for(j=0;j<8;j++)
 114   2             { 
 115   3                   PORT_BIT_1820=0;
 116   3               NOP;NOP;NOP;NOP;NOP;
 117   3               PORT_BIT_1820=1;
C51 COMPILER V8.01   DS18B20显蔩温度                                                       04/26/2008 15:19:26 PAGE 3   

 118   3               vv=vv>>1;
 119   3               if(PORT_BIT_1820) vv=vv|0x80;
 120   3               for(i=0;i<60;i++)NOP;    /*delay 120 us */
 121   3               PORT_BIT_1820=1;
 122   3              }
 123   2             tt[k]=vv;
 124   2            }
 125   1         i=tt[1]&0xf8;
 126   1         if( (i!=0)&&(i!=0xf8)) return 0x000;
 127   1         tmpr=tt[1]*256.0;
 128   1         tmpr=(tmpr+tt[0])/16.0;
 129   1         if(tmpr>100.0 ) return 0x000;
 130   1         return  tmpr*10;
 131   1      }
 132          
 133          /*====显示函数=====*/ 
 134          void display(void)
 135          {
 136   1        //P0=a[one];     //调用显示数据 
 137   1        //LED_0=0;       //显示开                             /*也可以先开显示再调用显示数据
 138   1        //delay(100);    //延时 
 139   1        //LED_0=1;       //关显示 
 140   1        P0=a[two];
 141   1        LED_1=0;
 142   1        delay(150);
 143   1        LED_1=1;
 144   1        
 145   1       
 146   1        P0=a[three];     //若只需两位显示,此上程序段删除即可
 147   1        DB=0;
 148   1        LED_2=0;
 149   1        delay(150);
 150   1        LED_2=1;
 151   1        DB=1;
 152   1      
 153   1        P0=a[four];
 154   1        LED_3=0;
 155   1        delay(150);
 156   1        LED_3=1; 
 157   1      }
 158          
 159          /*====分解显示数据=====*/ 
 160          void led_analyze(uint i)
 161          {       //i=i*10;
 162   1          //one=i/1000;
 163   1          two=(i/100)%10;
 164   1          three=(i%100)/10;                    //用四位一体数码管中间两位显示
 165   1          four=i%10;
 166   1      }
 167          main()           //主程序
 168          {
 169   1          init_1820();
 170   1          wr_1820(0x33); 
 171   1              while(1)
 172   1         {
 173   2          //uchar ds[8];                                                      
 174   2      
 175   2          start();
 176   2          led_analyze(get_tmpr());
 177   2          display( );
 178   2          }  
 179   1      }
C51 COMPILER V8.01   DS18B20显蔩温度                                                       04/26/2008 15:19:26 PAGE 4   

 180          
C51 COMPILER V8.01   DS18B20显蔩温度                                                       04/26/2008 15:19:26 PAGE 5   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION _delay (BEGIN)
                                           ; SOURCE LINE # 37
;---- Variable 't' assigned to Register 'R6/R7' ----
                                           ; SOURCE LINE # 38
                                           ; SOURCE LINE # 40
;---- Variable 'i' assigned to Register 'R4/R5' ----
0000 E4                CLR     A
0001 FD                MOV     R5,A
0002 FC                MOV     R4,A
0003         ?C0001:
0003 C3                CLR     C
0004 ED                MOV     A,R5
0005 9F                SUBB    A,R7
0006 EC                MOV     A,R4
0007 9E                SUBB    A,R6
0008 5007              JNC     ?C0004
000A 0D                INC     R5
000B BD0001            CJNE    R5,#00H,?C0049
000E 0C                INC     R4
000F         ?C0049:
000F 80F2              SJMP    ?C0001
                                           ; SOURCE LINE # 41
0011         ?C0004:
0011 22                RET     
             ; FUNCTION _delay (END)

             ; FUNCTION start (BEGIN)
                                           ; SOURCE LINE # 44
                                           ; SOURCE LINE # 45
                                           ; SOURCE LINE # 46
0000 1100        R     ACALL   init_1820
                                           ; SOURCE LINE # 47
0002 7FCC              MOV     R7,#0CCH
0004 1100        R     ACALL   _wr_1820
                                           ; SOURCE LINE # 48
0006 7F44              MOV     R7,#044H
0008 0100        R     AJMP    _wr_1820
             ; FUNCTION start (END)

             ; FUNCTION get_tmpr (BEGIN)
                                           ; SOURCE LINE # 51
                                           ; SOURCE LINE # 52
                                           ; SOURCE LINE # 55
0000 C2AF              CLR     EA
                                           ; SOURCE LINE # 56
0002 1100        R     ACALL   init_1820
                                           ; SOURCE LINE # 57
0004 7FCC              MOV     R7,#0CCH
0006 1100        R     ACALL   _wr_1820
                                           ; SOURCE LINE # 58
0008 7F44              MOV     R7,#044H
000A 1100        R     ACALL   _wr_1820
                                           ; SOURCE LINE # 59
000C 7FFA              MOV     R7,#0FAH
000E 7E00              MOV     R6,#00H
0010 1100        R     ACALL   _delay
                                           ; SOURCE LINE # 60
0012 1100        R     ACALL   init_1820
                                           ; SOURCE LINE # 61
C51 COMPILER V8.01   DS18B20显蔩温度                                                       04/26/2008 15:19:26 PAGE 6   

0014 7FCC              MOV     R7,#0CCH
0016 1100        R     ACALL   _wr_1820
                                           ; SOURCE LINE # 62
0018 7FBE              MOV     R7,#0BEH
001A 1100        R     ACALL   _wr_1820
                                           ; SOURCE LINE # 63
001C 1100        R     ACALL   rd_1820
;---- Variable 'tmpr' assigned to Register 'R6/R7' ----
                                           ; SOURCE LINE # 67
001E D2AF              SETB    EA
                                           ; SOURCE LINE # 68
                                           ; SOURCE LINE # 69
0020         ?C0006:
0020 22                RET     
             ; FUNCTION get_tmpr (END)

             ; FUNCTION init_1820 (BEGIN)
                                           ; SOURCE LINE # 71
                                           ; SOURCE LINE # 72
                                           ; SOURCE LINE # 73
0000 D296              SETB    PORT_BIT_1820
                                           ; SOURCE LINE # 74
0002 C296              CLR     PORT_BIT_1820
                                           ; SOURCE LINE # 75
;---- Variable 'i' assigned to Register 'R7' ----
0004 E4                CLR     A
0005 FF                MOV     R7,A
0006         ?C0007:
0006 0F                INC     R7
0007 BF64FC            CJNE    R7,#064H,?C0007
000A         ?C0008:
                                           ; SOURCE LINE # 76
000A D296              SETB    PORT_BIT_1820
                                           ; SOURCE LINE # 77
000C E4                CLR     A
000D FF                MOV     R7,A
000E         ?C0010:
                                           ; SOURCE LINE # 78
000E 309604            JNB     PORT_BIT_1820,?C0011
0011         ?C0012:
0011 0F                INC     R7
0012 BFC8F9            CJNE    R7,#0C8H,?C0010
0015         ?C0011:
                                           ; SOURCE LINE # 79
0015 E4                CLR     A
0016 FF                MOV     R7,A
0017         ?C0014:
                                           ; SOURCE LINE # 80
0017 209607            JB      PORT_BIT_1820,?C0015
001A         ?C0016:
001A 0F                INC     R7
001B EF                MOV     A,R7
001C D3                SETB    C
001D 94C8              SUBB    A,#0C8H
001F 40F6              JC      ?C0014
0021         ?C0015:
                                           ; SOURCE LINE # 81
0021 E4                CLR     A
0022 FF                MOV     R7,A
0023         ?C0018:
0023 0F                INC     R7
0024 BF3CFC            CJNE    R7,#03CH,?C0018
C51 COMPILER V8.01   DS18B20显蔩温度                                                       04/26/2008 15:19:26 PAGE 7   

                                           ; SOURCE LINE # 82
0027         ?C0021:
0027 22                RET     
             ; FUNCTION init_1820 (END)

             ; FUNCTION _wr_1820 (BEGIN)
                                           ; SOURCE LINE # 84
;---- Variable 'val' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 85

⌨️ 快捷键说明

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