?? 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 + -