📄 getpower_m8.lis
字号:
0192 20900000 lds R2,_adc_first
0196 30900100 lds R3,_adc_first+1
019A 2220 tst R2
019C 11F4 brne X1
019E 3320 tst R3
01A0 51F0 breq L57
01A2 X1:
01A2 .dbline 147
01A2 .dbline 147
01A2 80910000 lds R24,_adc_first
01A6 90910100 lds R25,_adc_first+1
01AA 0197 sbiw R24,1
01AC 90930100 sts _adc_first+1,R25
01B0 80930000 sts _adc_first,R24
01B4 .dbline 148
01B4 1CC0 rjmp L58
01B6 L57:
01B6 .dbline 148
01B6 ; }else{adc_val = ADC & 0x3ff; //取AD值
01B6 .dbline 148
01B6 84B1 in R24,0x4
01B8 95B1 in R25,0x5
01BA 9370 andi R25,3
01BC 90930500 sts _adc_val+1,R25
01C0 80930400 sts _adc_val,R24
01C4 .dbline 149
01C4 ; if(adc_val==0x3ff){
01C4 80910400 lds R24,_adc_val
01C8 90910500 lds R25,_adc_val+1
01CC 8F3F cpi R24,255
01CE E3E0 ldi R30,3
01D0 9E07 cpc R25,R30
01D2 69F4 brne L59
01D4 .dbline 149
01D4 .dbline 150
01D4 ; Power_Low=0;
01D4 2224 clr R2
01D6 3324 clr R3
01D8 30920300 sts _Power_Low+1,R3
01DC 20920200 sts _Power_Low,R2
01E0 .dbline 151
01E0 ; DDRB|=(1<<PB1);
01E0 B99A sbi 0x17,1
01E2 .dbline 152
01E2 ; PORTB|=(1<<PB1);
01E2 C19A sbi 0x18,1
01E4 .dbline 153
01E4 ; ms(500);
01E4 04EF ldi R16,500
01E6 11E0 ldi R17,1
01E8 6CDF rcall _ms
01EA .dbline 154
01EA ; PORTB&=(~(1<<PB1));
01EA C198 cbi 0x18,1
01EC .dbline 155
01EC ; DDRB&=(~(1<<PB1));
01EC B998 cbi 0x17,1
01EE .dbline 156
01EE ; }
01EE L59:
01EE .dbline 158
01EE L58:
01EE .dbline -2
01EE L56:
01EE 00D0 rcall pop_lset
01F0 .dbline 0 ; func end
01F0 1895 reti
01F2 .dbend
01F2 .dbfunc e AC_init _AC_init fV
.even
01F2 _AC_init::
01F2 .dbline -1
01F2 .dbline 163
01F2 ;
01F2 ; }
01F2 ; }
01F2 ; /////////////////////////////////////////////////////////////////////////////////
01F2 ; //比较器 初始化
01F2 ; void AC_init(void)
01F2 ; {
01F2 .dbline 164
01F2 ; DDRD&=0x3F;//设PD6,PD7口为高阻输入
01F2 81B3 in R24,0x11
01F4 8F73 andi R24,63
01F6 81BB out 0x11,R24
01F8 .dbline 165
01F8 ; PORTD&=0X3F;
01F8 82B3 in R24,0x12
01FA 8F73 andi R24,63
01FC 82BB out 0x12,R24
01FE .dbline 166
01FE ; ACSR|=(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0);//比较器中断允许,输出上升沿触发
01FE 88B1 in R24,0x8
0200 8B60 ori R24,11
0202 88B9 out 0x8,R24
0204 .dbline -2
0204 L61:
0204 .dbline 0 ; func end
0204 0895 ret
0206 .dbend
.area vector(rom, abs)
.org 32
0020 03C1 rjmp _ac_isr
.area text(rom, con, rel)
0206 .dbfile E:\GetPower_M8_source\GetPower_M8.c
0206 .dbfunc e ac_isr _ac_isr fV
.even
0206 _ac_isr::
0206 00D0 rcall push_lset
0208 .dbline -1
0208 .dbline 173
0208 ; }
0208 ;
0208 ; /////////////////////////////////////////////////////////////////////////////////
0208 ; //比较器中断处理
0208 ; #pragma interrupt_handler ac_isr:iv_ANA_COMP
0208 ; void ac_isr(void)
0208 ; {
0208 .dbline 174
0208 ; Power_Low=1;
0208 81E0 ldi R24,1
020A 90E0 ldi R25,0
020C 90930300 sts _Power_Low+1,R25
0210 80930200 sts _Power_Low,R24
0214 .dbline 175
0214 ; DDRB|=(1<<PB2);
0214 BA9A sbi 0x17,2
0216 .dbline 176
0216 ; PORTB|=(1<<PB2);
0216 C29A sbi 0x18,2
0218 .dbline 177
0218 ; ms(500);
0218 04EF ldi R16,500
021A 11E0 ldi R17,1
021C 52DF rcall _ms
021E .dbline 178
021E ; PORTB&=(~(1<<PB2));
021E C298 cbi 0x18,2
0220 .dbline 179
0220 ; DDRB&=(~(1<<PB2));
0220 BA98 cbi 0x17,2
0222 .dbline -2
0222 L62:
0222 00D0 rcall pop_lset
0224 .dbline 0 ; func end
0224 1895 reti
0226 .dbend
0226 .dbfunc e wdt_init _wdt_init fV
.even
0226 _wdt_init::
0226 .dbline -1
0226 .dbline 184
0226 ;
0226 ; }
0226 ; /////////////////////////////////////////////////////////////////////////////////
0226 ; void wdt_init(void)
0226 ; {
0226 .dbline 185
0226 ; WDR();//喂狗
0226 A895 wdr
0228 .dbline 186
0228 ; WDTCR|=(BIT(WDCE)|BIT(WDE));
0228 81B5 in R24,0x21
022A 8861 ori R24,24
022C 81BD out 0x21,R24
022E .dbline 187
022E ; WDTCR=BIT(WDP2)|BIT(WDP1)|BIT(WDP0)|BIT(WDE);
022E 8FE0 ldi R24,15
0230 81BD out 0x21,R24
0232 .dbline -2
0232 L63:
0232 .dbline 0 ; func end
0232 0895 ret
0234 .dbend
0234 .dbfunc e main _main fV
.even
0234 _main::
0234 .dbline -1
0234 .dbline 194
0234 ; }
0234 ;
0234 ;
0234 ; /////////////////////////////////////////////////////////////
0234 ;
0234 ; void main(void)
0234 ; {
0234 .dbline 195
0234 ; CLI();
0234 F894 cli
0236 .dbline 196
0236 ; wdt_init();
0236 F7DF rcall _wdt_init
0238 .dbline 197
0238 ; adc_init();
0238 94DF rcall _adc_init
023A .dbline 198
023A ; AC_init();
023A DBDF rcall _AC_init
023C .dbline 199
023C ; WDR();
023C A895 wdr
023E .dbline 200
023E ; DDRD|=(1<<PD3);//Led指示
023E 8B9A sbi 0x11,3
0240 .dbline 201
0240 ; SEI();
0240 7894 sei
0242 .dbline 202
0242 ; ac_isr();
0242 E1DF rcall _ac_isr
0244 .dbline 203
0244 ; Power_Low=1;
0244 81E0 ldi R24,1
0246 90E0 ldi R25,0
0248 90930300 sts _Power_Low+1,R25
024C 80930200 sts _Power_Low,R24
0250 14C0 rjmp L66
0252 L65:
0252 .dbline 204
0252 ; while(1){
0252 .dbline 205
0252 ; WDR();
0252 A895 wdr
0254 .dbline 206
0254 ; LED_H;
0254 939A sbi 0x12,3
0256 .dbline 207
0256 ; ms(3000);
0256 08EB ldi R16,3000
0258 1BE0 ldi R17,11
025A 33DF rcall _ms
025C .dbline 208
025C 20900200 lds R2,_Power_Low
0260 30900300 lds R3,_Power_Low+1
0264 2220 tst R2
0266 21F4 brne L68
0268 3320 tst R3
026A 11F4 brne L68
026C X2:
026C .dbline 208
026C .dbline 208
026C 0000 nop
026E .dbline 208
026E 01C0 rjmp L69
0270 L68:
0270 .dbline 208
0270 ; if(!Power_Low){NOP();}else{ADCSRA|=(1<<ADSC);}
0270 .dbline 208
0270 369A sbi 0x6,6
0272 .dbline 208
0272 L69:
0272 .dbline 209
0272 9398 cbi 0x12,3
0274 .dbline 210
0274 08EB ldi R16,3000
0276 1BE0 ldi R17,11
0278 24DF rcall _ms
027A .dbline 211
027A L66:
027A .dbline 204
027A EBCF rjmp L65
027C X3:
027C .dbline -2
027C L64:
027C .dbline 0 ; func end
027C 0895 ret
027E .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\GetPower_M8_source\GetPower_M8.c
0000 _adc_first:
0000 .blkb 2
0002 .dbsym s adc_first _adc_first i
0002 _Power_Low:
0002 .blkb 2
0004 .dbsym s Power_Low _Power_Low I
0004 _adc_val:
0004 .blkb 2
0006 .dbsym s adc_val _adc_val i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -