📄 ds18b20.lst
字号:
C51 COMPILER V8.08 DS18B20 02/14/2009 14:56:13 PAGE 1
C51 COMPILER V8.08, 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 ;便携式温度计
3 ;数码管引脚连接:a=P1.2 b=P1.1 c=P1.0 d=P1.3 e=P1.4 f=P1.6 g=P1.5 h=P1.7共阳;
4 ;编写人:芦庆
5 ;时间:2008年7月27日
6 ;主控芯片:AT89C2051-24PU
7 ;温度传感器:DS18B20
8 ;占用资源:定时器0,P1口,P3.3,P3.4,P3.5
9 ;晶振速度:6MHz
10 ;版本:1.0
11 ;
12 ;ROM指令 代码
13 ;Read ROM(读ROM) [33H]
14 ;Match ROM(匹配ROM) [55H]
15 ;Skip ROM(跳过ROM] [CCH]
16 ;Search ROM(搜索ROM) [F0H]
17 ;Alarm search(告警搜索) [ECH]
18 ;
19 ;存储器操作指令 代码
20 ;Write Scratchpad(写暂存存储器) [4EH]
21 ;Read Scratchpad(读暂存存储器) [BEH]
22 ;Copy Scratchpad(复制暂存存储器) [48H]
23 ;Convert Temperature(温度变换) [44H]
24 ;Recall EPROM(重新调出) [B8H]
25 ;Read Power supply(读电源) [B4H]
26 ;
27 ************************************************************************/
28 #include "CONFIG.H"
29 uint8 Temperature;
30 extern uint8 flag;
31 extern uint8 Temp[2];//原始温度数据
32 extern uint8 DispLED[4];//数码管显示缓冲区
33 sbit dq=P3^7;//定义DS18B20数据引脚
34 /**************************微秒级延时*********************/
35 void TempDelay (uint8 us)
36 {
37 1 while(us--);
38 1 }
39
40 /*****************18B20初始化函数***********************/
41 void Init18b20 ()
42 {
43 1 dq=1;
44 1 _nop_();
45 1 dq=0;
46 1 TempDelay(86/2); //delay 530 uS//80
47 1 _nop_();
48 1 dq=1;
49 1 TempDelay(14/2); //delay 100 uS//14
50 1 _nop_();
51 1 _nop_();
52 1 _nop_();
53 1
54 1 if(dq==0)
55 1 flag = 1; //detect 1820 success!
C51 COMPILER V8.08 DS18B20 02/14/2009 14:56:13 PAGE 2
56 1 else
57 1 flag = 0; //detect 1820 fail!
58 1 TempDelay(20/2); //20
59 1 _nop_();
60 1 _nop_();
61 1 dq = 1;
62 1 }
63
64 /**************************向18B20写入一个字节******************/
65 void WriteByte (int8 wr) //单字节写入
66 {
67 1 uint8 i;
68 1 for (i=0;i<8;i++)
69 1 {
70 2 dq = 0;
71 2 _nop_();
72 2 dq=wr&0x01;
73 2 TempDelay(5/2); //delay 45 uS //5
74 2 _nop_();
75 2 _nop_();
76 2 dq=1;
77 2 wr >>= 1;
78 2 }
79 1 }
80
81 /*************************读18B20的一个字节***********************/
82 uint8 ReadByte() //读取单字节
83 {
84 1 uint8 i;
85 1 uint8 u=0;
86 1 for(i=0;i<8;i++)
87 1 {
88 2 dq = 0;
89 2 u >>= 1;
90 2 dq = 1;
91 2 if(dq==1)
92 2 u |= 0x80;
93 2 TempDelay (4/2);
94 2 _nop_();
95 2 }
96 1 return(u);
97 1 }
98
99 /**********************延时函数****************************/
100 void mDelay(uint16 num)
101 {
102 1 uint16 i;
103 1 for(;num>0;num--)
104 1 { for(i=0;i<124;i++)
105 2 {;}
106 2 }
107 1 }
108 /*****************消除初始显示的“85”********************/
109 void TT0(void)
110 {
111 1 uint8 pmet;
112 1 Init18b20 ();//初始化18B20
113 1 WriteByte(0xcc); //跳过ROM
114 1 WriteByte(0x44); //启动温度转换
115 1 mDelay(100);//关键延时
116 1 Init18b20 ();
117 1 WriteByte(0xcc); //跳过ROM
C51 COMPILER V8.08 DS18B20 02/14/2009 14:56:13 PAGE 3
118 1 WriteByte(0xbe); //读取温度
119 1 pmet=ReadByte();//温度低8位
120 1 pmet=ReadByte();//温度高8位
121 1 }
122
123 /********************温度转换全处理********************/
124 void Temperature_all(void)
125 {
126 1 static uint8 TT=0;//温度转换分段进行
127 1 if(TT==0)
128 1 {
129 2 Init18b20 ();//初始化18B20
130 2 WriteByte(0xcc); //跳过ROM
131 2 WriteByte(0x44); //启动温度转换
132 2 TT=1;
133 2 }
134 1 else if(TT==1)
135 1 {
136 2 Init18b20 ();
137 2 WriteByte(0xcc); //跳过ROM
138 2 WriteByte(0xbe); //读取温度
139 2 Temp[0]=ReadByte();//温度低8位
140 2 Temp[1]=ReadByte();//温度高8位
141 2 if(Temp[1]<0xF0)//温度大于0度
142 2 {
143 3 DispLED[3]=(Temp[0]&0x0F)*625/1000%10;//小数
144 3 Temperature=(Temp[0]>>4)+(Temp[1]<<4);
145 3 DispLED[2]=Temperature%10;//个位
146 3 DispLED[1]=Temperature/10;//十位
147 3 DispLED[0]=Temperature/100;//
148 3 }
149 2 else//温度小于0度
150 2 {
151 3 Temp[0]=~Temp[0]+1;
152 3 Temp[1]=~Temp[1];
153 3 DispLED[3]=(Temp[0]&0x0F)*625/1000%10;//小数
154 3 Temperature=(Temp[0]>>4)+(Temp[1]<<4);
155 3 DispLED[2]=Temperature%10;//个位
156 3 DispLED[1]=Temperature/10;//十位
157 3 DispLED[0]=Temperature/100+10;//百位+负号
158 3 }
159 2 TT=0;
160 2 }
161 1 }
162 void init_1820(void)
163 {
164 1 Init18b20 ();//初始化18B20
165 1 if(flag==0)//效验错误
166 1 {
167 2 DispLED[0]=12;//字母F
168 2 DispLED[1]=13;//字母A
169 2 DispLED[2]=14;//字母L
170 2 DispLED[3]=14;//字母L
171 2 }
172 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 391 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V8.08 DS18B20 02/14/2009 14:56:13 PAGE 4
DATA SIZE = 2 ----
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 + -