📄 ds18b20.lst
字号:
C51 COMPILER V7.20 DS18B20 10/26/2007 10:04:35 PAGE 1
C51 COMPILER V7.20, 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<reg51.h>
2 //显示模块
3
4 unsigned char code segtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
5 0x6f,0x63,0x39};
6 unsigned char disp_buf[]={0,0,0,0};
7 unsigned char code ledbit[]={0xfe,0xfd,0xfb,0xf7};
8 unsigned char ledno=0,ms5;
9 unsigned char temperature=0;//温度值
10 unsigned int time;
11 sbit DQ =P3^3; //定义通信端口
12
13
14 void delay(unsigned int i)
15 {
16 1 while(i--);
17 1 }
18
19 //初始化函数
20 Init_DS18B20(void)
21 {
22 1 unsigned char x=0;
23 1 DQ = 1; //DQ复位
24 1 delay(8); //稍做延时
25 1 DQ = 0; //单片机将DQ拉低
26 1 delay(80); //精确延时 大于 480us
27 1 DQ = 1; //拉高总线
28 1 delay(14);
29 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
30 1 delay(20);
31 1 }
32 //读一个字节
33 ReadOneChar(void)
34 {
35 1 unsigned char i=0;
36 1 unsigned char dat = 0;
37 1 for (i=8;i>0;i--)
38 1 {
39 2 DQ = 0; // 给脉冲信号
40 2 dat>>=1;
41 2 DQ = 1; // 给脉冲信号
42 2 if(DQ)
43 2 dat|=0x80;
44 2 delay(4);
45 2 }
46 1 return(dat);
47 1 }
48 //写一个字节
49 WriteOneChar(unsigned char dat)
50 {
51 1 unsigned char i=0;
52 1 for (i=8; i>0; i--)
53 1 {
54 2 DQ = 0;
55 2 DQ = dat&0x01;
C51 COMPILER V7.20 DS18B20 10/26/2007 10:04:35 PAGE 2
56 2 delay(5);
57 2 DQ = 1;
58 2 dat>>=1;
59 2 }
60 1
61 1 }
62 //读取温度
63 ReadTemperature(void)
64 {
65 1 unsigned char a=0;
66 1 unsigned char b=0;
67 1 unsigned int t=0;
68 1 float tt=0;
69 1 Init_DS18B20();
70 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
71 1 WriteOneChar(0x44); // 启动温度转换
72 1 Init_DS18B20();
73 1 WriteOneChar(0xCC); //跳过读序号列号的操作
74 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
75 1 a=ReadOneChar();
76 1 b=ReadOneChar();
77 1 t=b;
78 1 t<<=8;
79 1 t=t|a;
80 1 tt=t*0.0625;
81 1 t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
82 1 return(tt);
83 1 }
84
85
86 main()
87 {
88 1 TMOD=0x21;
89 1 EA=1;
90 1 ET0=1;
91 1 ET1=1;
92 1 TR0=1;
93 1 TR1=1;
94 1 TH0=0xee;
95 1 TL0=0x00;
96 1 TH1=0xff;
97 1 TL1=0xfe;
98 1
99 1 while(1)
100 1 {
101 2
102 2
103 2 }
104 1 }
105
106 void tiemr1(void) interrupt 3
107 {
108 1 time++;
109 1 if(time==20000)
110 1 {
111 2 temperature=ReadTemperature();//读温度
112 2 time=0;
113 2 }
114 1
115 1
116 1 }
117
C51 COMPILER V7.20 DS18B20 10/26/2007 10:04:35 PAGE 3
118 void timer0(void) interrupt 1
119 {
120 1 TR0=0;
121 1 TH0=0xee;
122 1 TL0=0x00;
123 1 P1=0xff;
124 1
125 1 disp_buf[0]=temperature/10;
126 1 disp_buf[1]=temperature%10;
127 1 disp_buf[2]=10;
128 1 disp_buf[3]=11;
129 1 P1=ledbit[ledno];
130 1 P0=segtab[disp_buf[ledno]];
131 1 ledno++;
132 1 if(ledno>3) ledno=0;
133 1 //ms5++;
134 1 TR0=1;
135 1
136 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 428 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 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 + -