📄 ds18b20.lst
字号:
C51 COMPILER V7.06 DS18B20 05/14/2007 22:03:39 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 LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //////////////////////////////////温度检测DS18B20////////////////////////////////////
2 //晶振由原来的11.059M变为32M
3 #include<at89x52.h>
4 #include<intrins.h>
5 #define uchar unsigned char
6 #define uint unsigned int
7
8 sbit TMPort=P3^4;
9 uchar TempH,TempL,TempInt,TempDec;
10
11 unsigned char code TemTab[16]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};
12
13 bit flag;
14 void TempDelay (uchar us)
15 {
16 1 while(us--);
17 1 }
18
19 void Init18b20 (void)
20 {
21 1 EA=0;
22 1 flag=0;
23 1 do
24 1 {
25 2 TMPort=1; //拉高数据线TMPort
26 2 _nop_(); _nop_(); _nop_();//保持一个周期
27 2 TMPort=0; //发送530us的低电平复位脉冲
28 2 TempDelay(154); //delay 530 uS
29 2 TMPort=1; //释放TMPort
30 2 TempDelay(29); //delay 100 uS
31 2
32 2 if(TMPort==0) //如果TMPort为低电平则复位成功
33 2 flag = 1; //detect 1820 success!
34 2 else
35 2 flag = 0; //detect 1820 fail!
36 2 TempDelay(34); //应答脉冲时间140us
37 2 TMPort = 1;
38 2 }
39 1 while(!flag);
40 1 EA=1;
41 1 }
42
43 uchar ReadByte (void) //读取单字节
44 {
45 1 uchar i,u=0;
46 1 EA=0;
47 1 for(i=0;i<8;i++)
48 1 {
49 2 TMPort = 0; //保持低电平1us以上
50 2 u >>= 1;
51 2 TMPort = 1; //释放总线
52 2 TempDelay (6); //在15us以后18B20输出才有效
53 2 if(TMPort==1)
54 2 u |= 0x80;
55 2 TempDelay (10); //读时候间隔
C51 COMPILER V7.06 DS18B20 05/14/2007 22:03:39 PAGE 2
56 2 EA=1;
57 2 }
58 1 return(u);
59 1 }
60
61 void WriteByte (uchar wr) //单字节写入
62 {
63 1 uchar i;
64 1 EA=0;
65 1 for (i=0;i<8;i++)
66 1 {
67 2 TMPort = 0;
68 2 _nop_();_nop_();_nop_();
69 2 TMPort=wr&0x01;
70 2 TempDelay(21); //delay 45 uS //5
71 2 TMPort=1;
72 2 wr >>= 1;
73 2 }
74 1 EA=1;
75 1 }
76 void convert(void) //启动温度检测
77 {
78 1 Init18b20();
79 1 WriteByte(0xCC);//跳过ROM
80 1 WriteByte(0x44);//温度转换
81 1 }
82
83 void readtemp(void)
84 {
85 1 Init18b20();
86 1 WriteByte(0xCC);//跳过ROM
87 1 WriteByte(0xbe);//读取温度
88 1 TempL=ReadByte();//温度低字节,(低4位为二进制的小数部分)
89 1 TempH=ReadByte();//温度高字节,(高5位为符合位)
90 1 }
91
92 void tempconform(void)
93 {
94 1 TempInt=(TempL>>4&0x0f)|(TempH<<4&0xf0);//整数部分
95 1 TempDec=TemTab[TempL&0x0f];
96 1 }
97
98 void TempDetect(void) //测量温度函数
99 {
100 1 convert();
101 1 readtemp();
102 1 tempconform();
103 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 209 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = 4 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -