📄 ds18b20.lst
字号:
C51 COMPILER V8.02 DS18B20 04/03/2007 21:18:45 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 BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "main.h"
2 #include "reg52.h"
3 //#include "ds18b20intrins.h"
4 #include "absacc.h"
5 #include "stdio.h"
6 #include "math.h"
7 #define uchar unsigned char
8 #define uint unsigned int
9
10 extern unsigned char Temperature_Lsm;
11 extern unsigned char Temperature_Msm;
12 sbit P3_5=P3^5;
13 uchar TEMP; // 温度值的变量;
14 uchar flag1; // 结果为负和正的标志位。
15
16 void Delay (unsigned int count)
17 {
18 1 unsigned int i;
19 1 while (count)
20 1 {
21 2 i =200;
22 2 while (i>0) i--;
23 2 count--;
24 2 }
25 1 }
26
27 void Temperature_Reset(void) // 发送复位和初始化
28 {
29 1 unsigned int i;
30 1 P3_5 = 0;
31 1 i = 103;
32 1 while (i>0) i--; // 延时
33 1 P3_5 = 1;
34 1 i = 4;
35 1 while (i>0) i--;
36 1 }
37
38 bit Temperature_Readbit(void) // 读取数据的一位
39 {
40 1 unsigned int i;
41 1 bit dat;
42 1 P3_5 = 0; i++;
43 1 P3_5 = 1; i++; i++; //延时
44 1 dat = P3_5;
45 1 i = 8; while (i>0) i--; // 延时
46 1 return (dat);
47 1 }
48
49 unsigned char Temperature_Readchar(void) //读一个字节
50 {
51 1 unsigned char i,j,dat;
52 1 dat = 0;
53 1 for (i=1;i<=8;i++)
54 1 {
55 2 j =Temperature_Readbit();
C51 COMPILER V8.02 DS18B20 04/03/2007 21:18:45 PAGE 2
56 2 dat = (j << 7) | (dat >> 1);
57 2 }
58 1 return (dat);
59 1 }
60
61 void Temperature_Write(unsigned char dat) //写一个字节
62 {
63 1 unsigned int i;
64 1 unsigned char j;
65 1 bit testb;
66 1 for (j=1;j<=8;j++)
67 1 {
68 2 testb = dat & 0x01;
69 2 dat = dat >> 1;
70 2 if (testb)
71 2 {
72 3 P3_5 = 0; // 写0
73 3 i++; i++;
74 3 P3_5 = 1;
75 3 i = 8; while (i>0) i--;
76 3 }
77 2 else
78 2 {
79 3 P3_5 = 0; // 写0
80 3 i = 8; while (i>0) i--;
81 3 P3_5 = 1;
82 3 i++; i++;
83 3 }
84 2 }
85 1 }
86
87 void Temperature_Change(void) // ds1820 开始转换
88 {
89 1 Temperature_Reset(); // 复位
90 1 //tmpre (); // 等待存在脉冲
91 1 Delay (1); // 延时
92 1 Temperature_Write(0xcc); // 跳过序列号命令
93 1 Temperature_Write(0x44); // 发转换命令 44H,
94 1 }
95
96 void Read_Temperature(void) // 读取温度
97 {
98 1 //unsigned char a,b;
99 1 Temperature_Reset(); // 复位
100 1 Delay (1); // 延时
101 1 Temperature_Write(0xcc); // 跳过序列号命令
102 1 Temperature_Write(0xbe); // 发送读取命令
103 1 Temperature_Lsm= Temperature_Readchar(); // 读取低位温度
104 1 Temperature_Msm= Temperature_Readchar(); //读取高位温度
105 1 flag1=Temperature_Msm; //若b为1则为负温
106 1 if(flag1)
107 1 {
108 2 TEMP=~Temperature_Lsm+1; //如果为负温则去除其补码
109 2 }
110 1 else
111 1 {
112 2 TEMP=Temperature_Lsm;
113 2 }
114 1 }
115
116 /*
117 main()
C51 COMPILER V8.02 DS18B20 04/03/2007 21:18:45 PAGE 3
118 {
119 do{
120 Tmperature_Change(); // 开始温度转换
121 Delay(200); // 读取延时
122 Read_Tmperature(); //读取温度
123 }while(1);
124 }
125 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 249 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -