📄 a.lst
字号:
C51 COMPILER V6.12 A 03/18/2008 17:15:41 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE A
OBJECT MODULE PLACED IN .\a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\a.c DEBUG OBJECTEXTEND
stmt level source
1 #include <AT89X52.H>
2 #include <intrins.h>
3
4 unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
5
6
7
8 char info=23;
9 sbit DQ =P3^7; //定义通信端口 ;
10 bit LOG =0; //定义正负标志位;
11
12
13 unsigned char a[5]={11,11,11,11,11};
14 unsigned char temp_H,temp_L;//温度的高八位和低八位
15
16
17
18 void delay02s(void)
19 {
20 1 unsigned char i,j;
21 1 for(i=20;i>0;i--)
22 1 for(j=20;j>0;j--)
23 1 //for(k=248;k>0;k--)
24 1 ;
25 1 }
26
27
28
29 /*************************延时程序段************************/
30 void Delay(unsigned char times)
31 {
32 1 do{;}while(--times);
33 1 }
34
35 void dispchar(char infotext)
36 {
37 1
38 1 if (P3_0==0)
39 1 {
40 2 P3_1=0;
41 2 P2=dispcode[infotext/10];
42 2 delay02s();
43 2 P3_0=1;
44 2
45 2 } else
46 1 {
47 2 P3_0=0;
48 2 P2=dispcode[infotext%10];
49 2 delay02s();
50 2 P3_1=1;
51 2 }
52 1 delay02s();
53 1
54 1 }
55
C51 COMPILER V6.12 A 03/18/2008 17:15:41 PAGE 2
56
57 /******************复位时序或者说是初始化时序***************/
58 unsigned char reset(void)
59 {
60 1 unsigned char Answerback;
61 1 DQ = 0; //拉低单总线
62 1 Delay(240); //至少480us
63 1 DQ = 1; //释放单总线
64 1 Delay(15); //等待响应
65 1 Answerback=DQ; //得到器件响应
66 1 Delay(240); // 延迟480us
67 1 return(Answerback); //返回器件响应,0=有器件, 1 = 无器件
68 1 }
69
70 /****************从 1-wire 总线上读取一个字节***************/
71 unsigned char read_byte(void)
72 {
73 1 unsigned char i;
74 1 for (i=8;i>0;i--)
75 1 {
76 2 DQ = 0; //拉低 DQ,在15US之内就必须释放单总线。
77 2 DQ = 1; //再拉高,即释放单总线。
78 2 CY=DQ; //读取数据;
79 2 CY=ACC&0x01;//将数据循环右移
80 2 Delay(30); //不管是读1还是读0都至少需要60us的时间
81 2 }
82 1 return(ACC);//返回读出的数据
83 1 }
84
85 /*****************向 1-WIRE 总线上写一个字节*****************/
86 void write_byte(char val)
87 {
88 1 unsigned char i;ACC=val;
89 1 for (i=8;i>0;i--)
90 1 {
91 2 DQ = 0; //拉低单总线
92 2 CY= ACC&0x01;//从低位向高位依取出ACC的值
93 2
94 2 DQ =CY; //把CY的值赋给单总线,?
95 2 Delay(30); //至少需要60us的时间
96 2 DQ = 1;
97 2 }
98 1 Delay(30); //到120US之间。
99 1 }
100
101 /***********读取温度并且进行换算以及正负判断等***************/
102 void Read_Temperature(void)
103 {
104 1
105 1 while(reset()); //初始化
106 1 write_byte(0xCC); //跳过序列号检测
107 1 write_byte(0xBE); //读内部单元
108 1 temp_L=read_byte(); //低八位
109 1 temp_H=read_byte(); //高八位
110 1 while(reset()); //初始化
111 1
112 1 write_byte(0xCC); //跳过 ROM
113 1 write_byte(0x44); //开始温度转换
114 1
115 1 if((temp_H&0xf8)!=0x00)//判断是否为负。
116 1 {
117 2 LOG=1; //为1表示为负数;
C51 COMPILER V6.12 A 03/18/2008 17:15:41 PAGE 3
118 2 temp_H=~temp_H;
119 2 temp_L=~temp_L;
120 2 if(temp_L==255) //向高位进1;
121 2 {temp_H++;temp_L=0;}
122 2 else
123 2 {temp_L+=1;}
124 2 }
125 1
126 1 temp_H&=0x07;//由于最高可以测量125度所以只取temp_H的最高3位。
127 1 temp_H<<=4; //还原整数部分
128 1 temp_H+=temp_L>>4; //还原整数部分
129 1
130 1 temp_L=(temp_L&0x0f)*25/4;//小数部分0.06的整数倍
131 1
132 1 }
133
134
135 void main(void)
136 {
137 1 unsigned char result;
138 1 unsigned char x,n;
139 1
140 1
141 1
142 1 while(1)
143 1 {
144 2
145 2 Read_Temperature();
146 2
147 2
148 2
149 2
150 2
151 2 result=temp_H;
152 2 Delay(40000);
153 2
154 2 // for(n=2000;n>0;n--)
155 2 {
156 3
157 3
158 3 dispchar(result);
159 3 }
160 2
161 2
162 2
163 2
164 2
165 2 // dispchar(info);
166 2
167 2
168 2
169 2 // dispchar(info);
170 2
171 2
172 2 /*
173 2 while(result/10)//整数部分用数组A[0]~A[2]保存;
174 2 {
175 2 a[x]=result%10;
176 2 result/=10;x--;
177 2 }
178 2 a[x]=result;
179 2 */
C51 COMPILER V6.12 A 03/18/2008 17:15:41 PAGE 4
180 2
181 2 /*
182 2 Read_Temperature();
183 2 result=temp_H;
184 2 while(result/10)//整数部分用数组A[0]~A[2]保存;
185 2 {
186 2 a[x]=result%10;
187 2 result/=10;x--;
188 2 }
189 2 a[x]=result;
190 2
191 2
192 2
193 2
194 2 for(n=0;n<6;n++)//清除显示。以便重新装入显示代码
195 2 a[n]=11;
196 2 result=temp_H;
197 2 x=2;
198 2 while(result/10)//整数部分用数组A[0]~A[2]保存;
199 2 {
200 2 a[x]=result%10;
201 2 result/=10;x--;
202 2 }
203 2
204 2 if(LOG==1) //为温度负数LOG等于1
205 2 {
206 2 a[x-1]=10;//显示字符-表示为负;
207 2 LOG=0; //正负标志复位。
208 2 }
209 2 a[3]=temp_L/10;//小数部分用数组A[4]来储存;
210 2 a[4]=temp_L%10;//小数部分用数组A[5]来储存;
211 2 for(n=200;n>0;n--)
212 2 {Display();Display();
213 2 Display();Display();
214 2 } */
215 2
216 2 //dispchar(a[1]+a[0]*10);
217 2
218 2 }
219 1 }
*** WARNING C280 IN LINE 138 OF .\A.C: 'x': unreferenced local variable
*** WARNING C280 IN LINE 138 OF .\A.C: 'n': unreferenced local variable
220
221
222 /*
223 void t0(void) interrupt 1 using 0
224 {
225 TH0=(65536-4000)/256;
226 TL0=(65536-4000)%256;
227 P1=dispcode[dispbuf[dispcount]];
228 P2=dispbitcode[dispcount];
229 dispcount++;
230 if(dispcount==8)
231 {
232 dispcount=0;
233 }
234 }
235 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 261 ----
C51 COMPILER V6.12 A 03/18/2008 17:15:41 PAGE 5
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 3
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -