?? one-wire.lst
字號:
C51 COMPILER V8.02 ONE_WIRE 01/17/2007 08:38:52 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ONE_WIRE
OBJECT MODULE PLACED IN One-Wire.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE One-Wire.C BROWSE DEBUG OBJECTEXTEND CODE TABS(2)
line level source
1 /******************************************************************************/
2 /**
3 /** 模 塊 名: -------------------One-Wire.C----------------------------------
4 /** -----------------DS18B20單總線模塊----------------------------*/
5 /** 功能描述:
6 /**
7 /** 創 建 人: huangtiexiong 日期:2006-11-28 */
8 /** 修 改 人: 日期:2006-11-28 */
9 /** 其他說明:
10 /******************************************************************************/
11
12 #include "Includes.h" //文件包含
13
14 /*************************************************
15 模塊級變量申明
16 *************************************************/
17 static void OneWire_Rst(void);
18 static void OneWire_Init(void);
19 static void OneWire_WriteByte(int8u cmd);
20 static int8u OneWire_ReadByte(void);
21 static void OneWire_Idle(void);
22
23
24 /*************************************************
25 子函數定義
26 *************************************************/
27
28 /*******************************************************************************
29 *** 函 數 名: static void OneWire_Init(void)
30 *** 功能描述:
31 *** 全局變量:
32 *** 輸 入: NO !
33 *** 輸 出: NO !
34 *** 創 建 人:huangtiexiong 日期:2006-11-28
35 *** 修 改 人: 日期:2006-11-28
36 *** 函數說明: 單總線數據傳輸初始化;
37 /******************************************************************************/
38 static void OneWire_Init(void)
39 {
40 1 DQ = 1;
41 1 NOP();
42 1 DQ = 0; //拉低數據線,準備Reset OneWire Bus;
43 1 Delay_Xus(125); //延時510us,Reset One-Wire Bus.
44 1 Delay_Xus(125);
45 1
46 1 DQ = 1; //提升數據線;
47 1 Delay_Xus(15); //延時35us;
48 1
49 1 while(DQ) //等待Slave 器件Ack 信號;
50 1 {
51 2 NOP();
52 2 }
53 1 Delay_Xus(60); //延時125us;
54 1 DQ = 1; //提升數據線,準備數據傳輸;
55 1 }
C51 COMPILER V8.02 ONE_WIRE 01/17/2007 08:38:52 PAGE 2
56 /*******************************************************************************
57 *** 函 數 名: static void OneWire_Rst(void)
58 *** 功能描述:
59 *** 全局變量: No !
60 *** 輸 入: NO !
61 *** 輸 出: NO !
62 *** 創 建 人:huangtiexiong 日期:2006-11-28
63 *** 修 改 人: 日期:2006-11-28
64 *** 函數說明: 單總線Reset pulse;
65 /******************************************************************************/
66 static void OneWire_Rst(void)
67 {
68 1 DQ = 0; //拉低數據線,準備Reset OneWire Bus;
69 1 Delay_Xus(125); //延時511us,Reset One-Wire Bus.
70 1 DQ = 0;
71 1 Delay_Xus(125);
72 1 }
73 /*******************************************************************************
74 *** 函 數 名: static void OneWire_WriteByte(int8u cmd)
75 *** 功能描述: 寫一個字節;
76 *** 全局變量: NO !
77 *** 輸 入: cmd:8bit;
78 *** 輸 出: NO !
79 *** 創 建 人:huangtiexiong 日期:2006-11-28
80 *** 修 改 人: 日期:2006-11-28
81 *** 函數說明: cmd主要有Rom操作指令和E2Ram操作指令兩種;
82 /******************************************************************************/
83 static void OneWire_WriteByte(int8u cmd)
84 {
85 1 int8u i;
86 1 for(i=0;i<8;i++)
87 1 {
88 2 if(cmd & 0x01) //低位在前;
89 2 {
90 3 DQ = 0; //結束Recovery time;
91 3 NOP();
92 3 NOP();
93 3 NOP();
94 3 DQ = 1; //發送數據;
95 3 }
96 2 else
97 2 {
98 3 DQ = 0; //結束Rec time;
99 3 NOP();
100 3 NOP();
101 3 NOP();
102 3 //DQ = 0; //發送數據;
103 3 }
104 2 Delay_Xus(30); //等待Slave Device采樣;
105 2 DQ = 1; //Recovery;
106 2 NOP(); //Recovery Time Start;
107 2 cmd >>= 1;
108 2 }
109 1 }
110 /*******************************************************************************
111 *** 函 數 名: static int8u OneWire_ReadByte(void)
112 *** 功能描述: 讀取一個字節;
113 *** 全局變量: NO !
114 *** 輸 入: NO !
115 *** 輸 出: 8bit data;
116 *** 創 建 人:huangtiexiong 日期:2006-11-28
117 *** 修 改 人: 日期:2006-11-28
C51 COMPILER V8.02 ONE_WIRE 01/17/2007 08:38:52 PAGE 3
118 *** 函數說明: 讀之前必須首先寫1;
119 /******************************************************************************/
120 static int8u OneWire_ReadByte(void)
121 {
122 1 int8u i;
123 1 int8u tmp = 0;
124 1 DQ = 1; //準備讀;
125 1 NOP();
126 1 for(i=0;i<8;i++)
127 1 {
128 2 tmp >>= 1; //低位先發;
129 2 DQ = 0; //Read init;
130 2 _nop_(); //2ms;
131 2 DQ = 1; //必須寫1,否則讀出來的將是不預期的數據;
132 2 Delay_Xus(2); //延時9us;
133 2 _nop_();
134 2 if(DQ) //在12us處讀取數據;
135 2 tmp |= 0x80;
136 2 Delay_Xus(30); //延時55us;
137 2 DQ = 1; //恢復One Wire Bus;
138 2 NOP();
139 2 }
140 1 return tmp;
141 1 }
142 /*******************************************************************************
143 *** 函 數 名: static void OneWire_Idle(void)
144 *** 功能描述: 總線空閑模式;
145 *** 全局變量: NO !
146 *** 輸 入: NO !
147 *** 輸 出: NO !
148 *** 創 建 人:huangtiexiong 日期:2006-11-28
149 *** 修 改 人: 日期:2006-11-28
150 *** 函數說明:
151 /******************************************************************************/
152 static void OneWire_Idle(void)
153 {
154 1 DQ = 1;
155 1 NOP();
156 1 }
157 /*******************************************************************************
158 *** 函 數 名: extern void DS18B20_Init(void)
159 *** 功能描述: 器件DS18B20初始化;
160 *** 全局變量: NO !
161 *** 輸 入: NO !
162 *** 輸 出: NO !
163 *** 創 建 人:huangtiexiong 日期:2006-11-28
164 *** 修 改 人: 日期:2006-11-28
165 *** 函數說明:
166 /******************************************************************************/
167 extern void DS18B20_Init(void)
168 {
169 1 OneWire_Init();
170 1 }
171 /*******************************************************************************
172 *** 函 數 名: extern void DS18B20_RomCmd(int8u romCmd)
173 *** 功能描述: DS18B20Rom操作命令寫;
174 *** 全局變量: NO !
175 *** 輸 入: romCmd;
176 *** 輸 出: NO !
177 *** 創 建 人:huangtiexiong 日期:2006-11-28
178 *** 修 改 人: 日期:2006-11-28
179 *** 函數說明: 0x33:Read Rom; 0x55:Match Rom; 0xcc:Skip rom; 0xf0: Search rom;
C51 COMPILER V8.02 ONE_WIRE 01/17/2007 08:38:52 PAGE 4
180 0xec:Alarm Search.
181 /******************************************************************************/
182 extern void DS18B20_RomCmd(int8u romCmd) //僅寫了SkipRom例程;
183 {
184 1 switch(romCmd)
185 1 {
186 2 case 0xcc: //Skip Rom command;
187 2 OneWire_WriteByte(0xcc);
188 2 break;
189 2
190 2 default:
191 2 break;
192 2 }
193 1 }
194 /*******************************************************************************
195 *** 函 數 名: extern void DS18B20_MemCmd(int8u memCmd)
196 *** 功能描述: DS18B20Memory 操作命令;
197 *** 全局變量: NO !
198 *** 輸 入: NO !
199 *** 輸 出: NO !
200 *** 創 建 人:huangtiexiong 日期:2006-11-28
201 *** 修 改 人: 日期:2006-11-28
202 *** 函數說明: 僅寫了ConvertT(0x44) 和0xBE命令;
203 0x44:Convert T; 0xbe:Read Scratch-pad;
204 /******************************************************************************/
205 extern void DS18B20_MemCmd(int8u memCmd)
206 {
207 1 switch(memCmd)
208 1 {
209 2 case 0x44: //Start to Convert temperature;
210 2 OneWire_WriteByte(0x44);
211 2 NOP();
212 2 DS18B20_Busy();
213 2 Delay_Xms(250); //延時750ms;
214 2 Delay_Xms(250);
215 2 Delay_Xms(250);
216 2 break;
217 2
218 2 case 0xbe: //Read scratchpad;
219 2 OneWire_WriteByte(0xbe);
220 2 break;
221 2
222 2 default:
223 2 break;
224 2 }
225 1 }
226 /*******************************************************************************
227 *** 函 數 名: extern void DS18B20_ReadDat(int8u len,int8u *buf)
228 *** 功能描述: 讀取DS18B20內部的Scratchpad內容;
229 *** 全局變量: NO !
230 *** 輸 入: len:將要讀取的數據長度;
231 *** 輸 出: buf:數據緩存;
232 *** 創 建 人:huangtiexiong 日期:2006-11-28
233 *** 修 改 人: 日期:2006-11-28
234 *** 函數說明:
235 /******************************************************************************/
236 extern void DS18B20_ReadDat(int8u len,int8u *buf)
237 {
238 1 int8u i;
239 1 for(i=0;i<len;i++)
240 1 {
241 2 buf[i] = OneWire_ReadByte();
C51 COMPILER V8.02 ONE_WIRE 01/17/2007 08:38:52 PAGE 5
242 2 }
243 1 OneWire_Rst();
244 1 OneWire_Idle();
245 1 }
246 /*******************************************************************************
247 *** 函 數 名: extern void DS18B20_Busy(void)
248 *** 功能描述: 內部模數轉換中,忙
249 *** 全局變量: NO !
250 *** 輸 入: NO !
251 *** 輸 出: NO !
252 *** 創 建 人:huangtiexiong 日期:2006-11-28
253 *** 修 改 人: 日期:2006-11-28
254 *** 函數說明:
255 /******************************************************************************/
256 extern void DS18B20_Busy(void)
257 {
258 1 OneWire_Idle();
259 1 }
260
261
262 /*******************************************************************************
263 **** End Of File
264 *******************************************************************************/
C51 COMPILER V8.02 ONE_WIRE 01/17/2007 08:38:52 PAGE 6
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION OneWire_Init (BEGIN)
; SOURCE LINE # 38
; SOURCE LINE # 39
; SOURCE LINE # 40
0000 D297 SETB DQ
; SOURCE LINE # 41
0002 00 NOP
0003 00 NOP
; SOURCE LINE # 42
0004 C297 CLR DQ
; SOURCE LINE # 43
0006 7F7D MOV R7,#07DH
0008 120000 E LCALL _Delay_Xus
; SOURCE LINE # 44
000B 7F7D MOV R7,#07DH
000D 120000 E LCALL _Delay_Xus
; SOURCE LINE # 46
0010 D297 SETB DQ
; SOURCE LINE # 47
0012 7F0F MOV R7,#0FH
0014 120000 E LCALL _Delay_Xus
0017 ?C0001:
; SOURCE LINE # 49
0017 309704 JNB DQ,?C0002
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -