📄 baro.lst
字号:
C51 COMPILER V7.50 BARO 08/26/2006 16:36:54 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE BARO
OBJECT MODULE PLACED IN baro.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE baro.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 /***************************************************
2 7段数码管动态显示程序
3 ***************************************************/
4 #include <reg52.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <absacc.h>
8 #include <ctype.h>
9 #include <string.h>
10 #include <stddef.h>
11 #include <intrins.h>
12 #include <absacc.h>
13 #include <stdarg.h>
14
15
16 #define TIMER0H 0xFF;
17 #define TIMER0L 0xE9;
18 sbit MCLK=P1^4 ;
19 sbit SCLK=P1^5 ;
20 sbit DI=P1^6 ;
21 sbit DOUT=P1^7 ;
22
23
24 #define CLKDELAY 5
25 #define RDINTERVAL 100
26 #define FILTERPARA 0.125
27
28 ////**** SPI接口DI线读不同内容时的输出数据× ****////
29 const unsigned char SPI_RST[21]={1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0};
30 const unsigned char SPI_D1[12]={1,1,1,1,0,1,0,0,0,0,0,0};
31 const unsigned char SPI_D2[12]={1,1,1,1,0,0,1,0,0,0,0,0};
32 const unsigned char SPI_W1[12]={1,1,1,0,1,0,1,0,1,0,0,0};
33 const unsigned char SPI_W2[12]={1,1,1,0,1,0,1,1,0,0,0,0};
34 const unsigned char SPI_W3[12]={1,1,1,0,1,1,0,0,1,0,0,0};
35 const unsigned char SPI_W4[12]={1,1,1,0,1,1,0,1,0,0,0,0};
36 ////**** 气压高度转换表 ****////
37 const unsigned char SPI_HT[23][4]={ 1000, 1130, 12256, 16212 ,
38 1130, 1300, 10758, 15434 ,
39 1300, 1500, 9329, 14541 ,
40 1500, 1730, 8085, 13630 ,
41 1730, 2000, 7001, 12722 ,
42 2000, 2300, 6069, 11799 ,
43 2300, 2650, 5360, 10910 ,
44 2650, 3000, 4816, 9994 ,
45 3000, 3350, 4371, 9171 ,
46 3350, 3700, 4020, 8424 ,
47 3700, 4100, 3702, 7737 ,
48 4100, 4500, 3420, 7014 ,
49 4500, 5000, 3158, 6346 ,
50 5000, 5500, 2908, 5575 ,
51 5500, 6000, 2699, 4865 ,
52 6000, 6500, 2523, 4206 ,
53 6500, 7100, 2359, 3590 ,
54 7100, 7800, 2188, 2899 ,
55 7800, 8500, 2033, 2151 ,
C51 COMPILER V7.50 BARO 08/26/2006 16:36:54 PAGE 2
56 8500, 9200, 1905, 1456 ,
57 9200, 9700, 1802, 805 ,
58 9700, 10300, 1720, 365 ,
59 10300, 11000, 1638, -139
60 };
61 unsigned int d1,d2,w1,w2,w3,w4;
62 ////**** SPI口CLK延迟宽度子程序 ****????
63 void spi_dly(int num)
64 { int i;
65 1
66 1 for(i=0;i<num;i++)
67 1 { i=i;
68 2 }
69 1 }
70 ////**** SPI口初始化 **
71 void spi_set(void)
72 {
73 1 SCLK=0;
74 1 DI=0;
75 1
76 1 }
77 void spi_reset(void)
78 { int i;
79 1
80 1 spi_dly(10);
81 1 for(i=0;i<21;i++)
82 1 {
83 2 DI=SPI_RST[i];
84 2 spi_dly(CLKDELAY);
85 2 SCLK=1;
86 2 spi_dly(CLKDELAY);
87 2 SCLK=0;
88 2 }
89 1 spi_dly(CLKDELAY);
90 1 spi_dly(CLKDELAY*10);
91 1 }
92 unsigned int spi_rdd(unsigned char num)
93 { unsigned int retval;
94 1 int i;
95 1 unsigned char rdbit;
96 1
97 1 spi_dly(CLKDELAY);
98 1 for(i=0;i<12;i++)
99 1 { if(num==0)
100 2 {
101 3 DI=SPI_D1[i];
102 3 }
103 2 else if(num==1)
104 2 {
105 3 DI=SPI_D2[i];
106 3 }
107 2 else
108 2 { retval=0;
109 3 return 0;
110 3 }
111 2 spi_dly(CLKDELAY);
112 2 SCLK=1;;
113 2 spi_dly(CLKDELAY);
114 2 SCLK=0;
115 2 }
116 1 spi_dly(CLKDELAY);
117 1 // wait adc conversion
C51 COMPILER V7.50 BARO 08/26/2006 16:36:54 PAGE 3
118 1
119 1 rdbit=DOUT;
120 1 while(rdbit==1)
121 1 {
122 2 rdbit=DOUT;
123 2 }
124 1 retval=0;
125 1 for(i=0;i<16;i++)
126 1 { SCLK=1;
127 2 spi_dly(CLKDELAY);
128 2 rdbit=DOUT;
129 2 SCLK=0;
130 2 spi_dly(CLKDELAY);
131 2 if(rdbit==0)
132 2 { retval=retval+0;
133 3 }
134 2 else
135 2 { retval=retval+1;
136 3 }
137 2 if(i<15)
138 2 {
139 3 retval=retval<<1;
140 3 }
141 2 }
142 1 return retval;
143 1 }
144 unsigned int spi_rdw(unsigned char num)
145 { unsigned int retval;
146 1 int i;
147 1 unsigned char rdbit;
148 1
149 1 spi_dly(CLKDELAY);
150 1 for(i=0;i<12;i++)
151 1 { if(num==0)
152 2 {
153 3 DI=SPI_W1[i];
154 3 }
155 2 else if(num==1)
156 2 {
157 3 DI=SPI_W2[i];
158 3 }
159 2 else if(num==2)
160 2 {
161 3 DI=SPI_W3[i];;
162 3 }
163 2 else if(num==3)
164 2 { DI=SPI_W4[i];
165 3 }
166 2 else
167 2 { retval=0;
168 3 return 0;
169 3 }
170 2 spi_dly(CLKDELAY);
171 2 SCLK=1;
172 2 spi_dly(CLKDELAY);
173 2 SCLK=0;;
174 2 }
175 1 spi_dly(CLKDELAY);
176 1 SCLK=1;
177 1 spi_dly(CLKDELAY);
178 1 SCLK=0;
179 1 for(i=0;i<10;i++)
C51 COMPILER V7.50 BARO 08/26/2006 16:36:54 PAGE 4
180 1 { rdbit=DOUT;
181 2 }
182 1 retval=0;
183 1 for(i=0;i<16;i++)
184 1 { SCLK=1;
185 2 spi_dly(CLKDELAY);
186 2 rdbit=DOUT;
187 2 SCLK=0;
188 2 spi_dly(CLKDELAY);
189 2 if(rdbit==0)
190 2 { retval=retval+0;
191 3 }
192 2 else
193 2 { retval=retval+1;
194 3 }
195 2 if(i<15)
196 2 {
197 3 retval=retval<<1;
198 3 }
199 2 }
200 1 return retval;
201 1 }
202 float spi_h(float p)
203 { int i,pos,flag;
204 1 float h;
205 1
206 1 flag=0;
207 1 for(i=0;i<23;i++)
208 1 { if((p>=SPI_HT[i][0])&&(p<=SPI_HT[i][1]))
209 2 { pos=i;
210 3 flag=1;
211 3 break;
212 3 }
213 2 }
214 1 if(flag!=1)
215 1 { if(p<SPI_HT[0][0])
216 2 { pos=0;
217 3 }
218 2 else if(p>SPI_HT[22][1])
219 2 { pos=22;
220 3 }
221 2 else
222 2 { pos=0;
223 3 }
224 2 }
225 1 h=SPI_HT[pos][3]-(p-SPI_HT[pos][0])*SPI_HT[pos][2]/2048;
226 1 return h;
227 1 }
228 void spi_proc(void)
229 { unsigned int c1,c2,c3,c4,c5,c6;
230 1 long utmp;
231 1 float dt,temp,off,sens,x,p,h;
232 1 float temp2,p2;
233 1
234 1 //printf("D1=%x D2=%x W1=%x W2=%x W3=%x W4=%x\r\n",d1,d2,w1,w2,w3,w4);
235 1 c1=(w1&0xfffe)>>1;
236 1 c2=((w3&0x003f)<<6)+((w4&0x003f)>>0);
237 1 c3=((w4&0xffc0)>>6);
238 1 c4=((w3&0xffc0)>>6);
239 1 c5=((w1&0x0001)<<10)+((w2&0xffc0)>>6);
240 1 c6=(w2&0x003f);
241 1 //printf("C1=%x C2=%x C3=%x C4=%x C5=%x C6=%x\r\n",c1,c2,c3,c4,c5,c6);
C51 COMPILER V7.50 BARO 08/26/2006 16:36:54 PAGE 5
242 1 utmp=8*c5+20224;
243 1 dt=(float)(d2-utmp);
244 1 temp=200+dt*(c6+50)/1024;
245 1 off=c2*4+((c4-512)*dt)/4096;
246 1 sens=c1+(c3*dt)/1024+24567;
247 1 x=(sens*(d1-7168))/16384-off;
248 1 p=x*10/32+250*10;
249 1
250 1 if(temp>450)
251 1 { temp2=3*(c6+24)*(450 - temp)*(450-temp)/1048576;
252 2 p2=temp2*(p-10000)/8192;
253 2 }
254 1 else if(temp<200)
255 1 { temp2=11*(c6+24)*(200-temp)*(200-temp)/1048576;
256 2 p2=3*temp2*(p-3500)/16384;
257 2 }
258 1 else
259 1 { temp2=0;
260 2 p2=0;
261 2 }
262 1 temp=temp-temp2;
263 1 p=p-p2;
264 1 h=spi_h(p);
265 1 }
266 void time0(void) interrupt 1
267 {
268 1
269 1 TL0 = TIMER0L;
270 1 TH0 = TIMER0H;
271 1 }
272 /* 初始化子程序 */
273 void init(void)
274 {
275 1 //timer0 init
276 1 TL0 = TIMER0L;
277 1 TH0 = TIMER0H;
278 1 TR0=1;
279 1 ET0=1;//test
280 1
281 1 TMOD=0x21;
282 1 // irq init
283 1 EX0=0;
284 1 IT0=0;
285 1 EX1=0;
286 1 IT1=0;
287 1
288 1 EA=1;
289 1
290 1 }
291 /* 主程序入口 */
292 int main(void)
293 { init();
294 1 spi_set();
295 1
296 1 while(1)
297 1 {
298 2 spi_reset();
299 2 spi_dly(RDINTERVAL);
300 2 w1=spi_rdw(0);
301 2 spi_dly(RDINTERVAL);
302 2 w2=spi_rdw(1);
303 2 spi_dly(RDINTERVAL);
C51 COMPILER V7.50 BARO 08/26/2006 16:36:54 PAGE 6
304 2 w3=spi_rdw(2);
305 2 spi_dly(RDINTERVAL);
306 2 w4=spi_rdw(3);
307 2 spi_dly(RDINTERVAL);
308 2 d1=spi_rdd(0);
309 2 spi_dly(RDINTERVAL);
310 2 d2=spi_rdd(1);
311 2 spi_dly(RDINTERVAL);
312 2 spi_proc();
313 2 }
314 1 }
315
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2274 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 197 65
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -