📄 ds18b20.lst
字号:
C51 COMPILER V7.06 DS18B20 12/17/2006 14:56:14 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: E:\My Electronic\Tools\Design tools\keil7.06\C51\BIN\C51.EXE DS18B20.c LARGE OPTIMIZE(SIZE)
stmt level source
1 #include <REG52.H>
2 #include <intrins.h>
3
4 #define uint unsigned int
5
6
7 sbit DQ=P3^6;
8
9 void delay_us(unsigned char us);
10 unsigned char _18b20_init(void);
11 unsigned char _18b20_read();
12 void Read_Temperature(unsigned char *p);
13 void _18b20_write(unsigned char commond);
14
15 void delay(unsigned char useconds)
16 {
17 1 for(;useconds>0;useconds--);
18 1 }
19
20
21 unsigned char _18b20_init(void)
22 {
23 1 unsigned char presence;
24 1 EA=0;
25 1 DQ = 0; //拉低总线
26 1 delay(29); // 保持 480us
27 1 DQ = 1; // 释放总线
28 1 delay(3); // 等待回复
29 1 presence = DQ; // 读取信号
30 1 delay(25); // 等待结束信号
31 1 return(presence); // 返回 0:正常 1:不存在
32 1 }
33
34 //从 1-wire 总线上读取一个字节
35 unsigned char _18b20_read(void)
36 {
37 1
38 1 unsigned char i;
39 1 unsigned char value = 0;
40 1 for (i=8;i>0;i--)
41 1 {
42 2 value>>=1;
43 2 DQ = 0;
44 2 _nop_();
45 2 _nop_();
46 2 _nop_();
47 2 DQ = 1;
48 2 delay(1);
49 2 if(DQ)value|=0x80;
50 2 delay(6);
51 2 }
52 1 return(value);
53 1 }
54
55 //向 1-WIRE 总线上写一个字节
C51 COMPILER V7.06 DS18B20 12/17/2006 14:56:14 PAGE 2
56 void _18b20_write(char val)
57 {
58 1 unsigned char i;
59 1 EA=0;
60 1 for (i=8; i>0; i--) // 一次写一位
61 1 {
62 2 DQ = 0; //
63 2 _nop_();
64 2 _nop_();
65 2 _nop_();
66 2 DQ = val&0x01;
67 2 delay(5); //
68 2 DQ = 1;
69 2 val=val/2;
70 2 }
71 1 EA=1;
72 1 delay(5);
73 1 }
74
75 //读取和显示温度
76 void Read_Temperature(unsigned char *p)
77 {
78 1
79 1 unsigned char i;
80 1 unsigned char x;
81 1 unsigned char th,tl;
82 1
83 1 for(i=0;i<10;i++)
84 1 ;
85 1 _18b20_init();
86 1 for(i=0;i<10;i++)
87 1 ;
88 1 _18b20_write(0xCC); // Skip ROM
89 1 _18b20_write(0x44); // 转换温度
90 1 for(i=0;i<254;i++)
91 1 ;
92 1 _18b20_init();
93 1 for(i=0;i<10;i++)
94 1 ;
95 1 _18b20_write(0xCC); //Skip ROM
96 1 _18b20_write(0xbe); // 读取寄存器
97 1 tl=_18b20_read();//读出温度低8位
98 1 th=_18b20_read();//读出温度高8位
99 1 tl &= 0xf0;
100 1 tl >>= 4;
101 1 *(p+3)=tl/2+'0';
102 1 *(p+2)='.';
103 1 x=((th&0x07)<<4)+tl;
104 1 *p=x/10+'0';//显示温度十位数
105 1 *(p+1)=x%10+'0';//显示温度个位数
106 1
107 1 }
108
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 231 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
C51 COMPILER V7.06 DS18B20 12/17/2006 14:56:14 PAGE 3
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 + -