📄 ds18b20.lst
字号:
C51 COMPILER V8.01 DS18B20 08/05/2006 11:05:56 PAGE 1
C51 COMPILER V8.01, 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 /*
2 //************************************************************************* //
3 //
4 //
5 // COPYRIGHT (c) 2006 BY FOSHAN LX.
6 // -- ALL RIGHTS RESERVED --
7 //
8 // File Name: ds18b20.C
9 // Author: guobin
10 // Created: 2006/04/20
11 // Modified:
12 // Revision: 2.0
13 //
14 //*************************************************************************
15 */
16
17 #include "hardware.h"
18
19 UCHAR ROM64Bit[8];
20 UCHAR RAM9Byte[9];
21
22 RealTM RealTimeTM;
23
24 bit DS18B20_Initial(void)
25 {
26 1 UINT i;
27 1
28 1 DS18B20_DQ=0;
29 1 i=200;
30 1 while(i--); //delay minimum= 480us
31 1 DS18B20_DQ=1;
32 1 i=15;
33 1 while(i--); //delay 15~60us=40us
34 1 i=80;
35 1 while(i--) //delay 60~240us
36 1 if(!DS18B20_DQ)
37 1 break;
38 1
39 1 if(i==0xFFFF)
40 1 return 0;
41 1 i=100; //delay 240us
42 1 while(i--);
43 1 return 1;
44 1 }
45
46 void DS18B20_Write(UCHAR Dat)
47 {
48 1 UCHAR i=0;
49 1 UCHAR j;
50 1
51 1 for(j=1;j<=8;j++)
52 1 {
53 2 if((Dat&0x01)==0x01)
54 2 {
55 3 DS18B20_DQ=0;
C51 COMPILER V8.01 DS18B20 08/05/2006 11:05:56 PAGE 2
56 3 for(i=0;i<5;i++); //delay min=1us 4us
57 3 DS18B20_DQ=1;
58 3 i=20;
59 3 while(i--); //delay max=60us
60 3 }
61 2 else
62 2 {
63 3 DS18B20_DQ=0;
64 3 i=40; //delay min=60us max=120us 84us
65 3 while(i--);
66 3 DS18B20_DQ=1;
67 3 for(i=0;i<5;i++); //delay min=1us
68 3 }
69 2 Dat>>=1;
70 2 }
71 1 }
72
73 UCHAR DS18B20_Read(void)
74 {
75 1 UCHAR i,j;
76 1 UCHAR Dat;
77 1
78 1 Dat=0;
79 1 for(i=0;i<8;i++)
80 1 {
81 2 DS18B20_DQ=0;
82 2 for(j=0;j<2;j++); //delay min=1us 2us
83 2 DS18B20_DQ=1;
84 2 for(j=0;j<5;j++); //delay 2us~10us
85 2 if(DS18B20_DQ)
86 2 Dat+=1<<i;
87 2 j=30;
88 2 while(j--); //delay min=45us
89 2 }
90 1 return Dat;
91 1 }
92
93 UCHAR DS18B20_Start(void)
94 {
95 1 UCHAR i;
96 1
97 1 if(!DS18B20_Initial())
98 1 return 0;
99 1
100 1 DS18B20_Write(0x33); //read rom code 64bit
101 1
102 1 for(i=0;i<8;i++)
103 1 ROM64Bit[i]=DS18B20_Read();
104 1
105 1 DS18B20_Write(0x44); //start convert temprature
106 1
107 1
108 1 return 1;
109 1 }
110
111 void DS18B20_WaitDQ(void)
112 {
113 1 while(!DS18B20_DQ);
114 1 }
115
116 void DS18B20_ReadTM(void)
117 {
C51 COMPILER V8.01 DS18B20 08/05/2006 11:05:56 PAGE 3
118 1 UCHAR i;
119 1 UINT j;
120 1
121 1 DS18B20_Initial();
122 1
123 1 DS18B20_Write(0x33); //read rom code 64bit
124 1
125 1 for(i=0;i<8;i++)
126 1 ROM64Bit[i]=DS18B20_Read();
127 1
128 1 DS18B20_Write(0xBE); //Read temprature
129 1
130 1 for(i=0;i<9;i++)
131 1 RAM9Byte[i]=DS18B20_Read();
132 1
133 1 ((UCHAR *)&j)[0]=RAM9Byte[1];
134 1 ((UCHAR *)&j)[1]=RAM9Byte[0];
135 1
136 1 if(RAM9Byte[1]>0x80)
137 1 {
138 2 RealTimeTM.Sign=1;
139 2 RealTimeTM.ZhengShu=(UCHAR)(~j>>4);
140 2 RealTimeTM.XiaoShu=(16-(j&0x000F))*625;
141 2 if(RealTimeTM.XiaoShu==0)
142 2 RealTimeTM.ZhengShu++;
143 2 }
144 1 else
145 1 {
146 2 RealTimeTM.Sign=0;
147 2 RealTimeTM.ZhengShu=(UCHAR)(j>>4);
148 2 RealTimeTM.XiaoShu=(j&0x000F)*625;
149 2 }
150 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 362 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 21 2
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 + -