📄 ds18b20.lst
字号:
C51 COMPILER V8.02 DS18B20 05/03/2007 09:16:11 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 OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************
2 **函数功能:ds18b20的驱动函数 **
3 **创建人:xingyuegu **
4 **创建日期:2006-7-12 **
5 **版本:1.0 **
6 **修改日期:2006-10-30 **
7 **版本:2.0 **
8 *******************************************************************/
9 #include <reg51.h>
10 #include <intrins.h>
11 #include <math.h>
12 #include <stdio.h>
13 #include <lcd1602.h>
14
15 #define uchar unsigned char
16 #define uint unsigned int
17 void serial_set(void);
18 void process(unsigned char,unsigned char);
19 char volatile xiaoshu_temp[5],zhen_temp[4]; //
20 bit flag;
21 bit dot_dis=1;
22 sbit DQ=P1^0;
23 //sbit DQ=P2^1;
24 unsigned char temp[5];
25 uchar timeout=20;
26 bit ds18b20_over=0;
27 /*************************************************************
28 **功能:延时600us **
29 **参数:无 **
30 *************************************************************/
31 void delay600us(void)
32 {
33 1 uchar i;
34 1 for(i=0;i<255;i++);
35 1
36 1 }
37
38 void delay(unsigned int time)
39 {
40 1 unsigned int i,j;
41 1 for(i=0;i<time;i++)
42 1 for(j=0;j<200;j++);
43 1 }
44 /*************************************************************
45 **功能:延时60us **
46 **参数:无 **
47 *************************************************************/
48 void delay60us(void)
49 {
50 1 uchar i;
51 1 for(i=0;i<20;i++);
52 1 }
53 /*************************************************************
54 **功能:延时240us **
55 **参数:无 **
C51 COMPILER V8.02 DS18B20 05/03/2007 09:16:11 PAGE 2
56 *************************************************************/
57 /*void delay240us(void)
58 {
59 uchar i;
60 for(i=0;i<80;i++);
61 }*/
62 /*************************************************************
63 **功能:延时18us **
64 **参数:无 **
65 *************************************************************/
66 void delay15us(void)
67 {
68 1 uchar i;
69 1 for(i=0;i<2;i++);
70 1 }
71 /*************************************************************
72 **功能:复位脉冲 **
73 **参数:bool **
74 *************************************************************/
75 bit resetpulse(void)
76 {
77 1
78 1 DQ=0;
79 1 delay600us(); //延时500us
80 1 DQ=1;
81 1 delay60us(); // 延时60us
82 1 return(DQ); //读取P1.0的状态
83 1 }
84 /*************************************************************
85 **功能:ds18b20的初始化 **
86 **参数:无 **
87 *************************************************************/
88 void ds18b20_init(void)
89 {
90 1 while(1)
91 1 {
92 2 if(!resetpulse()) //收到ds18b20的应答信号
93 2 {
94 3 //printf("reset successful!");
95 3
96 3 //delay240us(); //延时240us
97 3 DQ=1;
98 3 delay600us(); //延时240us
99 3 break;
100 3 }
101 2 else
102 2 resetpulse(); //否则再发复位信号
103 2 }
104 1 }
105
106 /*************************************************************
107 **功能:向ds18b20写命令 **
108 **参数:无 **
109 *************************************************************/
110 void ds18b20_writecommand(uchar command)
111 {
112 1
113 1 uchar i;
114 1 for(i=0;i<8;i++)
115 1 {
116 2 if((command & 0x01)==0)
117 2 {
C51 COMPILER V8.02 DS18B20 05/03/2007 09:16:11 PAGE 3
118 3 DQ=0; //写0
119 3 delay60us(); //延时60us
120 3 DQ=1;
121 3 _nop_();
122 3 _nop_();
123 3
124 3 }
125 2
126 2 else //写1
127 2 {
128 3 DQ=0;
129 3 _nop_();
130 3 _nop_(); //延时2us
131 3 DQ=1;
132 3 delay60us(); //延时60us
133 3 }
134 2 command=_cror_(command,1); // 右移1位
135 2 }
136 1
137 1
138 1 }
139
140 /*************************************************************
141 **功能:读ds18b20数据 **
142 **参数:返回读到的数据 **
143 *************************************************************/
144 uchar ds18b20_readdata(void)
145 {
146 1 uchar readdata;
147 1 uchar i;
148 1 for(i=0;i<8;i++)
149 1 {
150 2 DQ=0;
151 2 _nop_();
152 2 _nop_();
153 2 _nop_();
154 2 DQ=1; //释放总线
155 2 //delay15us(); 注意不需要
156 2 if(DQ==0) //如果读到的是0
157 2 {
158 3 readdata=readdata&0x7f;
159 3 delay60us();
160 3 }
161 2 else //读到的是1
162 2 {
163 3 readdata=readdata|0x80;
164 3 delay60us();
165 3 }
166 2 if(i<7)
167 2
168 2 readdata=_cror_(readdata,1);
169 2 }
170 1 return readdata;
171 1 }
172
173 /*************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -