📄 ds18b20_driver.lst
字号:
C51 COMPILER V8.02 DS18B20_DRIVER 09/13/2007 16:35:02 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20_DRIVER
OBJECT MODULE PLACED IN DS18B20_Driver.OBJ
COMPILER INVOKED BY: d:\Keil3\C51\BIN\C51.EXE DS18B20_Driver.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #define DS18B20_Driver
2 #include <DS18B20_Driver.h>
3
4 void DS18B20_Init(void)
5 {
6 1 unsigned char Init_Data[3]={20,10,0x3f}; //分辨率为10位
7 1 unsigned char i=0;
8 1 Reset(); //复位
9 1 Write_Byte(SKIP_ROM); //跳过ROM命令
10 1 Write_Byte(WRITE_SCRATCHPAD); //写存储器命令
11 1 for(i=0;i<3;i++)
12 1 {
13 2 Write_Byte(Init_Data[i]);
14 2 }
15 1 Reset(); //复位
16 1 Write_Byte(SKIP_ROM); //跳过ROM命令
17 1 Write_Byte(COPY_SCRATCHPAD); //拷贝存储器命令
18 1 }
19 //************************************************************
20 //************************************************************
21
22 uint Get_Temp(void)
23 {
24 1 unsigned char i=0;
25 1 unsigned char TempH=0,TempL=0;
26 1 unsigned int Temp = 0;
27 1 // float temprature=0;
28 1
29 1 Reset(); //复位
30 1 Write_Byte(SKIP_ROM); //跳过ROM命令
31 1 Write_Byte(CONVERT_T); //启动转换命令
32 1 // Wire_Delay(50000);
33 1 Reset(); //复位
34 1 Write_Byte(SKIP_ROM); //跳过ROM命令
35 1 Write_Byte(READ_SCRATCHPAD); //读存储器命令
36 1 TempL=Read_Byte(); //读取温度值低8位
37 1 TempH=Read_Byte(); //读取温度值高8位
38 1
39 1 //TempH<<=4;
40 1 //temprature=TempH+TempL*0.0625;
41 1 //return(temprature);
42 1 Temp = TempH ;
43 1 Temp<<=8;
44 1 Temp = Temp|TempL;
45 1 return(Temp);
46 1 }
47
48 void Wire_Delay(unsigned int num)
49 {
50 1 unsigned int i=0;
51 1 i=num;
52 1 while(--i);
53 1 }
54
55 unsigned char Reset(void)
C51 COMPILER V8.02 DS18B20_DRIVER 09/13/2007 16:35:02 PAGE 2
56 {
57 1 unsigned char Presence_Flag=0; //主机接收到1,说明从机不在线,0为在线
58 1 DQ=0; //拉低DQ线
59 1 Wire_Delay(480); //延时至少480微秒
60 1 DQ=1; //释放DQ线
61 1 Wire_Delay(70); //等待18B20响应
62 1 Wire_Delay(120); //在采样周期的中间采样(采样周期为60~240微秒)
63 1 Presence_Flag=DQ; //采样
64 1 Wire_Delay(120); //等待剩余的采样周期
65 1 Wire_Delay(240); //等待时序结束
66 1 return(Presence_Flag);
67 1 }
68
69 unsigned char Read_Bit(void)
70 {
71 1 unsigned char readbit=0;
72 1 DQ=0; //拉低DQ
73 1 Wire_Delay(1); //延时至少1微秒
74 1 P1MDOUT &=0xef;
75 1 DQ=1; //释放DQ
76 1 Wire_Delay(10); //最多延时14微秒采样,此处为10微秒
77 1 readbit=DQ;
78 1 Wire_Delay(110); //读取周期为(60~120)微秒
79 1 P1MDOUT|=0x10;
80 1 return(readbit);
81 1 }
82
83
84 void Write_Bit(unsigned char num)
85 {
86 1 DQ=0;
87 1 Wire_Delay(10);
88 1 if(num & 0x01)
89 1 {DQ=1;}
90 1 else
91 1 {DQ=0;}
92 1 Wire_Delay(50);
93 1 DQ=1;
94 1 Wire_Delay(60);
95 1 }
96 void Write_Byte(unsigned char val)
97 {
98 1 unsigned char i=0;
99 1 for(i=0;i<8;i++)
100 1 {
101 2 Write_Bit(val);
102 2 val>>=1;
103 2 }
104 1 }
105
106 unsigned char Read_Byte(void)
107 {
108 1 unsigned char i=0,receive_data=0;
109 1 for(i=0;i<8;i++)
110 1 {
111 2 receive_data>>=1;
112 2 if(Read_Bit())
113 2 {
114 3 receive_data |=0x80;
115 3 }
116 2 else
117 2 {
C51 COMPILER V8.02 DS18B20_DRIVER 09/13/2007 16:35:02 PAGE 3
118 3 receive_data &=0x7f;
119 3 }
120 2 }
121 1 return(receive_data);
122 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 293 ----
CONSTANT SIZE = 3 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
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 + -