📄 ds18b20.lst
字号:
C51 COMPILER V7.09 DS18B20 10/24/2008 13:25:07 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN .\ds18b20.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\Keil\temperature_humidity_constant_system\ds18b20.c BROWSE DEBUG OBJECTE
-XTEND PRINT(.\ds18b20.lst) OBJECT(.\ds18b20.obj)
line level source
1 /*===========================================================================/
2 *文件名称:ds18b20.c
3 *功能描述:基于温度传感器DS18B20与单片机89C52的温度计
4 *Designer:陈柏华
5 *建立时间:2008.10.24
6 /===========================================================================*/
7
8 #include <reg52.h>
9 #include <intrins.h>
10 sbit DQ=P1^0;
11 #define jump_ROM 0xCC
12 #define start 0x44
13 #define read_EEPROM 0xBE
14 unsigned char TMPH,TMPL;
15 unsigned char discode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴0,1,2...9
16 unsigned char dotdiscode[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
17 /*============================================================================/
18 *函数名称:delay
19 *入口参数:N
20 *函数功能:延时子程序,实现(16*N+24)us的延时
21 系统采用了11.0592MHz的时钟时,延时满足要求,其他情况需要改动
22 /============================================================================*/
23 void delay(unsigned int N)
24 {
25 1 int i;
26 1 for(i=0;i<N;i++);
27 1 }
28 /*============================================================================/
29 *函数名称:reset
30 *入口参数:无;返回deceive_ready
31 *函数功能:复位
32 /============================================================================*/
33 unsigned char reset(void)
34 {
35 1 unsigned char deceive_ready;
36 1 DQ=0;
37 1 delay(29);
38 1 DQ=1;
39 1 delay(3);
40 1 deceive_ready=DQ;
41 1 delay(25);
42 1 return(deceive_ready);
43 1 }
44 /*==============================================================================/
45 *函数名称:read_bit
46 *入口参数:无;返回接收的数据
47 *函数功能:读1bit子程序
48 /==============================================================================*/
49 unsigned char read_bit(void)
50 {
51 1 unsigned char i;
52 1 DQ=0;
53 1 _nop_();
54 1 DQ=1;
C51 COMPILER V7.09 DS18B20 10/24/2008 13:25:07 PAGE 2
55 1 for(i=0;i<3;i++);
56 1 return(DQ);
57 1 }
58 /*================================================================================/
59 *函数名称:vrite_bit
60 *入口参数:bitval
61 *函数功能:写1bit子程序
62 /=================================================================================*/
63 void write_bit(unsigned char bitval)
64 {
65 1 DQ=0;
66 1 if(bitval==1)
67 1 DQ=1;
68 1 delay(5);
69 1 DQ=1;
70 1 }
71 /*===============================================================================/
72 *函数名称:write_byte
73 *入口参数:val
74 *函数功能:写1byte子程序
75 /================================================================================*/
76 void write_byte(unsigned char val)
77 {
78 1 unsigned char i,temp;
79 1 for(i=0;i<8;i++)
80 1 {
81 2 temp=val>>i;
82 2 temp=temp&0x01;
83 2 write_bit(temp);
84 2 delay(5);
85 2 }
86 1 }
87 /*=============================================================================/
88 *函数名称:read_byte
89 *入口参数:无
90 *返回值:接收的数据value
91 *函数功能:读一个byte子程序
92 /==============================================================================*/
93 unsigned char read_byte(void)
94 {
95 1 unsigned char i,m,receive_data;
96 1 receive_data=0;
97 1 for(i=0;i<8;i++)
98 1 {
99 2 m=read_bit();
100 2 receive_data=(m<<7)|(receive_data>>1);
101 2 delay(6);
102 2 }
103 1 return(receive_data);
104 1 }
105 /*==========================================================================/
106 *函数名称:getTemValue
107 *入口参数:无
108 *返回值:value
109 *函数功能:取得温度值
110 /==========================================================================*/
111 unsigned char getTemValue(void)
112 {
113 1 unsigned int value;
114 1 float t;
115 1 unsigned char high;
116 1 unsigned char low;
C51 COMPILER V7.09 DS18B20 10/24/2008 13:25:07 PAGE 3
117 1 reset();
118 1 write_byte(jump_ROM);
119 1 write_byte(start);
120 1 reset();
121 1 write_byte(jump_ROM);
122 1 write_byte(read_EEPROM);
123 1 TMPL=read_byte();
124 1 TMPH=read_byte();
125 1 value=high;
126 1 value<<=8;
127 1 value=value|low;
128 1 t=value*0.0625;
129 1 value=t*10+0.5;
130 1 return value;
131 1 }
132 /*===========================================================================/
133 *函数名称:display
134 *入口参数:温度值v
135 *功能描述:显示温度值
136 /==========================================================================*/
137 void display(unsigned int v)
138 {
139 1
140 1 unsigned datas[3];
141 1 datas[0]=v%100;
142 1 datas[1]=v%100/10;
143 1 datas[2]=v%10;
144 1 /* P0=discode[datas[0]];
145 1 P2=0xfe;
146 1 delay(61);
147 1 P0=dotdiscode[datas[1]];
148 1 P2=0xfd;
149 1 delay(61);
150 1 P0=discode[datas[2]];
151 1 P2=0xfb;
152 1 delay(61);*/
153 1 }
154 /*==========================================================================/
155 *函数名称:main
156 *入口参数:无
157 *函数功能:主函数
158 /=========================================================================*/
159 void main()
160 {
161 1 unsigned char i;
162 1 unsigned int value;
163 1 while(1)
164 1 {
165 2 value=getTemValue();
166 2 for(i=0;i<3;i++)
167 2 {
168 3 display(value);
169 3 }
170 2 }
171 1 }
172
173
174
175
176
177
178
C51 COMPILER V7.09 DS18B20 10/24/2008 13:25:07 PAGE 4
179
180
181
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 321 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 22 12
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 + -