📄 one-wire.lst
字号:
C51 COMPILER V8.02 ONE_WIRE 11/03/2010 22:45:22 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 TABS(3)
line level source
1
2
3 //#include "Includes.h" //文件包含
4 #include <reg52.h>
5 #include <intrins.h>
6 #include <string.h>
7 #include "One-Wire.h"
8
9 #define int8u unsigned char
10
11 /*************************************************
12 模块级变量申明
13 *************************************************/
14 /* void OneWire_Rst(void);
15 void OneWire_Init(void);
16 void OneWire_WriteByte(int8u cmd);
17 int8u OneWire_ReadByte(void);
18 void OneWire_Idle(void); */
19
20 void Delay_Xus(int8u x) //x取值1~255;
21 {
22 1 while(--x);
23 1 // int8u i;
24 1 // x /= 8;
25 1 // for(i=0;i<x;i++);
26 1 }
27
28 void Delay_Xms(int8u x) //x取值1~255;
29 {
30 1 int8u i,j;
31 1 for(i=0;i<x;i++)
32 1 for(j=0;j<200;j++)
33 1 {
34 2 _nop_();
35 2 _nop_();
36 2 }
37 1 }
38
39 /*************************************************
40 子函数定义
41 *************************************************/
42
43
44 void OneWire_Init(void)
45 {
46 1 DQ = 1;
47 1 _nop_();;
48 1 DQ = 0; //拉低数据线,准备Reset OneWire Bus;
49 1 Delay_Xus(125); //延时510us,Reset One-Wire Bus.
50 1 Delay_Xus(125);
51 1
52 1 DQ = 1; //提升数据线;
53 1 Delay_Xus(15); //延时35us;
54 1
55 1 while(DQ) //等待Slave 器件Ack 信号;
C51 COMPILER V8.02 ONE_WIRE 11/03/2010 22:45:22 PAGE 2
56 1 {
57 2 _nop_();;
58 2 }
59 1 Delay_Xus(60); //延时125us;
60 1 DQ = 1; //提升数据线,准备数据传输;
61 1 }
62
63 void OneWire_Rst(void)
64 {
65 1 DQ = 0; //拉低数据线,准备Reset OneWire Bus;
66 1 Delay_Xus(125); //延时511us,Reset One-Wire Bus.
67 1 DQ = 0;
68 1 Delay_Xus(125);
69 1 }
70 /*******************************************************************************
71 *** 函 数 名: void OneWire_WriteByte(int8u cmd)
72 *** 功能描述: 写一个字节;
73 *** 全局变量: NO !
74 *** 输 入: cmd:8bit;
75 *** 输 出: NO !
76 *** 函数说明: cmd主要有Rom操作指令和E2Ram操作指令两种;
77 /******************************************************************************/
78 void OneWire_WriteByte(int8u cmd)
79 {
80 1 int8u i;
81 1 for(i=0;i<8;i++)
82 1 {
83 2 if(cmd & 0x01) //低位在前;
84 2 {
85 3 DQ = 0; //结束Recovery time;
86 3 _nop_();;
87 3 _nop_();;
88 3 _nop_();;
89 3 DQ = 1; //发送数据;
90 3 }
91 2 else
92 2 {
93 3 DQ = 0; //结束Rec time;
94 3 _nop_();;
95 3 _nop_();;
96 3 _nop_();;
97 3 //DQ = 0; //发送数据;
98 3 }
99 2 Delay_Xus(30); //等待Slave Device采样;
100 2 DQ = 1; //Recovery;
101 2 _nop_();; //Recovery Time Start;
102 2 cmd >>= 1;
103 2 }
104 1 }
105 /*******************************************************************************
106 *** 函 数 名: int8u OneWire_ReadByte(void)
107 *** 功能描述: 读取一个字节;
108 *** 全局变量: NO !
109 *** 输 入: NO !
110 *** 输 出: 8bit data;
111 *** 函数说明: 读之前必须首先写1;
112 /******************************************************************************/
113 int8u OneWire_ReadByte(void)
114 {
115 1 int8u i;
116 1 int8u tmp = 0;
117 1 DQ = 1; //准备读;
C51 COMPILER V8.02 ONE_WIRE 11/03/2010 22:45:22 PAGE 3
118 1 _nop_();;
119 1 for(i=0;i<8;i++)
120 1 {
121 2 tmp >>= 1; //低位先发;
122 2 DQ = 0; //Read init;
123 2 _nop_(); //2ms;
124 2 DQ = 1; //必须写1,否则读出来的将是不预期的数据;
125 2 Delay_Xus(2); //延时9us;
126 2 _nop_();
127 2 if(DQ) //在12us处读取数据;
128 2 tmp |= 0x80;
129 2 Delay_Xus(30); //延时55us;
130 2 DQ = 1; //恢复One Wire Bus;
131 2 _nop_();;
132 2 }
133 1 return tmp;
134 1 }
135 /*******************************************************************************
136 *** 函 数 名: void OneWire_Idle(void)
137 *** 功能描述: 总线空闲模式;
138 *** 全局变量: NO !
139 *** 输 入: NO !
140 *** 输 出: NO !
141 *** 修 改 人: 日期:2006-11-28
142 *** 函数说明:
143 /******************************************************************************/
144 void OneWire_Idle(void)
145 {
146 1 DQ = 1;
147 1 _nop_();;
148 1 }
149 /*******************************************************************************
150 *** 函 数 名: void DS18B20_Init(void)
151 *** 功能描述: 器件DS18B20初始化;
152 *** 全局变量: NO !
153 *** 输 入: NO !
154 *** 输 出: NO !
155 *** 修 改 人: 日期:2006-11-28
156 *** 函数说明:
157 /******************************************************************************/
158 void DS18B20_Init(void)
159 {
160 1 OneWire_Init();
161 1 }
162 /*******************************************************************************
163 *** 函 数 名: void DS18B20_RomCmd(int8u romCmd)
164 *** 功能描述: DS18B20Rom操作命令写;
165 *** 全局变量: NO !
166 *** 输 入: romCmd;
167 *** 输 出: NO !
168
169 *** 函数说明: 0x33:Read Rom; 0x55:Match Rom; 0xcc:Skip rom; 0xf0: Search rom;
170 0xec:Alarm Search.
171 /******************************************************************************/
172 void DS18B20_RomCmd(int8u romCmd) //仅写了SkipRom例程;
173 {
174 1 switch(romCmd)
175 1 {
176 2 case 0xcc: //Skip Rom command;
177 2 OneWire_WriteByte(0xcc);
178 2 break;
179 2
C51 COMPILER V8.02 ONE_WIRE 11/03/2010 22:45:22 PAGE 4
180 2 default:
181 2 break;
182 2 }
183 1 }
184 /*******************************************************************************
185 *** 函 数 名: void DS18B20_MemCmd(int8u memCmd)
186 *** 功能描述: DS18B20Memory 操作命令;
187 *** 全局变量: NO !
188 *** 输 入: NO !
189 *** 输 出: NO !
190
191 *** 函数说明: 仅写了ConvertT(0x44) 和0xBE命令;
192 0x44:Convert T; 0xbe:Read Scratch-pad;
193 /******************************************************************************/
194 void DS18B20_MemCmd(int8u memCmd)
195 {
196 1 switch(memCmd)
197 1 {
198 2 case 0x44: //Start to Convert temperature;
199 2 OneWire_WriteByte(0x44);
200 2 _nop_();;
201 2 DS18B20_Busy();
202 2 Delay_Xms(250); //延时750ms;
203 2 Delay_Xms(250);
204 2 Delay_Xms(250);
205 2 break;
206 2
207 2 case 0xbe: //Read scratchpad;
208 2 OneWire_WriteByte(0xbe);
209 2 break;
210 2
211 2 default:
212 2 break;
213 2 }
214 1 }
215 /*******************************************************************************
216 *** 函 数 名: void DS18B20_ReadDat(int8u len,int8u *buf)
217 *** 功能描述: 读取DS18B20内部的Scratchpad内容;
218 *** 全局变量: NO !
219 *** 输 入: len:将要读取的数据长度;
220 *** 输 出: buf:数据缓存;
221 *
222 *** 函数说明:
223 /******************************************************************************/
224 void DS18B20_ReadDat(int8u len,int8u *buf)
225 {
226 1 int8u i;
227 1 for(i=0;i<len;i++)
228 1 {
229 2 buf[i] = OneWire_ReadByte();
230 2 }
231 1 OneWire_Rst();
232 1 OneWire_Idle();
233 1 }
234 /*******************************************************************************
235 *** 函 数 名: void DS18B20_Busy(void)
236 *** 功能描述: 内部模数转换中,忙
237 *** 全局变量: NO !
238 *** 输 入: NO !
239 *** 输 出: NO !
240
241 *** 函数说明:
C51 COMPILER V8.02 ONE_WIRE 11/03/2010 22:45:22 PAGE 5
242 /******************************************************************************/
243 void DS18B20_Busy(void)
244 {
245 1 OneWire_Idle();
246 1 }
247
248
249 /*******************************************************************************
250 **** End Of File
251 *******************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 252 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
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 + -