📄 source.lst
字号:
C51 COMPILER V6.12 SOURCE 08/15/2004 20:14:19 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE SOURCE
OBJECT MODULE PLACED IN source.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE source.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include < stdio.h>
2 #include < stdlib.h>
3 #include <reg52.h>
4 #include <math.h>
5 sbit DSP_LOAD=P1^2;
6 sbit DSP_DIN=P1^3;
7 sbit DSP_CLK=P1^1;
8
9 sbit X_CS=P0^0;
10 sbit X_SCK=P0^3;
11 sbit X_SI=P0^4;
12 sbit X_SO=P0^1;
13 sbit X_WP=P0^2;
14
15 sbit AD_BUSY=P3^3;
16
17 sbit DA_CS=P0^6;
18 sbit DA_CLK=P0^5;
19 sbit DA_D=P0^7;
20
21 sbit S_UP=P1^5;
22 sbit S_VI=P1^4;
23 sbit S_DOWN=P1^6;
24 sbit S_FAST=P1^7;
25
26 sbit VI_S=P2^0;
27
28 #define ADI 0x80;
29 #define ADU 0x40;
30 #define ADH 0x20;
31 #define ADL 0x10;
32 #define SET_AD 0x08;
33
34
35
36
37 unsigned char ad_cnt;
38 unsigned int ad_vol;
39 unsigned int set_vol;
40 unsigned int adj_vol;
41 unsigned int check_adj;
42
43 bit ad_u;
44 bit enable_ad;
45
46 void x_write ( unsigned int x_address,unsigned char *psavedata,unsigned char amount) ;
47 unsigned char * x_read( unsigned int address ,unsigned char amount) ;
48 void x_wren_cmd (void);
49 void init_watchdog(unsigned char ch);
50 void x_outbyte( unsigned char ch);
51 unsigned char x_inbyte( void );
52 void wait(unsigned int time);
53 void init_cpu(void);
54 void disp_init(void);
55 void disp_outbyte(int outbytes);
C51 COMPILER V6.12 SOURCE 08/15/2004 20:14:19 PAGE 2
56 void display(unsigned int pos,unsigned int disp_code);
57 void disp_ad(unsigned int ad,unsigned char type);
58 void da_outbyte(unsigned int outbytes);
59 //void set_da(unsigned int vol);
60 unsigned char send_buf[7];
61 unsigned char rcv_buf[6];
62 unsigned char rcv_cnt;
63 unsigned char send_cnt;
64 void main(void)
65 {
66 1 unsigned char type,loop;
67 1 unsigned long is_power;
68 1 init_cpu();
69 1 disp_init();
70 1 da_outbyte(0);
71 1 init_watchdog(0);
72 1 if( is_power != 0x12345678)
73 1 {
74 2 enable_ad=1;
75 2 check_adj=10125;
76 2 ad_u=1;
77 2 set_vol=0;
78 2 adj_vol=0;
79 2 is_power = 0x12345678 ;
80 2 }
81 1 send_cnt=0;
82 1 rcv_cnt=0;
83 1 while(1)
84 1 {
85 2 if(S_VI == 0)
86 2 {
87 3 wait(100);
88 3 if(S_VI == 0)
89 3 {
90 4 ad_u=~ad_u;
91 4 if(ad_u) VI_S =1;
92 4 else VI_S=0;
93 4 set_vol=0;
94 4 adj_vol=0;
95 4 da_outbyte(0);
96 4 wait(400);
97 4 }
98 3 }
99 2 if((S_UP == 0) | (S_DOWN == 0))
100 2 {
101 3 wait(50);
102 3 if((S_UP == 0) | (S_DOWN == 0))
103 3 {
104 4 enable_ad=0;
105 4 type=SET_AD;
106 4 if(ad_u) { type=type | ADU; }
107 4 else { type=type | ADI; }
108 4 disp_ad(set_vol,type);
109 4 wait(400);
110 4 wait(400);
111 4 wait(200);
112 4
113 4 loop=0;
114 4 while(1)
115 4 {
116 5 type=SET_AD;
117 5 if(ad_u) { type=type | ADU; }
C51 COMPILER V6.12 SOURCE 08/15/2004 20:14:19 PAGE 3
118 5 else { type=type | ADI; }
119 5 disp_ad(set_vol,type);
120 5 if(S_UP == 0)
121 5 {
122 6 wait(50);
123 6 if(S_UP== 0)
124 6 {
125 7 loop=0;
126 7 if(S_FAST== 0) { set_vol=set_vol+1000; }
127 7 else { set_vol=set_vol+100; }
128 7 if (( set_vol > 60000) & (ad_u)) set_vol = 60000;
129 7 if (( set_vol > 24000) & (!ad_u)) set_vol = 24000;
130 7 }
131 6 }
132 5 if(S_DOWN == 0)
133 5 {
134 6 wait(50);
135 6 if(S_DOWN == 0)
136 6 {
137 7 loop=0;
138 7 if(S_FAST== 0)
139 7 {
140 8 if(set_vol>1000) { set_vol=set_vol-1000;}
141 8 else { set_vol=0; }
142 8 }
143 7 else
144 7 {
145 8 if(set_vol>100) { set_vol=set_vol-100;}
146 8 else { set_vol=0; }
147 8 }
148 7 }
149 6 }
150 5 wait(50);
151 5 loop++;
152 5 if(loop > 50) break;
153 5 X_CS=0;
154 5 X_CS=1;
155 5 }
156 4 enable_ad=1;
157 4 }
158 3 }
159 2 X_CS=0;
160 2 X_CS=1;
161 2 }
162 1 }
163 //////////////////////////////
164 //
165 //NAME: init_com
166 //DESCRIPTION: UART INTERRUPT SERVICE PROGRAM
167 //CALL:
168 //INPUT:
169 //OUTPUT:NONE
170 //
171 //
172 //send:H[L = ]U[I]XXXXX 7bytes ad volue
173 //receive:U[I]XXXXX 6bytes set ad volue
174 ///////////////////////////////
175 void init_com() interrupt 4
176 {
177 1 unsigned int i;
178 1 ES=0;
179 1 if(TI)
C51 COMPILER V6.12 SOURCE 08/15/2004 20:14:19 PAGE 4
180 1 {
181 2 if(send_cnt<7)
182 2 {
183 3 SBUF=send_buf[send_cnt];
184 3 send_cnt++;
185 3 }
186 2 TI=0;
187 2 }
188 1 if(RI)
189 1 {
190 2 rcv_buf[rcv_cnt]=SBUF;
191 2 if((rcv_buf[rcv_cnt] == 'U') | ( rcv_buf[rcv_cnt] == 'I'))
192 2 {
193 3 rcv_buf[0]=rcv_buf[rcv_cnt];
194 3 rcv_cnt=0;
195 3 }
196 2
197 2 rcv_cnt++;
198 2 if(rcv_cnt >= 6)
199 2 {
200 3 if((rcv_buf[0] == 'U' ) | (rcv_buf[0] == 'I' ))
201 3 {
202 4 if(rcv_buf[0] == 'U') ad_u=1;
203 4 else ad_u=0;
204 4 i=atoi(&rcv_buf[1]);
205 4 if((i > 60000) & (rcv_buf[0] == 'U')) i=60000;
206 4 if((i > 24000) & (rcv_buf[0] == 'I')) i=24000;
207 4 set_vol=i;
208 4 if(ad_u) VI_S =1;
209 4 else VI_S=0;
210 4 }
211 3 rcv_cnt=0;
212 3 }
213 2 RI=0;
214 2 }
215 1 ES=1;
216 1 }
217
218 //////////////////////////////
219 //
220 //NAME: da_outbyte(unsigned int outbytes)
221 //DESCRIPTION: output a word to da max5541
222 //CALL:
223 //INPUT: NONE
224 //OUTPUT:NONE
225 //
226 ///////////////////////////////
227 void da_outbyte(unsigned int outbytes)
228 {
229 1 unsigned char loop;
230 1 unsigned int itemp;
231 1 DA_CS=0;
232 1 for(loop = 0 ; loop < 16 ; loop++)
233 1 {
234 2 DA_CLK=0;
235 2 itemp=outbytes & 0x8000;
236 2 if ( itemp == 0 ) DA_D = 0 ;
237 2 else DA_D = 1 ;
238 2 DA_CLK=1;
239 2 outbytes=outbytes<<1;
240 2 }
241 1 DA_CLK=0;
C51 COMPILER V6.12 SOURCE 08/15/2004 20:14:19 PAGE 5
242 1 DA_CS=1;
243 1 }
244 //////////////////////////////
245 //
246 //NAME: init_cpu
247 //DESCRIPTION: init cpu
248 //CALL:
249 //INPUT: NONE
250 //OUTPUT:NONE
251 //
252 ///////////////////////////////
253 void init_cpu(void)
254 {
255 1 X_CS=1;
256 1 X_SO=1;
257 1 X_SCK=0;
258 1 X_SI=0;
259 1 X_WP=0;
260 1 DSP_LOAD=1;
261 1 DSP_CLK=0;
262 1 TL1=0;
263 1 TH1=0;
264 1 ad_cnt=0;
265 1 TR1=1;
266 1 TMOD=0x92;
267 1 ET1=1;
268 1 EX1=1;
269 1 IT1=1;
270 1 EA=1;
271 1
272 1 DA_CS=1;
273 1 DA_CLK=0;
274 1 DA_D=1;
275 1
276 1 SCON=0x50;
277 1 T2CON=0x30;//SET TIMER2 MODE FOR COM0
278 1 TH2=0xff; // ffdc for 9600 fffd for 115200 for 11.0592MHz
279 1 TL2=0xdc;
280 1 RCAP2H=0xff;
281 1 RCAP2L=0xdc;
282 1 TR2=1;
283 1 ES=1;
284 1
285 1
286 1
287 1
288 1
289 1 }
290 ///////////////////////////////
291 //
292 //NAME: init_1
293 //DESCRIPTION: INTERRUPT 1 SERVICE PROGRAM FOR AD COUNTER
294 //CALL:
295 //INPUT:
296 //OUTPUT:NONE
297 //
298 ///////////////////////////////
299 void init_1() interrupt 2
300 {
301 1 unsigned long vol;
302 1 unsigned char type;
303 1 unsigned long adj;
C51 COMPILER V6.12 SOURCE 08/15/2004 20:14:19 PAGE 6
304 1 TR1=0;
305 1
306 1 vol=ad_cnt;
307 1 vol=vol<<8;
308 1 vol=vol | TH1 ;
309 1 vol=vol << 8;
310 1 vol=vol | TL1;
311 1 vol=vol>>3;
312 1 if (vol > 10001)
313 1 {
314 2 vol=vol-10000;
315 2 if( ad_u )
316 2 {
317 3 vol=vol * 60000;
318 3 vol=vol/20001;
319 3 }
320 2 else
321 2 {
322 3 vol=vol*48000;
323 3 vol=vol/20001;
324 3 vol=vol*check_adj;
325 3 vol=vol/10000;
326 3 }
327 2 ad_vol=vol;
328 2 }
329 1 else
330 1 {
331 2 ad_vol=0;
332 2 }
333 1
334 1 if ( ad_u)
335 1 {
336 2 type = ADU;
337 2 send_buf[1]='U';
338 2 }
339 1 else
340 1 {
341 2 type = ADI;
342 2 send_buf[1]='I';
343 2 }
344 1 send_buf[0]='E';
345 1 if( abs(ad_vol - set_vol) > 0 )
346 1 {
347 2
348 2 if(ad_u)
349 2 {
350 3 if( ad_vol > set_vol )
351 3 {
352 4 type=type | ADH ;
353 4 send_buf[0]='H';
354 4 adj=ad_vol-set_vol;
355 4 vol=adj*65535;
356 4 vol=vol/120000;
357 4 if ( adj_vol > vol) adj=adj_vol-(unsigned int)vol;
358 4 else adj=0;
359 4 }
360 3 if( ad_vol < set_vol )
361 3 {
362 4 type=type | ADL ;
363 4 send_buf[0]='L';
364 4 adj=set_vol-ad_vol;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -