📄 one-wire.lst
字号:
C51 COMPILER V8.08 ONE_WIRE 07/29/2008 20:05:46 PAGE 1
C51 COMPILER V8.08, 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
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 #include <reg52.h>
14 #include <intrins.h>
15 #include <string.h>
16 #include "One-Wire.h"
17
18 #define int8u unsigned char
19
20 /*************************************************
21 模块级变量申明
22 *************************************************/
23 /* void OneWire_Rst(void);
24 void OneWire_Init(void);
25 void OneWire_WriteByte(int8u cmd);
26 int8u OneWire_ReadByte(void);
27 void OneWire_Idle(void); */
28
29 void Delay_Xus(int8u x) //x取值1~255;
30 {
31 1 while(--x);
32 1 // int8u i;
33 1 // x /= 8;
34 1 // for(i=0;i<x;i++);
35 1 }
36
37 void Delay_Xms(int8u x) //x取值1~255;
38 {
39 1 int8u i,j;
40 1 for(i=0;i<x;i++)
41 1 for(j=0;j<200;j++)
42 1 {
43 2 _nop_();
44 2 _nop_();
45 2 }
46 1 }
47
48 /*************************************************
49 子函数定义
50 *************************************************/
51
52 /*******************************************************************************
53 *** 函 数 名: void OneWire_Init(void)
54 *** 功能描述:
55 *** 全局变量:
C51 COMPILER V8.08 ONE_WIRE 07/29/2008 20:05:46 PAGE 2
56 *** 输 入: NO !
57 *** 输 出: NO !
58 *** 创 建 人:huangtiexiong 日期:2006-11-28
59 *** 修 改 人: 日期:2006-11-28
60 *** 函数说明: 单总线数据传输初始化;
61 /******************************************************************************/
62 void OneWire_Init(void)
63 {
64 1 DQ = 1;
65 1 _nop_();;
66 1 DQ = 0; //拉低数据线,准备Reset OneWire Bus;
67 1 Delay_Xus(125); //延时510us,Reset One-Wire Bus.
68 1 Delay_Xus(125);
69 1
70 1 DQ = 1; //提升数据线;
71 1 Delay_Xus(15); //延时35us;
72 1
73 1 while(DQ) //等待Slave 器件Ack 信号;
74 1 {
75 2 _nop_();;
76 2 }
77 1 Delay_Xus(60); //延时125us;
78 1 DQ = 1; //提升数据线,准备数据传输;
79 1 }
80 /*******************************************************************************
81 *** 函 数 名: void OneWire_Rst(void)
82 *** 功能描述:
83 *** 全局变量: No !
84 *** 输 入: NO !
85 *** 输 出: NO !
86 *** 创 建 人:huangtiexiong 日期:2006-11-28
87 *** 修 改 人: 日期:2006-11-28
88 *** 函数说明: 单总线Reset pulse;
89 /******************************************************************************/
90 void OneWire_Rst(void)
91 {
92 1 DQ = 0; //拉低数据线,准备Reset OneWire Bus;
93 1 Delay_Xus(125); //延时511us,Reset One-Wire Bus.
94 1 DQ = 0;
95 1 Delay_Xus(125);
96 1 }
97 /*******************************************************************************
98 *** 函 数 名: void OneWire_WriteByte(int8u cmd)
99 *** 功能描述: 写一个字节;
100 *** 全局变量: NO !
101 *** 输 入: cmd:8bit;
102 *** 输 出: NO !
103 *** 创 建 人:huangtiexiong 日期:2006-11-28
104 *** 修 改 人: 日期:2006-11-28
105 *** 函数说明: cmd主要有Rom操作指令和E2Ram操作指令两种;
106 /******************************************************************************/
107 void OneWire_WriteByte(int8u cmd)
108 {
109 1 int8u i;
110 1 for(i=0;i<8;i++)
111 1 {
112 2 if(cmd & 0x01) //低位在前;
113 2 {
114 3 DQ = 0; //结束Recovery time;
115 3 _nop_();;
116 3 _nop_();;
117 3 _nop_();;
C51 COMPILER V8.08 ONE_WIRE 07/29/2008 20:05:46 PAGE 3
118 3 DQ = 1; //发送数据;
119 3 }
120 2 else
121 2 {
122 3 DQ = 0; //结束Rec time;
123 3 _nop_();;
124 3 _nop_();;
125 3 _nop_();;
126 3 //DQ = 0; //发送数据;
127 3 }
128 2 Delay_Xus(30); //等待Slave Device采样;
129 2 DQ = 1; //Recovery;
130 2 _nop_();; //Recovery Time Start;
131 2 cmd >>= 1;
132 2 }
133 1 }
134 /*******************************************************************************
135 *** 函 数 名: int8u OneWire_ReadByte(void)
136 *** 功能描述: 读取一个字节;
137 *** 全局变量: NO !
138 *** 输 入: NO !
139 *** 输 出: 8bit data;
140 *** 创 建 人:huangtiexiong 日期:2006-11-28
141 *** 修 改 人: 日期:2006-11-28
142 *** 函数说明: 读之前必须首先写1;
143 /******************************************************************************/
144 int8u OneWire_ReadByte(void)
145 {
146 1 int8u i;
147 1 int8u tmp = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -