📄 main.lss
字号:
210: 80 93 84 00 sts 0x0084, r24
time_5ms = 1;
214: 81 e0 ldi r24, 0x01 ; 1
216: 80 93 08 01 sts 0x0108, r24
buz_t ++;
21a: 80 91 0a 01 lds r24, 0x010A
21e: 8f 5f subi r24, 0xFF ; 255
220: 80 93 0a 01 sts 0x010A, r24
if(buz_t>buz) TCCR2B = 0x00;
224: 90 91 02 01 lds r25, 0x0102
228: 98 17 cp r25, r24
22a: 10 f4 brcc .+4 ; 0x230 <__vector_13+0x36>
22c: 10 92 b1 00 sts 0x00B1, r1
230: 9f 91 pop r25
232: 8f 91 pop r24
234: 0f 90 pop r0
236: 0f be out 0x3f, r0 ; 63
238: 0f 90 pop r0
23a: 1f 90 pop r1
23c: 18 95 reti
0000023e <key_set>:
}
/*---------------------------------------------------------------
按键扫描
----------------------------------------------------------------*/
void key_set(void)
{
uchar temp;
temp = PIND & 0xC0;
23e: 89 b1 in r24, 0x09 ; 9
240: 80 7c andi r24, 0xC0 ; 192
if(temp==0x80) key1 ++;
242: 80 38 cpi r24, 0x80 ; 128
244: 31 f4 brne .+12 ; 0x252 <key_set+0x14>
246: 80 91 06 01 lds r24, 0x0106
24a: 8f 5f subi r24, 0xFF ; 255
24c: 80 93 06 01 sts 0x0106, r24
250: 0a c0 rjmp .+20 ; 0x266 <key_set+0x28>
else key1 = 0;
252: 10 92 06 01 sts 0x0106, r1
if(temp==0x40) key2 ++;
256: 80 34 cpi r24, 0x40 ; 64
258: 31 f4 brne .+12 ; 0x266 <key_set+0x28>
25a: 80 91 0b 01 lds r24, 0x010B
25e: 8f 5f subi r24, 0xFF ; 255
260: 80 93 0b 01 sts 0x010B, r24
264: 08 95 ret
else key2 = 0;
266: 10 92 0b 01 sts 0x010B, r1
26a: 08 95 ret
0000026c <key>:
}
/*---------------------------------------------------------------
按键处理
----------------------------------------------------------------*/
void key(void)
{
uchar i;
i = PIND & 0xC0;
26c: 99 b1 in r25, 0x09 ; 9
26e: 90 7c andi r25, 0xC0 ; 192
if(key1>3 && (i==0xc0))
270: 80 91 06 01 lds r24, 0x0106
274: 84 30 cpi r24, 0x04 ; 4
276: d0 f0 brcs .+52 ; 0x2ac <key+0x40>
278: 90 3c cpi r25, 0xC0 ; 192
27a: c1 f4 brne .+48 ; 0x2ac <key+0x40>
{
key1 = 0;
27c: 10 92 06 01 sts 0x0106, r1
buz_set(40);
280: 88 e2 ldi r24, 0x28 ; 40
282: 44 df rcall .-376 ; 0x10c <buz_set>
power = !power;
284: 90 e0 ldi r25, 0x00 ; 0
286: 80 91 03 01 lds r24, 0x0103
28a: 88 23 and r24, r24
28c: 09 f4 brne .+2 ; 0x290 <key+0x24>
28e: 91 e0 ldi r25, 0x01 ; 1
290: 90 93 03 01 sts 0x0103, r25
charge = 0;
294: 10 92 10 01 sts 0x0110, r1
298: 10 92 0f 01 sts 0x010F, r1
stop = 0;
29c: 10 92 11 01 sts 0x0111, r1
CLR_LED2;
2a0: 2f 98 cbi 0x05, 7 ; 5
pwm_data = 0;
2a2: 10 92 12 01 sts 0x0112, r1
time_min = 0;
2a6: 10 92 04 01 sts 0x0104, r1
2aa: 13 c0 rjmp .+38 ; 0x2d2 <key+0x66>
}
else if(key2>3 && (i==0xc0))
2ac: 80 91 0b 01 lds r24, 0x010B
2b0: 84 30 cpi r24, 0x04 ; 4
2b2: 78 f0 brcs .+30 ; 0x2d2 <key+0x66>
2b4: 90 3c cpi r25, 0xC0 ; 192
2b6: 69 f4 brne .+26 ; 0x2d2 <key+0x66>
{
key2 = 0;
2b8: 10 92 0b 01 sts 0x010B, r1
buz_set(20);
2bc: 84 e1 ldi r24, 0x14 ; 20
2be: 26 df rcall .-436 ; 0x10c <buz_set>
mode ++;
2c0: 80 91 05 01 lds r24, 0x0105
2c4: 8f 5f subi r24, 0xFF ; 255
2c6: 80 93 05 01 sts 0x0105, r24
if(mode>=3) mode = 0;
2ca: 83 30 cpi r24, 0x03 ; 3
2cc: 10 f0 brcs .+4 ; 0x2d2 <key+0x66>
2ce: 10 92 05 01 sts 0x0105, r1
}
if(mode==0)
2d2: 80 91 05 01 lds r24, 0x0105
2d6: 88 23 and r24, r24
2d8: 71 f4 brne .+28 ; 0x2f6 <key+0x8a>
{
IREF = 98;//93;
2da: 82 e6 ldi r24, 0x62 ; 98
2dc: 90 e0 ldi r25, 0x00 ; 0
2de: 90 93 0e 01 sts 0x010E, r25
2e2: 80 93 0d 01 sts 0x010D, r24
stop_num = 10;
2e6: 8a e0 ldi r24, 0x0A ; 10
2e8: 80 93 0c 01 sts 0x010C, r24
PORTD &= 0xE0;
2ec: 8b b1 in r24, 0x0b ; 11
2ee: 80 7e andi r24, 0xE0 ; 224
2f0: 8b b9 out 0x0b, r24 ; 11
SET_LED3;
2f2: 5a 9a sbi 0x0b, 2 ; 11
2f4: 08 95 ret
}
else if(mode==1)
2f6: 81 30 cpi r24, 0x01 ; 1
2f8: 71 f4 brne .+28 ; 0x316 <__stack+0x17>
{
IREF = 190;
2fa: 8e eb ldi r24, 0xBE ; 190
2fc: 90 e0 ldi r25, 0x00 ; 0
2fe: 90 93 0e 01 sts 0x010E, r25
302: 80 93 0d 01 sts 0x010D, r24
stop_num = 8;
306: 88 e0 ldi r24, 0x08 ; 8
308: 80 93 0c 01 sts 0x010C, r24
PORTD &= 0xE0;
30c: 8b b1 in r24, 0x0b ; 11
30e: 80 7e andi r24, 0xE0 ; 224
310: 8b b9 out 0x0b, r24 ; 11
SET_LED4;
312: 5b 9a sbi 0x0b, 3 ; 11
314: 08 95 ret
}
else if(mode==2)
316: 82 30 cpi r24, 0x02 ; 2
318: 69 f4 brne .+26 ; 0x334 <__stack+0x35>
{
IREF = 350;
31a: 8e e5 ldi r24, 0x5E ; 94
31c: 91 e0 ldi r25, 0x01 ; 1
31e: 90 93 0e 01 sts 0x010E, r25
322: 80 93 0d 01 sts 0x010D, r24
stop_num = 4;
326: 84 e0 ldi r24, 0x04 ; 4
328: 80 93 0c 01 sts 0x010C, r24
PORTD &= 0xE0;
32c: 8b b1 in r24, 0x0b ; 11
32e: 80 7e andi r24, 0xE0 ; 224
330: 8b b9 out 0x0b, r24 ; 11
SET_LED5;
332: 5c 9a sbi 0x0b, 4 ; 11
334: 08 95 ret
00000336 <main>:
}
}
/*---------------------------------------------------------------
main
----------------------------------------------------------------*/
void main(void)
{
336: cf ef ldi r28, 0xFF ; 255
338: d2 e0 ldi r29, 0x02 ; 2
33a: de bf out 0x3e, r29 ; 62
33c: cd bf out 0x3d, r28 ; 61
uchar i;
delay(50);
33e: 82 e3 ldi r24, 0x32 ; 50
340: 90 e0 ldi r25, 0x00 ; 0
342: cd de rcall .-614 ; 0xde <delay>
init_devices();
344: b0 de rcall .-672 ; 0xa6 <init_devices>
buz_set(400);
346: 80 e9 ldi r24, 0x90 ; 144
348: e1 de rcall .-574 ; 0x10c <buz_set>
while(1)
{
key();
34a: 90 df rcall .-224 ; 0x26c <key>
if(time_5ms)
34c: 80 91 08 01 lds r24, 0x0108
350: 88 23 and r24, r24
352: d9 f3 breq .-10 ; 0x34a <main+0x14>
{
time_5ms = 0;
354: 10 92 08 01 sts 0x0108, r1
key_set();
358: 72 df rcall .-284 ; 0x23e <key_set>
I_auto_set();
35a: e0 de rcall .-576 ; 0x11c <I_auto_set>
time_1s ++;
35c: 80 91 07 01 lds r24, 0x0107
360: 8f 5f subi r24, 0xFF ; 255
362: 80 93 07 01 sts 0x0107, r24
if(time_1s>=200)
366: 88 3c cpi r24, 0xC8 ; 200
368: 80 f0 brcs .+32 ; 0x38a <main+0x54>
{
time_1s = 0;
36a: 10 92 07 01 sts 0x0107, r1
time_min ++;
36e: 80 91 04 01 lds r24, 0x0104
372: 8f 5f subi r24, 0xFF ; 255
374: 80 93 04 01 sts 0x0104, r24
charge ++;
378: 80 91 0f 01 lds r24, 0x010F
37c: 90 91 10 01 lds r25, 0x0110
380: 01 96 adiw r24, 0x01 ; 1
382: 90 93 10 01 sts 0x0110, r25
386: 80 93 0f 01 sts 0x010F, r24
}
if(time_min >60)
38a: 80 91 04 01 lds r24, 0x0104
38e: 8d 33 cpi r24, 0x3D ; 61
390: 18 f0 brcs .+6 ; 0x398 <main+0x62>
{
time_min = 0;
392: 10 92 04 01 sts 0x0104, r1
V_auto_set();
396: ed de rcall .-550 ; 0x172 <V_auto_set>
}
if(charge>3600)
398: 80 91 0f 01 lds r24, 0x010F
39c: 90 91 10 01 lds r25, 0x0110
3a0: 81 51 subi r24, 0x11 ; 17
3a2: 9e 40 sbci r25, 0x0E ; 14
3a4: 90 f2 brcs .-92 ; 0x34a <main+0x14>
{
power = 0;
3a6: 10 92 03 01 sts 0x0103, r1
SET_LED2;
3aa: 2f 9a sbi 0x05, 7 ; 5
charge = 0;
3ac: 10 92 10 01 sts 0x0110, r1
3b0: 10 92 0f 01 sts 0x010F, r1
3b4: ca cf rjmp .-108 ; 0x34a <main+0x14>
000003b6 <adc_int>:
void adc_int(void)
{
ADMUX = 0x40; //set adc power avcc and the ref is Avref
3b6: 80 e4 ldi r24, 0x40 ; 64
3b8: 80 93 7c 00 sts 0x007C, r24
ADCSRA = 0xC7; //enable adc and the div parame is 8
3bc: 87 ec ldi r24, 0xC7 ; 199
3be: 80 93 7a 00 sts 0x007A, r24
3c2: 08 95 ret
000003c4 <adc_colect>:
}
/*---------------------------------------------------------------
ADC
----------------------------------------------------------------*/
uint adc_colect(uchar chanal)
{
uchar i;
uint ad_add;
uint temp,temp1;
uint adh;
if(chanal==0) ADMUX = CH0;
3c4: 88 23 and r24, r24
3c6: 11 f4 brne .+4 ; 0x3cc <adc_colect+0x8>
3c8: 80 ec ldi r24, 0xC0 ; 192
3ca: 1b c0 rjmp .+54 ; 0x402 <adc_colect+0x3e>
else if(chanal==1) ADMUX = CH1;
3cc: 81 30 cpi r24, 0x01 ; 1
3ce: 11 f4 brne .+4 ; 0x3d4 <adc_colect+0x10>
3d0: 81 ec ldi r24, 0xC1 ; 193
3d2: 17 c0 rjmp .+46 ; 0x402 <adc_colect+0x3e>
else if(chanal==2) ADMUX = CH2;
3d4: 82 30 cpi r24, 0x02 ; 2
3d6: 11 f4 brne .+4 ; 0x3dc <adc_colect+0x18>
3d8: 82 ec ldi r24, 0xC2 ; 194
3da: 13 c0 rjmp .+38 ; 0x402 <adc_colect+0x3e>
else if(chanal==3) ADMUX = CH3;
3dc: 83 30 cpi r24, 0x03 ; 3
3de: 11 f4 brne .+4 ; 0x3e4 <adc_colect+0x20>
3e0: 83 ec ldi r24, 0xC3 ; 195
3e2: 0f c0 rjmp .+30 ; 0x402 <adc_colect+0x3e>
else if(chanal==4) ADMUX = CH4;
3e4: 84 30 cpi r24, 0x04 ; 4
3e6: 11 f4 brne .+4 ; 0x3ec <adc_colect+0x28>
3e8: 84 ec ldi r24, 0xC4 ; 196
3ea: 0b c0 rjmp .+22 ; 0x402 <adc_colect+0x3e>
else if(chanal==5) ADMUX = CH5;
3ec: 85 30 cpi r24, 0x05 ; 5
3ee: 11 f4 brne .+4 ; 0x3f4 <adc_colect+0x30>
3f0: 85 ec ldi r24, 0xC5 ; 197
3f2: 07 c0 rjmp .+14 ; 0x402 <adc_colect+0x3e>
else if(chanal==6) ADMUX = CH6;
3f4: 86 30 cpi r24, 0x06 ; 6
3f6: 11 f4 brne .+4 ; 0x3fc <adc_colect+0x38>
3f8: 86 ec ldi r24, 0xC6 ; 198
3fa: 03 c0 rjmp .+6 ; 0x402 <adc_colect+0x3e>
else if(chanal==7) ADMUX = CH7;
3fc: 87 30 cpi r24, 0x07 ; 7
3fe: 19 f4 brne .+6 ; 0x406 <adc_colect+0x42>
400: 87 ec ldi r24, 0xC7 ; 199
402: 80 93 7c 00 sts 0x007C, r24
ad_add = 0;
406: 40 e0 ldi r20, 0x00 ; 0
408: 50 e0 ldi r21, 0x00 ; 0
for(i=0;i<8;i++)
40a: 30 e0 ldi r19, 0x00 ; 0
{
ADCSRA = ADCSRA|(1<<ADSC); //start the adc
40c: 80 91 7a 00 lds r24, 0x007A
410: 80 64 ori r24, 0x40 ; 64
412: 80 93 7a 00 sts 0x007A, r24
while(ADCSRA&(1<<ADSC)); //wait for the adc finish
416: 80 91 7a 00 lds r24, 0x007A
41a: 86 fd sbrc r24, 6
41c: fc cf rjmp .-8 ; 0x416 <adc_colect+0x52>
ADCSRA = ADCSRA|(1<<ADSC); //start the adc
41e: 80 91 7a 00 lds r24, 0x007A
422: 80 64 ori r24, 0x40 ; 64
424: 80 93 7a 00 sts 0x007A, r24
while(ADCSRA&(1<<ADSC)); //wait for the adc finish
428: 80 91 7a 00 lds r24, 0x007A
42c: 86 fd sbrc r24, 6
42e: fc cf rjmp .-8 ; 0x428 <adc_colect+0x64>
temp1 = ADCL;
430: 20 91 78 00 lds r18, 0x0078
temp = (ADCH&0x03)<<8;
434: 80 91 79 00 lds r24, 0x0079
438: 99 27 eor r25, r25
43a: 83 70 andi r24, 0x03 ; 3
43c: 90 70 andi r25, 0x00 ; 0
43e: 98 2f mov r25, r24
440: 88 27 eor r24, r24
temp += temp1;
442: 82 0f add r24, r18
444: 91 1d adc r25, r1
ad_add += temp;
446: 48 0f add r20, r24
448: 59 1f adc r21, r25
44a: 3f 5f subi r19, 0xFF ; 255
44c: 38 30 cpi r19, 0x08 ; 8
44e: f0 f2 brcs .-68 ; 0x40c <adc_colect+0x48>
}
adh = ad_add>>3;
return(adh);
}
450: ca 01 movw r24, r20
452: 23 e0 ldi r18, 0x03 ; 3
454: 96 95 lsr r25
456: 87 95 ror r24
458: 2a 95 dec r18
45a: e1 f7 brne .-8 ; 0x454 <adc_colect+0x90>
45c: 08 95 ret
0000045e <timer0_init>:
// desired value: 1Hz
// actual value: Out of range
void timer0_init(void) // PWM
{
TCCR0B = 0x00; //stop
45e: 15 bc out 0x25, r1 ; 37
TCNT0 = 0x01; //set count
460: 81 e0 ldi r24, 0x01 ; 1
462: 86 bd out 0x26, r24 ; 38
TCCR0A = 0x23;
464: 83 e2 ldi r24, 0x23 ; 35
466: 84 bd out 0x24, r24 ; 36
OCR0A = 0xff;
468: 8f ef ldi r24, 0xFF ; 255
46a: 87 bd out 0x27, r24 ; 39
46c: 08 95 ret
0000046e <Pwm_set>:
}
/*---------------------------------------------------------------
PWM 占空比设置
----------------------------------------------------------------*/
void Pwm_set(uchar pwm)
{
OCR0B = pwm;
46e: 88 bd out 0x28, r24 ; 40
if(TCCR0B == 0)
470: 85 b5 in r24, 0x25 ; 37
472: 88 23 and r24, r24
474: 21 f4 brne .+8 ; 0x47e <Pwm_set+0x10>
{
TCCR0A = 0x23;//0x23;
476: 83 e2 ldi r24, 0x23 ; 35
478: 84 bd out 0x24, r24 ; 36
TCCR0B = 0x01; //start timer
47a: 81 e0 ldi r24, 0x01 ; 1
47c: 85 bd out 0x25, r24 ; 37
47e: 08 95 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -