📄 ds18b20.lst
字号:
C51 COMPILER V8.01 DS18B20 04/19/2008 17:30:19 PAGE 1
C51 COMPILER V8.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<reg52.h>
2 #include<stdio.h>
3 sbit TMDAT=P3^2; //DS18B20 的数据输入/输出脚DQ,根据情况设定
4 bit fg=1; //温度正负标志unsigned char Data[4]={0};
5 void dmsec(unsigned int count);
6 void tmreset (void);
7 unsigned char tmrbyte (void);
8 void tmwbyte(unsigned char dat);
9 void tmstart (void);
10 void tmrtemp (void);
11 void DS18B20PRO(void);
12
13 extern unsigned char Data[4]={0};
14 /***********************************************************************************************/
15
16 void dmsec(unsigned int count) //延时部分
17 {
18 1 unsigned char i;
19 1 while(count--)
20 1 {
21 2 for(i=0;i<115;i++);
22 2 }
23 1 }
24
25 /*************************************************************************************************/
26 void tmreset (void) //发送复位
27 {
28 1 unsigned char i;
29 1 TMDAT=0;
30 1 for(i=0;i<103;i++);
31 1 TMDAT=1;
32 1 for(i=0;i<4;i++);
33 1 }
34 bit tmrbit(void) //读一位//
35 {
36 1 unsigned int i;
37 1 bit dat;
38 1 TMDAT=0;
39 1 i++;
40 1 TMDAT=1;
41 1 i++;i++; //微量延时//
42 1 dat=TMDAT;
43 1 for(i=0;i<8;i++);
44 1 return(dat);
45 1 }
46
47 /************************************************************************************************/
48 unsigned char tmrbyte (void) //读一个字节
49 {
50 1 unsigned char i,j,dat;
51 1 dat=0;
52 1 for(i=1;i<=8;i++)
53 1 {
54 2 j=tmrbit();
55 2 dat=(j<<7)|(dat>>1);
C51 COMPILER V8.01 DS18B20 04/19/2008 17:30:19 PAGE 2
56 2 }
57 1 return(dat);
58 1 }
59
60
61 void tmwbyte(unsigned char dat) //写一个字节
62 {
63 1 unsigned char j,i;
64 1 bit testb;
65 1 for(j=1;j<=8;j++)
66 1 {
67 2 testb=dat&0x01;
68 2 dat=dat>>1;
69 2 if(testb)
70 2 {
71 3 TMDAT=0; //写0
72 3 i++;i++;
73 3 TMDAT=1;
74 3 for(i=0;i<8;i++);
75 3 }
76 2 else
77 2 {
78 3 TMDAT=0; //写0
79 3 for(i=0;i<8;i++);
80 3 TMDAT = 1;
81 3 i++;i++;
82 3 }
83 2 }
84 1 }
85
86 /**********************************************************************************************/
87 void tmstart (void) //发送ds1820 开始转换
88 {
89 1 tmreset(); //复位
90 1 dmsec(1); //延时
91 1 tmwbyte(0xcc); //跳过序列号命令
92 1 tmwbyte(0x44); //发转换命令44H,
93 1 }
94
95 /************************************************************************************************/
96 void tmrtemp (void) //读取温度
97 {
98 1
99 1 unsigned char a,b;
100 1 //unsigned char x,y,z;
101 1 tmreset (); //复位
102 1 dmsec (1); //延时
103 1 tmwbyte(0xcc); //跳过序列号命令
104 1 tmwbyte(0xbe); //发送读取命令
105 1 a=tmrbyte (); //读取低位温度
106 1 b=tmrbyte (); //读取高位温度
107 1 if(b>0x7f) //最高位为1 时温度是负
108 1 {
109 2 a=~a;b=~b+1; //补码转换,取反加一
110 2 fg=0; //读取温度为负时fg=0
111 2 }
112 1 Data[0]=(a/16+b*16)/10; //整数十位
113 1 Data[1]=(a/16+b*16)%10; //整数个位
114 1 Data[2]=(a&0x0f)*10/16; //小数第一位
115 1 Data[3]=(a&0x0f)*100/16%10; //小数第二位
116 1 /*x=a>>4;
117 1 y=b<<4;
C51 COMPILER V8.01 DS18B20 04/19/2008 17:30:19 PAGE 3
118 1 z=x|y;
119 1 Data[0]=(z/0x0a+0x30)/10;
120 1 Data[1]=(z%0x0a+0x30)%10;
121 1 Data[2]=(a&0x0f)*10/16; */
122 1
123 1 }
124
125
126 /***********************************************************************************************/
127 void DS18B20PRO(void)
128 {
129 1 tmstart();
130 1 dmsec(5); //如果是不断地读取的话可以不延时//
131 1 tmrtemp(); //读取温度,执行完毕温度将存于TMP 中//
132 1 }
133
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 265 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -