📄 ds18b20du.lst
字号:
C51 COMPILER V7.09 DS18B20DU 08/02/2007 10:54:43 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE DS18B20DU
OBJECT MODULE PLACED IN ds18b20du.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds18b20du.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "reg51.h"
2 sbit DQ =P3^3; //定义通信端口
3 unsigned char A1,A2,A3,A2t,dispno;
4 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
5 unsigned int temp1;
6 //延时函数
7 void delay(unsigned int i)
8 {
9 1 while(i--);
10 1 }
11 //初始化函数
12 Init_DS18B20(void)
13 {
14 1 unsigned char x=0;
15 1 DQ = 1; //DQ复位
16 1 delay(8); //稍做延时
17 1 DQ = 0; //单片机将DQ拉低
18 1 delay(97); //精确延时 大于 480us
19 1 DQ = 1; //拉高总线
20 1 delay(14);
21 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
22 1 delay(20);
23 1 }
24 //读一个字节
25 ReadOneChar(void)
26 {
27 1 unsigned char i=0;
28 1 unsigned char dat = 0;
29 1 for (i=8;i>0;i--)
30 1 {
31 2 DQ = 0; // 给脉冲信号
32 2 dat>>=1;
33 2 DQ = 1; // 给脉冲信号
34 2 if(DQ)
35 2 dat|=0x80;
36 2 delay(4);
37 2 }
38 1 return(dat);
39 1 }
40 //写一个字节
41 WriteOneChar(unsigned char dat)
42 {
43 1 unsigned char i=0;
44 1 for (i=8; i>0; i--)
45 1 {
46 2 DQ = 0;
47 2 DQ = dat&0x01;
48 2 delay(5);
49 2 DQ = 1;
50 2 dat>>=1;
51 2 }
52 1 delay(4);
53 1 }
54 //读取温度
55 ReadTemperature(void)
C51 COMPILER V7.09 DS18B20DU 08/02/2007 10:54:43 PAGE 2
56 {
57 1 unsigned char a=0;
58 1 unsigned char b=0;
59 1 unsigned int t=0;
60 1 float tt=0;
61 1 Init_DS18B20();
62 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
63 1 WriteOneChar(0x44); // 启动温度转换
64 1 Init_DS18B20();
65 1 WriteOneChar(0xCC); //跳过读序号列号的操作
66 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
67 1 a=ReadOneChar();
68 1 b=ReadOneChar();
69 1 t=b;
70 1 t<<=8;
71 1 t=t|a;
72 1 tt=t*0.0625;
73 1 t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
74 1 return(t);
75 1 }
76 main()
77 {
78 1 TMOD=0x01;
79 1 TH0=64536/256;
80 1 TL0=64536%256;
81 1 ET0=1;
82 1 EA=1;
83 1 TR0=1;
84 1 while(1)
85 1 {
86 2 temp1=ReadTemperature();
87 2 A1=temp1/100;
88 2 A2t=temp1%100;
89 2 A2=A2t/10;
90 2 A3=A2t%10;
91 2 }
92 1
93 1 }
94
95 void timer0(void) interrupt 1 using 1
96 {
97 1 TH0=64536/256;
98 1 TL0=64536%256;
99 1 P0=0x00;
100 1 P2|=0x0f;
101 1 switch(dispno)
102 1 {
103 2 case 0: P2=0xfe;P0=table[A1];break;
104 2 case 1: P2=0xfd;P0=table[A2];break;
105 2 case 2: P2=0xfb;P0=0X63;break;
106 2 case 3: P2=0xf7;P0=0x39;break;
107 2
108 2 default: break;
109 2 }
110 1 if(++dispno>3) dispno=0;
111 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 370 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
C51 COMPILER V7.09 DS18B20DU 08/02/2007 10:54:43 PAGE 3
PDATA SIZE = ---- ----
DATA SIZE = 7 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 + -