📄 1.lst
字号:
C51 COMPILER V7.06 1 01/22/2008 23:08:41 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 1
OBJECT MODULE PLACED IN 1.OBJ
COMPILER INVOKED BY: D:\Program Files\C51\BIN\C51.EXE 1.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 uchar l,m,s;
5 sbit diao=P3^5;
6
7 uchar tplsb,tpmsb;//温度值低位,高位字节
8 sbit DQ=P3^7;//数据通信线
9
10 /*延时t毫秒*/
11 void delay(uint t)
12 { uint i;
13 1 while(t--)
14 1 {
15 2 /*对于11。0592MHZ时钟,约延时1ms*/
16 2 for(i=0;i<125;i++)
17 2 {}
18 2 }
19 1 }
20 /*产生复位脉冲初始化DS18B20*/
21 void TxReset(void)
22 {
23 1 uint i;
24 1 DQ=0;
25 1 /*拉低约900us*/
26 1 i=100;
27 1 while(i>0) i--;
28 1 //产生上升沿
29 1 DQ=1;
30 1 i=4;
31 1 while(i>0) i--;
32 1 }
33 /*等待应答脉冲*/
34 void RxWait(void)
35 {
36 1 uint i;
37 1 while(DQ); //检测到应答脉冲
38 1 i=4;
39 1 while(i>0) i--;
40 1 }
41 /*读取数据的一位,满足读时隙要求*/
42 bit RdBit(void)
43 {
44 1 uint i;
45 1 bit b;
46 1 DQ=0;
47 1 i++; //保持低至少1us
48 1 DQ=1;
49 1 i++;i++; //延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
50 1 b=DQ;
51 1 i=8;
52 1 while(i>0) i--;//读时隙不低于60us
53 1 return(b);
54 1 }
55 /*读数据的一个字节*/
C51 COMPILER V7.06 1 01/22/2008 23:08:41 PAGE 2
56 uchar RdByte(void)
57 {
58 1 uchar i,j,b;
59 1 b=0;
60 1 for(i=1;i<=8;i++)
61 1 {
62 2 j=RdBit();
63 2 b=(j<<7)|(b>>1);
64 2 }
65 1 return(b);
66 1 }
67 /*写数据的一个字节,满足写1和写0的时隙要求*/
68 void WrByte(uchar b)
69 {
70 1 uint i;
71 1 uchar j;
72 1 bit btmp;
73 1 for(j=1;j<=8;j++)
74 1 {
75 2 btmp=b&0x01;
76 2 b=b>>1; //取下一位(由低位向高位)
77 2 if(btmp)
78 2 {
79 3 /*写1*/
80 3 DQ=0; //延时,使得15us以内拉高
81 3 i++;i++;
82 3 DQ=1;
83 3 i=8;
84 3 while(i>0) i--; //整个写1时隙不低于60us
85 3 }
86 2 else
87 2 {
88 3 /*写0*/
89 3 DQ=0;
90 3 i=8;
91 3 while(i>0) i--;//保持低在60~120us之间
92 3 DQ=1;
93 3 i++;
94 3 i++;
95 3 }
96 2 }
97 1 }
98 /*启动温度转换*/
99 void convert(void)
100 {
101 1 TxReset(); //产生复位脉冲,初始化DS18B20
102 1 RxWait(); //等待DS18B20给出应答脉冲
103 1 delay(1); //延时
104 1 WrByte(0xcc); //skip rom命令
105 1 WrByte(0x44); //convert T命令
106 1 }
107 /*读取温度值*/
108 void RdTemp(void)
109 { uchar i;
110 1 TxReset(); //产生复位脉冲,初始化DS18B20
111 1 RxWait(); //等待DS18B20给出应答脉冲
112 1 delay(1); //延时
113 1 WrByte(0xcc); //skip rom命令
114 1 WrByte(0xbe); //read scratchpad命令
115 1 tplsb=RdByte(); //温度值低位字节(其中低4位为二进制的“小数”部分)
116 1 tpmsb=RdByte(); //温度值高位字节(其中高5位为符号位)
117 1 for(i=0;i<4;i++) {tpmsb=tpmsb<<1;}
C51 COMPILER V7.06 1 01/22/2008 23:08:41 PAGE 3
118 1 m=tpmsb&0x7f;
119 1 for(i=0;i<4;i++) {tplsb=tplsb>>1;}
120 1 s=m|tplsb;
121 1 //if(s) diao=1;
122 1
123 1 }
124 /*主程序,读取的温度值最终存放在tplsb和tpmsb变量中。tplsb中的低4位为二进制的“小数”部分;
125 tpmsb中的高5位为符号位,真正通过数码管输出时,需要进行到十进制有符号实数(包括小数部分) 的转换*/
126
127 uchar data_table[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x63,0x39};//共阴
128 //uchar data_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳
129 uchar display(uchar x)
130 {
131 1 P0=data_table[(x/10)%10];P2=0x8f;
132 1 //P2=0xfe;
133 1 delay(1);
134 1 P0=data_table[x%10];P2=0x4f;
135 1 //P2=0xfd;
136 1 delay(1);
137 1 P0=data_table[10];P2=0x2f;
138 1 //P2=0xfb;
139 1 delay(1);
140 1 P0=data_table[11];P2=0x1f;
141 1 //P2=0xf7;
142 1 delay(1);/**/
143 1 }
*** WARNING C173 IN LINE 143 OF 1.C: missing return-expression
144 /*void time0(void) interrupt 1
145 {
146 TH0=20000/256;
147 TL0=20000%256;
148 display(s);
149 if(tplsb==1) P1=0xf0;
150 delay(1000);
151 }*/
152 void main(void)
153 { //uchar i;
154 1 //P0=0x00;
155 1 //P2=0xff;
156 1 /* TMOD=0x01;
157 1 TR0=1;
158 1 EA=1;
159 1 ET0=1;
160 1 TH0=20000/256;
161 1 TL0=20000%256;*/
162 1 //do
163 1 //{
164 1 diao=0;
165 1 delay(1); //延时1ms
166 1 convert(); //启动温度转换,需要750ms
167 1 delay(1000); //延时1s
168 1 RdTemp(); //读取温度
169 1 while(1)
170 1 {display(s);diao=1;}
171 1 //}
172 1 //while(1);
173 1 }
174
175
176
177
178
C51 COMPILER V7.06 1 01/22/2008 23:08:41 PAGE 4
179
180
181
182
183
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 391 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -