📄 ds18b20.lst
字号:
C51 COMPILER V7.50 DS18B20 09/13/2006 09:30:08 PAGE 1
C51 COMPILER V7.50, 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 //=========================================================
2 // test the temputure with 18b20
3 // copyright by wangmeng 2006.4.3
4 //==========================================================
5 #include"reg51.h"
6 sbit DQ =P2^3; // 定义DQ引脚为P1.7
7 //============================================================
8 //delay time is (1+2+2*t)*1.08
9 //=============================================================
10 void delay(unsigned char t)
11 {
12 1 while(--t);
13 1 }
14 //=============================================================
15 //reset 18b20
16 //=============================================================
17 unsigned char reset(void)
18 {
19 1 unsigned char presence;
20 1 DQ = 0;
21 1 delay(240); //holding 483us(400~960)
22 1 DQ = 1;
23 1 delay(15); //holding 33us(15~60)
24 1 presence = DQ;
25 1 delay(240); //wait for 18b20 203
26 1 return(presence); // return the sign,0 is presence, 1 is no
27 1 }
28 //==============================================================
29 //write one bit to 18b20
30 //==============================================================
31 void write_bit(char bitval)
32 {
33 1 DQ = 0;
34 1 delay(1);
35 1 if(bitval) DQ =1; //if write 1,DQ return 1
36 1 else DQ = 0;
37 1 delay(28); //holding 63us(>60us)
38 1 DQ = 1;
39 1 }
40 //==============================================================
41 //write one byte to 18b20
42 //==============================================================
43 void write_byte(char val)
44 {
45 1 unsigned char i;
46 1 unsigned char temp;
47 1 for (i=0; i<8; i++)
48 1 { // 写入字节, 每次写入一位
49 2 temp = val>>i;
50 2 temp &= 0x01;
51 2 write_bit(temp);
52 2 }
53 1 }
54 //==================================================
55 //read one bit from the 18b20
C51 COMPILER V7.50 DS18B20 09/13/2006 09:30:08 PAGE 2
56 //==================================================
57 unsigned char read_bit(void)
58 {
59 1 unsigned char i;
60 1 DQ = 0;
61 1 delay(1);
62 1 DQ = 1; // then return high
63 1
64 1 delay(2); //delay 15us
65 1 i=DQ;
66 1 delay(25);
67 1 DQ = 1;
68 1 return(i);
69 1 }
70 //========================================================
71 //read one byte from 18b20
72 //========================================================
73 unsigned char read_byte(void)
74 {
75 1 unsigned char i;
76 1 unsigned char value = 0;
77 1 for (i=0;i<8;i++)
78 1 { // 读取字节,每次读取一个字节
79 2 if(read_bit()) value|=0x01<<i; // 然后将其左移
80 2 delay(3);
81 2 }
82 1 return(value);
83 1 }
84 //========================================
85 //get the temperature
86 //========================================
87 char Read_Temperature(void)
88 {
89 1 unsigned char get[10];
90 1 unsigned char temp_lsb,temp_msb;
91 1 int k;
92 1 reset();
93 1 write_byte(0xCC); // 跳过 ROM
94 1 write_byte(0x44); // 启动温度转换
95 1
96 1 delay(50);
97 1
98 1 reset();
99 1 write_byte(0xCC); // 跳过 ROM
100 1 write_byte(0xBE); // 读暂存器
101 1
102 1 for (k=0;k<9;k++)
103 1 {
104 2 get[k]=read_byte();
105 2 }
106 1
107 1 temp_msb = get[1]; // Sign byte + lsbit
108 1 temp_lsb = get[0]; // Temp data plus lsb
109 1 k=temp_msb;
110 1 k&=0x07; //match the sign bit
111 1 k=k<<8|temp_lsb;
112 1 k=k/16;
113 1 return(k);
114 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.50 DS18B20 09/13/2006 09:30:08 PAGE 3
CODE SIZE = 220 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
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 + -