📄 ds18b20.lst
字号:
C51 COMPILER V7.06 DS18B20 07/30/2007 12:05:35 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN ds18b20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds18b20.c BROWSE DEBUG OBJECTEXTEND
stmt level source
*** WARNING C500 IN LINE 1 OF DS18B20.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
1 #include <reg51.h>
2 #include "intrins.h"
3 unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
4 0xef,0xdf,0xbf,0x7f};
5 unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f, //显示码值
6 0x66,0x6d,0x7d,0x07,
7 0x7f,0x6f,0x77,0x7c,
8 0x39,0x5e,0x79,0x71,0x00,0x40};
9 unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
10 25,28,31,34,38,41,44,48,
11 50,53,56,59,63,66,69,72,
12 75,78,81,84,88,91,94,97};
13 unsigned char displaycount;
14 unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
15 unsigned char timecount;
16 unsigned char readdata[8];
17 sbit DQ=P3^7;
18 bit sflag;
19 bit resetpulse(void) //复位子程序
20 {
21 1 unsigned char i;
22 1 DQ=0;
23 1 for(i=255;i>0;i--);
24 1 DQ=1;
25 1 for(i=60;i>0;i--);
26 1 return(DQ);
27 1 for(i=200;i>0;i--);
28 1 }
29 void writecommandtods18b20(unsigned char command) //写ds18b20的命令控制字
30 {
31 1 unsigned char i;
32 1 unsigned char j;
33 1 for(i=0;i<8;i++)
34 1 {
35 2 if((command & 0x01)==0)
36 2 {
37 3 DQ=0; //写0
38 3 for(j=35;j>0;j--);
39 3 DQ=1;
40 3 }
41 2 else
42 2 {
43 3 DQ=0;
44 3 for(j=2;j>0;j--); //写1
45 3 DQ=1;
46 3 for(j=33;j>0;j--);
47 3 }
48 2 command=_cror_(command,1); //command的值循环右移一位
49 2 }
50 1 }
51
52
53 unsigned char readdatafromds18b20(void)
54 {
C51 COMPILER V7.06 DS18B20 07/30/2007 12:05:35 PAGE 2
55 1 unsigned char i;
56 1 unsigned char j;
57 1 unsigned char temp;
58 1 temp=0;
59 1 for(i=0;i<8;i++)
60 1 {
61 2 temp=_cror_(temp,1); //将读入的一位值右移一位;因为ds18b20传数值时是低位在前
62 2 DQ=0;
63 2 _nop_();
64 2 _nop_();
65 2 DQ=1;
66 2 for(j=10;j>0;j--);
67 2 if(DQ==1)
68 2 {
69 3 temp=temp | 0x80; //读入1
70 3 }
71 2 else
72 2 {
73 3 temp=temp | 0x00; //读入0
74 3 }
75 2 for(j=200;j>0;j--);
76 2 }
77 1 return(temp);
78 1 }
79
80
81 void main(void)
82 {
83 1 TMOD=0x01;
84 1 TH0=(65536-4000)/256; //定时4ms
85 1 TL0=(65536-4000)%6;
86 1 ET0=1;
87 1 EA=1;
88 1 while(resetpulse());
89 1 writecommandtods18b20(0xcc); //跳跃ROM命令,同时访问总路线上所有的从机设备
90 1 writecommandtods18b20(0x44); //启动温度转换命令
91 1 TR0=1;
92 1 while(1)
93 1 {
94 2 ;
95 2 }
96 1 }
97
98
99 void t0(void) interrupt 1 using 0
100 {
101 1 unsigned char x;
102 1 unsigned int result;
103 1 TH0=(65536-4000)/256;
104 1 TL0=(65536-4000)%6;
105 1 if(displaycount==2)
106 1 {
107 2 P0=displaycode[displaybuf[displaycount]] | 0x80;
108 2 }
109 1 else
110 1 {
111 2 P0=displaycode[displaybuf[displaycount]];
112 2 }
113 1 P2=displaybit[displaycount];
114 1 displaycount++;
115 1 if(displaycount==8)
116 1 {
C51 COMPILER V7.06 DS18B20 07/30/2007 12:05:35 PAGE 3
117 2 displaycount=0;
118 2 }
119 1
120 1 timecount++;
121 1 if(timecount==150)
122 1 {
123 2 timecount=0;
124 2 while(resetpulse());
125 2 writecommandtods18b20(0xcc);
126 2 writecommandtods18b20(0xbe); //写CCH后写BEH应用于单节点系统
127 2 readdata[0]=readdatafromds18b20();
128 2 readdata[1]=readdatafromds18b20();
129 2 for(x=0;x<8;x++)
130 2 {
131 3 displaybuf[x]=16;
132 3 }
133 2 sflag=0;
134 2 if((readdata[1] & 0xf8)!=0x00)
135 2 {
136 3 sflag=1;
137 3 readdata[1]=~readdata[1];
138 3 readdata[0]=~readdata[0];
139 3 result=readdata[0]+1;
140 3 readdata[0]=result;
141 3 if(result>255)
142 3 {
143 4 readdata[1]++;
144 4 }
145 3 }
146 2 readdata[1]=readdata[1]<<4;
147 2 readdata[1]=readdata[1] & 0x70;
148 2 x=readdata[0];
149 2 x=x>>4;
150 2 x=x & 0x0f;
151 2 readdata[1]=readdata[1] | x;
152 2 x=2;
153 2 result=readdata[1];
154 2 while(result/10)
155 2 {
156 3 displaybuf[x]=result;
157 3 result=result/10;
158 3 x++;
159 3 }
160 2 displaybuf[x]=result;
161 2 if(sflag==1)
162 2 {
163 3 displaybuf[x+1]=17;
164 3 }
165 2 x=readdata[0] & 0x0f;
166 2 x=x<<1;
167 2 displaybuf[0]=(dotcode[x]);
168 2 displaybuf[1]=(dotcode[x])/10;
169 2 while(resetpulse());
170 2 writecommandtods18b20(0xcc);
171 2 writecommandtods18b20(0x44);
172 2 }
173 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 400 ----
CONSTANT SIZE = 58 ----
C51 COMPILER V7.06 DS18B20 07/30/2007 12:05:35 PAGE 4
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 18 2
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -