📄 ds18b20显示温度.lst
字号:
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 + -