📄 ds18b20.lst
字号:
C51 COMPILER V9.01 DS18B20 04/28/2012 12:23:32 PAGE 1
C51 COMPILER V9.01, 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 "DS18B20.h"
2
3 volatile char wendu[3];
4
5 void delay_18b20(unsigned int t)
6 {
7 1 while(t--);
8 1 }
9
10 unsigned char init_18b20()
11 {
12 1 unsigned char i=0;
13 1 DQ=1;
14 1 DQ=0;
15 1 delay_18b20(79); //延时480us-960us
16 1 DQ=1;
17 1 delay_18b20(4); //延时15us-60us
18 1 i=DQ;
19 1 while(!DQ);
20 1 return(i);
21 1 }
22
23
24 unsigned char read_18b20_byte( void )
25 {
26 1 unsigned char times,ram;
27 1 ram = 0;
28 1 for ( times = 8; times > 0; times--)
29 1 {
30 2 ram >>= 1; //将采样到的数据依次向低位移
31 2 DQ=0; //将总线拉低,然后释放。整个过程不大于15us
32 2 _nop_(); _nop_(); //delay 2us
33 2 DQ=1;
34 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
35 2 if( DQ ) //采样总线上的数据
36 2 {
37 3 ram |= 0x80;
38 3 }
39 2 delay_18b20(4); //延时,使整个读操作时序大于60us.
40 2
41 2 }
42 1 return ram;
43 1 }
44
45
46 void write_18b20_byte(unsigned char command)
47 {
48 1 unsigned char i;
49 1 for (i = 8; i > 0; i--)
50 1 {
51 2 if((command & 0x01))
52 2 {
53 3 //写1操作
54 3 DQ=0;
55 3 _nop_(); _nop_();
C51 COMPILER V9.01 DS18B20 04/28/2012 12:23:32 PAGE 2
56 3 DQ=1; //将DQ拉低,延时2us后释放,以上操作必须在15us内完成
57 3 delay_18b20(4); //延时,使整个操作大于60us。本次52us
58 3
59 3 }
60 2 else
61 2 {
62 3 //写0操作
63 3 DQ=0;
64 3 delay_18b20(4); // 本次 52us
65 3 }
66 2
67 2 DQ=1;
68 2 command >>= 1; //两个写操作之间,至少有1us的间隙,此语句4us
69 2 }
70 1 }
71
72 void get_wendu()
73 {
74 1 unsigned char a,b;
75 1 float get_temp;
76 1 int temp1,temp2;
77 1 init_18b20();
78 1 write_18b20_byte(0xcc);
79 1 write_18b20_byte(0x44); //温度转换
80 1 init_18b20();
81 1 write_18b20_byte(0xcc);
82 1 write_18b20_byte(0xbe); //读温度
83 1 a=read_18b20_byte();
84 1 b=read_18b20_byte();
85 1 temp1=b;
86 1 temp1=temp1<<8;
87 1 temp1=temp1|a;
88 1 get_temp=temp1*0.0625;
89 1 temp2=get_temp*10+0.5; //扩大十倍并四舍五入
90 1 wendu[0]=temp2%1000/100; //十位
91 1 wendu[1]=temp2%1000%100/10; //个位
92 1 wendu[2]=temp2%1000%100%10; //小数位
93 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 303 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 4
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 + -