📄 ds18b20sj.lst
字号:
C51 COMPILER V7.06 DS18B20SJ 01/14/2008 19:37:10 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS18B20SJ
OBJECT MODULE PLACED IN ds18b20sj.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ds18b20sj.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-------------------------------------------------------------------------------------
2 //函数声明,变量定义
3 //DS18B20好用程序 条件:11.0592晶振 TMDA 上拉4.7K电阻
4 //-------------------------------------------------------------------------------------
5 #include<at89x51.h>
6
7 #define uchar unsigned char
8 #define uint unsigned int
9
10 sbit TMDAT=P2^0;
11 sbit test=P2^7;
12 sbit alarm=P1^6;
13 uchar temh,teml;
14 //-------------------------------------------------------------------------------------
15 //函数名称:dmsec
16 //入口参数:count
17 //函数功能:延时子程序
18 //-------------------------------------------------------------------------------------
19 void dmsec(uint count)
20 {
21 1 uint i;
22 1
23 1 while(count--)
24 1 {
25 2 for(i=0;i<125;i++){}
26 2 }
27 1 }
28
29 //-------------------------------------------------------------------------------------
30 //函数名称:tmreset
31 //入口参数:无
32 //函数功能:
33 //-------------------------------------------------------------------------------------
34 void tmreset(void)
35 {
36 1 uint i;
37 1
38 1 TMDAT=0;
39 1 i=103;while(i>0) i--; //大约900us
40 1 TMDAT=1;
41 1 i=4;while(i>0) i--;
42 1 }
43 //-------------------------------------------------------------------------------------
44 //函数名称:tmpre
45 //入口参数:无
46 //函数功能:等待DS18B20应答
47 //-------------------------------------------------------------------------------------
48 void tmpre(void)
49 {
50 1 uint i;
51 1
52 1 while(TMDAT);
53 1 while(~TMDAT);
54 1 i=4;while(i>0) i--;//test=0;
55 1 }
C51 COMPILER V7.06 DS18B20SJ 01/14/2008 19:37:10 PAGE 2
56 //-------------------------------------------------------------------------------------
57 //函数名称:tmrbit
58 //入口参数:无
59 //返回值: dat
60 //函数功能:在总线上读一位
61 //-------------------------------------------------------------------------------------
62 bit tmrbit(void)
63 {
64 1 uint i;
65 1 bit dat;
66 1
67 1 TMDAT=0;i++;
68 1 TMDAT=1;i++;i++;
69 1 dat=TMDAT;
70 1 i=8;while(i>0) i--;
71 1 return(dat);
72 1 }
73 //-------------------------------------------------------------------------------------
74 //函数名称:tmrbyte
75 //入口参数:无
76 //返回值: dat
77 //函数功能:读一个字节
78 //-------------------------------------------------------------------------------------
79 uchar tmrbyte(void)
80 {
81 1 uchar i,j,dat;
82 1 dat=0;
83 1
84 1 for(i=1;i<=8;i++)
85 1 {
86 2 j=tmrbit();
87 2 dat=(j<<7)|(dat>>1);
88 2 }
89 1 return(dat);
90 1 }
91 //-------------------------------------------------------------------------------------
92 //函数名称:tmwbyte
93 //入口参数:dat
94 //函数功能:写命令
95 //-------------------------------------------------------------------------------------
96 void tmwbyte(uchar dat)
97 {
98 1 uint i;
99 1 uchar j;
100 1 bit testb;
101 1
102 1 for(j=1;j<=8;j++)
103 1 {
104 2 testb=dat&0x01;
105 2 dat=dat>>1;
106 2
107 2 if(testb)
108 2 {
109 3 TMDAT=0; //写1
110 3 i++;i++;
111 3 TMDAT=1;
112 3 i=8;while(i>0) i--;
113 3 }
114 2 else
115 2 {
116 3 TMDAT=0; //写0
117 3 i=8;while(i>0) i--;
C51 COMPILER V7.06 DS18B20SJ 01/14/2008 19:37:10 PAGE 3
118 3 TMDAT=1;
119 3 i++;i++;
120 3 }
121 2 }
122 1 }
123 //-------------------------------------------------------------------------------------
124 //函数名称:tmstart
125 //入口参数:无
126 //函数功能:开始转换
127 //-------------------------------------------------------------------------------------
128 void tmstart(void)
129 {
130 1 tmreset();
131 1 tmpre();
132 1 //test=0;
133 1 dmsec(1);
134 1 tmwbyte(0xcc);
135 1 tmwbyte(0x44);
136 1
137 1 }
138 //-------------------------------------------------------------------------------------
139 //函数名称:tmrbyte
140 //入口参数:无
141 //函数功能:读取温度值
142 //-------------------------------------------------------------------------------------
143 uchar tmrtemp(void)
144 {
145 1 // uchar y1,y2,y3;
146 1 // float temp;
147 1 tmreset();
148 1 tmpre();
149 1 dmsec(1);
150 1 tmwbyte(0xcc);
151 1 tmwbyte(0xbe);
152 1 teml=tmrbyte();
153 1 temh=tmrbyte();
154 1
155 1 /*y1=a>>4;
156 1 y2=b<<4;
157 1
158 1 y3=y1|y2;
159 1 temp=0.0625*16*y3;
160 1 y3=temp;
161 1 return(y3);*/
162 1 }
*** WARNING C173 IN LINE 162 OF DS18B20SJ.C: missing return-expression
163 /*********************************************************************
164 *功能:延时子程序
165 *说明:形参Delayms=5000,时间延长大约为1s
166 *********************************************************************/
167 void Delay(uint Delayms)
168 {
169 1 uchar j;
170 1 uint i;
171 1
172 1 for(i=0;i<Delayms;i++)
173 1 for(j=0;j<255;j++);
174 1
175 1 }
176 //-------------------------------------------------
177 char sendData(char c)
178 {
C51 COMPILER V7.06 DS18B20SJ 01/14/2008 19:37:10 PAGE 4
179 1 while (!TI);
180 1 TI = 0;
181 1 return (SBUF = c);
182 1 }
183 //-------------------------------------------------
184 void init(void)
185 {
186 1 TMOD=0x20;//mode 2 auto reload
187 1 TL1=0xfd;
188 1 TH1=0xfd;//baudRate:9600
189 1
190 1 SCON=0x53; //sm0,sm1,sm2,ren,tb,rb8,ti,ri
191 1 PCON&=0x7f;//smod=0;
192 1 TR1=1;//timer1 reset
193 1 }
194 //-------------------------------------------------------------------------------------
195 //函数名称:main
196 //函数功能:主函数
197 //-------------------------------------------------------------------------------------
198 void main()
199 {
200 1 uchar a,b,c;
201 1 signed char cc;
202 1 unsigned long tem;
203 1 init();
204 1 while(1)
205 1 {
206 2 tmstart();//启动转换
207 2 dmsec(20);//延时
208 2
209 2
210 2 tmrtemp();//读取
211 2 /* c=teml>>4|temh<<4;
212 2 a=c/10+48;
213 2 b=c%10+48;
214 2 // sendData(0xce);
215 2 // sendData(0xc2);
216 2 // sendData(0xb6);
217 2 // sendData(0xc8);
218 2 // sendData(0xa1);
219 2 // sendData(0xc3);
220 2 sendData(a);
221 2 sendData(b);
222 2 c=teml&0x0f;
223 2 tem=c*625;
224 2 a=(uchar)(c/1000)+48;
225 2 b=(uchar)((c%1000)/100)+48;
226 2 sendData(a);
227 2 sendData(b);
228 2 */
229 2 c=teml>>4|temh<<4;
230 2 a=c/10+48;
231 2 b=c%10+48;
232 2 sendData(a);
233 2 sendData(b);
234 2 tem=(teml&0x0f)*625;
235 2 a=tem/1000+48;
236 2 b=(tem/100)%10+48;
237 2 sendData(a);
238 2 sendData(b);
239 2 TI=0;
240 2 cc=SBUF;
C51 COMPILER V7.06 DS18B20SJ 01/14/2008 19:37:10 PAGE 5
241 2 RI=0;
242 2 if(cc=='o') alarm=0;
243 2 else if (cc=='p') alarm=1;
244 2 else alarm=1;
245 2 } }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 466 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 5
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -