?? 溫度采集ds18b20.lst
字號:
C51 COMPILER V7.50 溫度采集DS18B20 04/09/2009 21:39:29 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 溫度采集DS18B20
OBJECT MODULE PLACED IN 溫度采集DS18B20.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 溫度采集DS18B20.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 * 文件名 : 溫度采集DS18B20.c
3 * 描述 : 該文件實現了用溫度傳感器件DS18B20對溫度的采集,并在數碼管上
4 顯示出來。
5 * 創建人 : 東流,2009年4月9日
6 * 版本號 : 2.0
7 * 技術支持論壇:www.zidh.com/bbs(請進入“贊助商板塊”中的“東流電子工作室”)
8 * 感謝“中國自動化資訊網”對本工作室的大力支持。
9 ***********************************************************************/
10 #include<reg52.h>
11 #define uchar unsigned char
12 #define uint unsigned int
13
14 #define jump_ROM 0xCC
15 #define start 0x44
16 #define read_EEROM 0xBE
17
18 sbit DQ = P3^4; //DS18B20數據口
19
20 unsigned char TMPH,TMPL;
21 unsigned char code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
22
23 /********************************************************************
24 * 名稱 : delay()
25 * 功能 : 延時函數
26 * 輸入 : 無
27 * 輸出 : 無
28 ***********************************************************************/
29 void delay(uint N)
30 {
31 1 int i;
32 1 for(i=0; i<N; i++)
33 1 ;
34 1 }
35
36 /********************************************************************
37 * 名稱 : Reset()
38 * 功能 : 復位DS18B20
39 * 輸入 : 無
40 * 輸出 : 無
41 ***********************************************************************/
42 uchar Reset(void)
43 {
44 1 uchar deceive_ready;
45 1 DQ = 0;
46 1 delay(29);
47 1 DQ = 1;
48 1 delay(3);
49 1 deceive_ready = DQ;
50 1 delay(25);
51 1 return(deceive_ready);
52 1 }
53
54 /********************************************************************
55 * 名稱 : read_bit()
C51 COMPILER V7.50 溫度采集DS18B20 04/09/2009 21:39:29 PAGE 2
56 * 功能 : 從DS18B20讀一個位值
57 * 輸入 : 無
58 * 輸出 : 從DS18B20讀出的一個位值
59 ***********************************************************************/
60 uchar read_bit(void)
61 {
62 1 uchar i;
63 1 DQ = 0;
64 1 DQ = 1;
65 1 for(i=0; i<3; i++);
66 1 return(DQ);
67 1 }
68
69 /********************************************************************
70 * 名稱 : write_bit()
71 * 功能 : 向DS18B20寫一位
72 * 輸入 : bitval(要對DS18B20寫入的位值)
73 * 輸出 : 無
74 ***********************************************************************/
75 void write_bit(uchar bitval)
76 {
77 1 DQ=0;if(bitval==1)
78 1 DQ=1;
79 1 delay(5);
80 1 DQ=1;
81 1 }
82
83 /********************************************************************
84 * 名稱 : read_byte()
85 * 功能 : 從DS18B20讀一個字節
86 * 輸入 : 無
87 * 輸出 : 從DS18B20讀到的值
88 ***********************************************************************/
89 uchar read_byte(void)
90 {
91 1 uchar i,m,receive_data;
92 1 m = 1;
93 1 receive_data = 0;
94 1 for(i=0; i<8; i++)
95 1 {
96 2 if(read_bit())
97 2 {
98 3 receive_data = receive_data + (m << i);
99 3 }
100 2 delay(6);
101 2 }
102 1 return(receive_data);
103 1 }
104
105 /********************************************************************
106 * 名稱 : write_byte()
107 * 功能 : 向DS18B20寫一個字節
108 * 輸入 : val(要對DS18B20寫入的命令值)
109 * 輸出 : 無
110 ***********************************************************************/
111 void write_byte(uchar val)
112 {
113 1 uchar i,temp;
114 1 for(i=0; i<8; i++)
115 1 {
116 2 temp = val >> i;
117 2 temp = temp & 0x01;
C51 COMPILER V7.50 溫度采集DS18B20 04/09/2009 21:39:29 PAGE 3
118 2 write_bit(temp);
119 2 delay(5);
120 2 }
121 1 }
122
123 /********************************************************************
124 * 名稱 : display()
125 * 功能 : 數碼管顯示溫度值
126 * 輸入 : 溫度值
127 * 輸出 : 無
128 ***********************************************************************/
129 void display(uint tem)
130 {
131 1 uchar j;
132 1 for(j=50; j>0; j--)
133 1 {
134 2 P0 = table[tem / 100];
135 2 P2 = 0x04;
136 2 delay(500);
137 2 P0 = table[tem / 10 % 10];
138 2 P2 = 0x02;
139 2 delay(500);
140 2 P0 = table[tem % 10];
141 2 P2 = 0x01;
142 2 delay(500);
143 2 }
144 1 }
145
146 /********************************************************************
147 * 名稱 : Main()
148 * 功能 : 主函數
149 * 輸入 : 無
150 * 輸出 : 無
151 ***********************************************************************/
152 void main()
153 {
154 1 uint temp;
155 1 P2 = 0x00;
156 1 while(1)
157 1 {
158 2 Reset();
159 2 write_byte(jump_ROM);
160 2 write_byte(start);
161 2 Reset();
162 2 write_byte(jump_ROM);
163 2 write_byte(read_EEROM);
164 2 TMPL = read_byte();
165 2 TMPH = read_byte();
166 2 temp = TMPH;
167 2 temp <<= 8;
168 2 temp = temp | TMPL;
169 2 temp = TMPL / 16 + TMPH * 16;
170 2 display(temp);
171 2 }
172 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 350 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.50 溫度采集DS18B20 04/09/2009 21:39:29 PAGE 4
DATA SIZE = 2 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 + -