📄 ds18b20.lst
字号:
C51 COMPILER V8.02 DS18B20 12/05/2007 10:38:51 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <c8051f020.h>
2 #include <intrins.h>
3 sbit DataPortDS1820 = P3^6;
4 void Delay1us(unsigned char us) //延时
5 {
6 1 while (us)
7 1 {
8 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
9 2 --us;
10 2 }
11 1 }
12 void Delay15us(void)
13 {
14 1 Delay1us(15); //延时15秒
15 1 }
16 void Delay10us(void)
17 {
18 1 Delay1us(10);
19 1 }
20 bit RstDS1820(void) //返回0-有设备连接1-无设备连接
21 {
22 1 unsigned char i;
23 1 bit RstFlag;
24 1 RstFlag=1;
25 1 DataPortDS1820=0;
26 1 for (i=0;i<40;i++) //480us 延时
27 1 Delay15us();
28 1 DataPortDS1820=1;
29 1 for(i=0;i<4;i++) //15us-60us 延时
30 1 {
31 2 Delay15us();
32 2 }
33 1 for (i=0;i<16;i++) //60us-240us 延时
34 1 {
35 2 Delay15us();
36 2 if (DataPortDS1820==0) RstFlag=0;
37 2 }
38 1 for (i=0;i<16;i++) //240us
39 1 {
40 2 Delay15us();
41 2 }
42 1 return RstFlag;
43 1 }
44 void WriteDS1820(unsigned char ch)
45 {
46 1 unsigned char i;
47 1 DataPortDS1820=1;
48 1 Delay1us(1);
49 1 for (i=0;i<8;i++)
50 1 {
51 2 EA=0;
52 2 DataPortDS1820=0;
53 2 Delay15us();
54 2 DataPortDS1820=ch&0x1;
55 2 EA=1;
C51 COMPILER V8.02 DS18B20 12/05/2007 10:38:51 PAGE 2
56 2 Delay15us();Delay15us();Delay15us();
57 2 DataPortDS1820=1;
58 2 ch=ch>>1;
59 2 Delay1us(1);
60 2 }
61 1 }
62 unsigned char ReadDS1820(void)
63 {
64 1 unsigned char i,ch;
65 1 ch=0;
66 1 DataPortDS1820=1;
67 1 Delay1us(1);
68 1 for (i=0;i<8;i++)
69 1 {
70 2 EA=0;
71 2 DataPortDS1820=0;
72 2 Delay10us();
73 2 DataPortDS1820=1;
74 2 Delay1us(2);
75 2 ch=ch>>1;
76 2 if (DataPortDS1820==1)
77 2 {
78 3 ch=ch+0x80;
79 3 }
80 2 EA=1;
81 2 Delay15us();Delay15us();Delay15us();
82 2 }
83 1 return ch;
84 1 }
85 void SkipROMCode(void) //主机发跳过读序列号的操作命令:0xcc
86 {
87 1 RstDS1820();
88 1 WriteDS1820(0xcc);
89 1 }
90 void StartADC(void)
91 {
92 1 RstDS1820(); //复位
93 1 WriteDS1820(0xcc); //广播
94 1 WriteDS1820(0x44); //启动温度转换转换 12bit700ms
95 1 }
96 unsigned int GetTempValue(void)//读取温度值的程序
97 {
98 1 unsigned char i,j;
99 1 unsigned int T;
100 1 SkipROMCode();
101 1 WriteDS1820(0xBE); //发布读取温度值的命令(0xBE)
102 1 i=ReadDS1820();
103 1 j=ReadDS1820();
104 1 StartADC();
105 1 T=i+j*256;
106 1 return T;
107 1 }
108
109
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 221 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
C51 COMPILER V8.02 DS18B20 12/05/2007 10:38:51 PAGE 3
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 + -