📄 ds18b20.lst
字号:
C51 COMPILER V8.08 DS18B20 02/14/2009 15:37:26 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 ROM(SMALL) 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 /*******************文件包含**********************/
29 #include <MAIN.H>
30
31 /*****************外部变量声明********************/
32 extern uchar flag;
33 extern uchar Temp[2];//原始温度数据
34 extern uchar DispLED[4];//数码管显示缓冲区
35
36 /*******************变量声明**********************/
37 uchar Temperature;
38 sbit dq=P3^7;//定义DS18B20数据引脚
39
40 /**************************微秒级延时*********************/
41 void TempDelay (uchar us)
42 {
43 1 while(us--);
44 1 }
45
46 /*****************18B20初始化函数***********************/
47 void Init18b20 ()
48 {
49 1 dq=1;
50 1 _nop_();
51 1 dq=0;
52 1 TempDelay(86/2); //delay 530 uS//80
53 1 _nop_();
54 1 dq=1;
55 1 TempDelay(14/2); //delay 100 uS//14
C51 COMPILER V8.08 DS18B20 02/14/2009 15:37:26 PAGE 2
56 1 _nop_();
57 1 _nop_();
58 1 _nop_();
59 1
60 1 if(dq==0)
61 1 flag = 1; //detect 1820 success!
62 1 else
63 1 flag = 0; //detect 1820 fail!
64 1 TempDelay(20/2); //20
65 1 _nop_();
66 1 _nop_();
67 1 dq = 1;
68 1 }
69
70 /**************************向18B20写入一个字节******************/
71 void WriteByte (uchar wr) //单字节写入
72 {
73 1 uchar i;
74 1 for (i=0;i<8;i++)
75 1 {
76 2 dq = 0;
77 2 _nop_();
78 2 dq=wr&0x01;
79 2 TempDelay(5/2); //delay 45 uS //5
80 2 _nop_();
81 2 _nop_();
82 2 dq=1;
83 2 wr >>= 1;
84 2 }
85 1 }
86
87 /*************************读18B20的一个字节***********************/
88 uchar ReadByte() //读取单字节
89 {
90 1 uchar i;
91 1 uchar u=0;
92 1 for(i=0;i<8;i++)
93 1 {
94 2 dq = 0;
95 2 u >>= 1;
96 2 dq = 1;
97 2 if(dq==1)
98 2 u |= 0x80;
99 2 TempDelay (4/2);
100 2 _nop_();
101 2 }
102 1 return(u);
103 1 }
104
105 /**********************延时函数****************************/
106 void mDelay(uint num)
107 {
108 1 uint i;
109 1 for(;num>0;num--)
110 1 { for(i=0;i<124;i++)
111 2 {;}
112 2 }
113 1 }
114
115 /********************温度转换全处理********************/
116 void Temperature_change(void)
117 {
C51 COMPILER V8.08 DS18B20 02/14/2009 15:37:26 PAGE 3
118 1 Init18b20 ();//初始化18B20
119 1 WriteByte(0xcc); //跳过ROM
120 1 WriteByte(0x44); //启动温度转换
121 1 mDelay(50);//重要延时
122 1 Init18b20 ();
123 1 WriteByte(0xcc); //跳过ROM
124 1 WriteByte(0xbe); //读取温度
125 1 Temp[0]=ReadByte();//温度低8位
126 1 Temp[1]=ReadByte();//温度高8位
127 1 if(Temp[1]<0xF0)//温度大于0度
128 1 {
129 2 DispLED[3]=(Temp[0]&0x0F)*625/1000%10;//小数
130 2 Temperature=(Temp[0]>>4)+(Temp[1]<<4);
131 2 DispLED[2]=Temperature%10;//个位
132 2 DispLED[1]=Temperature/10;//十位
133 2 DispLED[0]=Temperature/100;//
134 2 }
135 1 else//温度小于0度
136 1 {
137 2 Temp[0]=~Temp[0]+1;
138 2 Temp[1]=~Temp[1];
139 2 DispLED[3]=(Temp[0]&0x0F)*625/1000%10;//小数
140 2 Temperature=(Temp[0]>>4)+(Temp[1]<<4);
141 2 DispLED[2]=Temperature%10;//个位
142 2 DispLED[1]=Temperature/10;//十位
143 2 DispLED[0]=Temperature/100+10;//百位+负号
144 2 }
145 1 }
146 void init_1820(void)
147 {
148 1 Init18b20 ();//初始化18B20
149 1 if(flag==0)//效验错误
150 1 {
151 2 DispLED[0]=12;//字母F
152 2 DispLED[1]=13;//字母A
153 2 DispLED[2]=14;//字母L
154 2 DispLED[3]=14;//字母L
155 2 }
156 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 312 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -