📄 ds1820.lst
字号:
C51 COMPILER V7.09 DS1820 01/07/2006 14:45:44 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE DS1820
OBJECT MODULE PLACED IN Ds1820.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Ds1820.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "c8051F020.h"
2 #include <intrins.h>
3
4 /*
5 数字温度传感器DS18b20试验
6
7 试验准备:用连接线将JH端子的DS12B80位与CN7或CN8的P37口相连
8 运行此程序,温度值将在数码管上显示.用手触摸T1芯片(DS18B20)
9 观察温度变化.
10
11 */
12
13 #define DataPortDS1820 P37
14
15 void Delay1us(unsigned char us)
16 {
17 1 while (us)
18 1 {
19 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
20 2 --us;
21 2 }
22 1 /*
23 1 TCON &= ~0xc0; // STOP Timer1 and clear overflow flag
24 1 TMOD &= ~0xf0; // configure Timer1 to 16-bit mode
25 1 TMOD |= 0x10;
26 1 CKCON |= 0x10; // Timer1 counts SYSCLKs
27 1
28 1 TR1 = 0; // STOP Timer1
29 1 TH1 = (-SYSCLK/us) >> 8; // set Timer1 to overflow in us
30 1 TL1 = -SYSCLK/us;
31 1 TR1 = 1; // START Timer1
32 1 while (TF1 == 0); // wait for overflow
33 1 TF1 = 0; // clear overflow indicator
34 1 */
35 1 }
36
37
38
39 void Delay15us(void)
40 {
41 1 Delay1us(15);
42 1 }
43
44
45 void Delay10us(void)
46 {
47 1 Delay1us(10);
48 1 }
49
50 bit RstDS1820(void) //返回0-有设备连接1-无设备连接
51 {
52 1 unsigned char i;
53 1 bit RstFlag;
54 1 RstFlag=1;
55 1 DataPortDS1820=0;
C51 COMPILER V7.09 DS1820 01/07/2006 14:45:44 PAGE 2
56 1 for (i=0;i<100/*40*/;i++) //480us
57 1 Delay15us();
58 1 DataPortDS1820=1;
59 1 for (i=0;i<4;i++) //15us-60us
60 1 {
61 2 Delay15us();
62 2 }
63 1 for (i=0;i<16;i++) //60us-240us
64 1 {
65 2 Delay15us();
66 2 if (DataPortDS1820==0) RstFlag=0;
67 2 }
68 1 for (i=0;i<16;i++) //240us
69 1 {
70 2 Delay15us();
71 2 }
72 1 return RstFlag;
73 1 }
74
75 void WriteDS1820(unsigned char ch)
76 {
77 1 unsigned char i;
78 1 DataPortDS1820=1;
79 1 Delay1us(1);
80 1 for (i=0;i<8;i++)
81 1 {
82 2 EA=0;
83 2 DataPortDS1820=0;
84 2 Delay15us();
85 2 DataPortDS1820=ch&0x1;
86 2 EA=1;
87 2 Delay15us();Delay15us();Delay15us();
88 2 DataPortDS1820=1;
89 2 ch=ch>>1;
90 2 Delay1us(1);
91 2 }
92 1 }
93
94 unsigned char ReadDS1820(void)
95 {
96 1 unsigned char i,ch;
97 1 ch=0;
98 1 DataPortDS1820=1;
99 1 Delay1us(1);
100 1 for (i=0;i<8;i++)
101 1 {
102 2 EA=0;
103 2 DataPortDS1820=0;
104 2 Delay10us();
105 2 DataPortDS1820=1;
106 2 Delay1us(2);
107 2 ch=ch>>1;
108 2 if (DataPortDS1820==1)
109 2 {
110 3 ch=ch+0x80;
111 3 }
112 2 EA=1;
113 2 Delay15us();Delay15us();Delay15us();
114 2 }
115 1 return ch;
116 1 }
117 /*
C51 COMPILER V7.09 DS1820 01/07/2006 14:45:44 PAGE 3
118 void GetROMCode(unsigned char idata *ptr)
119 {
120 unsigned char i;
121 RstDS1820();
122 WriteDS1820(0x33); //28h,1ah,2fh,0bh,00h,00h,00h,89h,
123 for (i=0;i<8;i++)
124 {
125 *(ptr+i)=ReadDS1820();
126 }
127 }
128 void MatchROMCode(unsigned char idata *ptr)
129 {
130 unsigned char i;
131 RstDS1820();
132 WriteDS1820(0x55);
133 for (i=0;i<8;i++)
134 {
135 WriteDS1820(*(ptr+i));
136 }
137 }
138
139 bit GetPowerType(void)
140 {
141 WriteDS1820(0xb4);
142 EA=0;
143 DataPortDS1820=1;
144 Delay10us();
145 if (DataPortDS1820)
146 {
147 EA=1;return TRUE;
148 }
149 else
150 {
151 EA=1;return FALSE;
152 }
153 }
154 void WriteConfig(unsigned char Config)
155 {
156 WriteDS1820(0x4e);
157 WriteDS1820(0x7f);
158 WriteDS1820(0x0);
159 WriteDS1820(Config);
160 }
161 unsigned char GetConfig(void)
162 {
163 WriteDS1820(0xBE);
164 ReadDS1820();
165 ReadDS1820();
166 ReadDS1820();
167 ReadDS1820();
168 return ReadDS1820();
169 }
170 */
171
172 void SkipROMCode(void)
173 {
174 1 RstDS1820();
175 1 WriteDS1820(0xcc);
176 1 }
177 void StartADC(void)
178 {
179 1
C51 COMPILER V7.09 DS1820 01/07/2006 14:45:44 PAGE 4
180 1 RstDS1820(); //复位
181 1 WriteDS1820(0xcc); //广播
182 1 WriteDS1820(0x44); //启动AD转换 12bit700ms
183 1 }
184
185 unsigned int GetTempValue(void)
186 {
187 1 unsigned char i,j;
188 1 unsigned int T;
189 1 SkipROMCode();
190 1 WriteDS1820(0xBE);
191 1 i=ReadDS1820();
192 1 j=ReadDS1820();
193 1 StartADC();
194 1 T=i+j*256;
195 1 if (T==0xffff) return 0xffff;
196 1 if (T>0x8000)
197 1 {
198 2 T=-T;
199 2 return (0x8000+T*5/8);
200 2 }
201 1 else
202 1 return (T*5/8);
203 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 290 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -