⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getpower_m8.lst

📁 感应取电的控制
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00D7 E604      LDI	R16,0x64
    00D8 E010      LDI	R17,0
    00D9 DFBB      RCALL	_ms
    00DA 5F4F      SUBI	R20,0xFF
    00DB 4F5F      SBCI	R21,0xFF
    00DC E00A      LDI	R16,0xA
    00DD E010      LDI	R17,0
    00DE 019B      MOVW	R18,R22
    00DF D093      RCALL	empy16s
    00E0 1740      CP	R20,R16
    00E1 0751      CPC	R21,R17
    00E2 F3A0      BCS	0x00D7
    00E3 D09F      RCALL	pop_gset2
    00E4 9508      RET
(0120) }
(0121) 
(0122) 
(0123) /////////////////////////////////////////////////////////////////////////////////
(0124) //	ADC		初始化
(0125) void adc_init(void)
(0126) {
(0127) 	adc_first =1;	
_adc_init:
    00E5 E081      LDI	R24,1
    00E6 E090      LDI	R25,0
    00E7 93900063  STS	adc_first+1,R25
    00E9 93800062  STS	adc_first,R24
(0128) 	adc_val = 0;
    00EB 2422      CLR	R2
    00EC 2433      CLR	R3
    00ED 92300067  STS	adc_val+1,R3
    00EF 92200066  STS	adc_val,R2
(0129) 
(0130) 	DDRC&=0xFE;//设PC0口为高阻输入
    00F1 B384      IN	R24,0x14
    00F2 7F8E      ANDI	R24,0xFE
    00F3 BB84      OUT	0x14,R24
(0131) 	PORTC&=0xFE;
    00F4 B385      IN	R24,0x15
    00F5 7F8E      ANDI	R24,0xFE
    00F6 BB85      OUT	0x15,R24
(0132) //	ADMUX=0x00;//选择外部2.47V为基准,ADC0通道
(0133) //	ACSR  =(1<<ACD);//关闭模拟比较器
(0134) //	SFIOR&=(~(1<<ADHSM)); //低速AD模式	
(0135) 	//64分频单次转换模式并开始第一次转换
(0136) 	ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
    00F7 B186      IN	R24,0x06
    00F8 688E      ORI	R24,0x8E
    00F9 B986      OUT	0x06,R24
    00FA 9508      RET
_adc_isr:
    00FB D0AA      RCALL	push_lset
(0137) 
(0138) }
(0139) 
(0140) /////////////////////////////////////////////////////////////////////////////////
(0141) //ADC完成中断
(0142) #pragma interrupt_handler adc_isr:iv_ADC
(0143) void adc_isr(void)
(0144) {
(0145) 	WDR();		
    00FC 95A8      WDR
(0146) 
(0147) 	if ( adc_first ){adc_first--;
    00FD 90200062  LDS	R2,adc_first
    00FF 90300063  LDS	R3,adc_first+1
    0101 2022      TST	R2
    0102 F411      BNE	0x0105
    0103 2033      TST	R3
    0104 F051      BEQ	0x010F
    0105 91800062  LDS	R24,adc_first
    0107 91900063  LDS	R25,adc_first+1
    0109 9701      SBIW	R24,1
    010A 93900063  STS	adc_first+1,R25
    010C 93800062  STS	adc_first,R24
(0148) 		}else{adc_val = ADC & 0x3ff;	//取AD值
    010E C01C      RJMP	0x012B
    010F B184      IN	R24,0x04
    0110 B195      IN	R25,0x05
    0111 7093      ANDI	R25,3
    0112 93900067  STS	adc_val+1,R25
    0114 93800066  STS	adc_val,R24
(0149) 			if(adc_val==0x3ff){
    0116 91800066  LDS	R24,adc_val
    0118 91900067  LDS	R25,adc_val+1
    011A 3F8F      CPI	R24,0xFF
    011B E0E3      LDI	R30,3
    011C 079E      CPC	R25,R30
    011D F469      BNE	0x012B
(0150) 					Power_Low=0;
    011E 2422      CLR	R2
    011F 2433      CLR	R3
    0120 92300065  STS	Power_Low+1,R3
    0122 92200064  STS	Power_Low,R2
(0151) 					DDRB|=(1<<PB1);
    0124 9AB9      SBI	0x17,1
(0152) 					PORTB|=(1<<PB1);
    0125 9AC1      SBI	0x18,1
(0153) 					ms(500);
    0126 EF04      LDI	R16,0xF4
    0127 E011      LDI	R17,1
    0128 DF6C      RCALL	_ms
(0154) 					PORTB&=(~(1<<PB1));
    0129 98C1      CBI	0x18,1
(0155) 					DDRB&=(~(1<<PB1));
    012A 98B9      CBI	0x17,1
(0156) 			}
(0157) 
(0158) 		}
    012B D091      RCALL	pop_lset
    012C 9518      RETI
(0159) }
(0160) /////////////////////////////////////////////////////////////////////////////////
(0161) //比较器    初始化
(0162) void AC_init(void)
(0163) {
(0164) 	DDRD&=0x3F;//设PD6,PD7口为高阻输入
_AC_init:
    012D B381      IN	R24,0x11
    012E 738F      ANDI	R24,0x3F
    012F BB81      OUT	0x11,R24
(0165) 	PORTD&=0X3F;
    0130 B382      IN	R24,0x12
    0131 738F      ANDI	R24,0x3F
    0132 BB82      OUT	0x12,R24
(0166) 	ACSR|=(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0);//比较器中断允许,输出上升沿触发
    0133 B188      IN	R24,0x08
    0134 608B      ORI	R24,0xB
    0135 B988      OUT	0x08,R24
    0136 9508      RET
_ac_isr:
    0137 D06E      RCALL	push_lset
(0167) }
(0168) 
(0169) /////////////////////////////////////////////////////////////////////////////////
(0170) //比较器中断处理
(0171) #pragma interrupt_handler ac_isr:iv_ANA_COMP 
(0172) void ac_isr(void)
(0173) {
(0174) 	Power_Low=1;
    0138 E081      LDI	R24,1
    0139 E090      LDI	R25,0
    013A 93900065  STS	Power_Low+1,R25
    013C 93800064  STS	Power_Low,R24
(0175) 	DDRB|=(1<<PB2);
    013E 9ABA      SBI	0x17,2
(0176) 	PORTB|=(1<<PB2);
    013F 9AC2      SBI	0x18,2
(0177) 	ms(500);
    0140 EF04      LDI	R16,0xF4
    0141 E011      LDI	R17,1
    0142 DF52      RCALL	_ms
(0178) 	PORTB&=(~(1<<PB2));
    0143 98C2      CBI	0x18,2
(0179) 	DDRB&=(~(1<<PB2));
    0144 98BA      CBI	0x17,2
    0145 D077      RCALL	pop_lset
    0146 9518      RETI
(0180) 	
(0181) }
(0182) /////////////////////////////////////////////////////////////////////////////////
(0183) void wdt_init(void)
(0184) {
(0185) 	WDR();//喂狗
_wdt_init:
    0147 95A8      WDR
(0186) 	WDTCR|=(BIT(WDCE)|BIT(WDE));
    0148 B581      IN	R24,0x21
    0149 6188      ORI	R24,0x18
    014A BD81      OUT	0x21,R24
(0187) 	WDTCR=BIT(WDP2)|BIT(WDP1)|BIT(WDP0)|BIT(WDE);
    014B E08F      LDI	R24,0xF
    014C BD81      OUT	0x21,R24
    014D 9508      RET
(0188) }
(0189) 
(0190) 
(0191) /////////////////////////////////////////////////////////////
(0192) 
(0193) void main(void)
(0194) {
(0195) 	CLI();
_main:
    014E 94F8      BCLR	7
(0196) 	wdt_init();
    014F DFF7      RCALL	_wdt_init
(0197) 	adc_init();
    0150 DF94      RCALL	_adc_init
(0198) 	AC_init();
    0151 DFDB      RCALL	_AC_init
(0199) 	WDR();
    0152 95A8      WDR
(0200) 	DDRD|=(1<<PD3);//Led指示
    0153 9A8B      SBI	0x11,3
(0201) 	SEI();
    0154 9478      BSET	7
(0202) 	ac_isr();
    0155 DFE1      RCALL	_ac_isr
(0203) 	Power_Low=1;
    0156 E081      LDI	R24,1
    0157 E090      LDI	R25,0
    0158 93900065  STS	Power_Low+1,R25
    015A 93800064  STS	Power_Low,R24
    015C C014      RJMP	0x0171
(0204) 	while(1){
(0205) 	WDR();
    015D 95A8      WDR
(0206) 	LED_H;
    015E 9A93      SBI	0x12,3
(0207) 	ms(3000);
    015F EB08      LDI	R16,0xB8
    0160 E01B      LDI	R17,0xB
    0161 DF33      RCALL	_ms
(0208) 		if(!Power_Low){NOP();}else{ADCSRA|=(1<<ADSC);}
    0162 90200064  LDS	R2,Power_Low
    0164 90300065  LDS	R3,Power_Low+1
    0166 2022      TST	R2
    0167 F421      BNE	0x016C
    0168 2033      TST	R3
    0169 F411      BNE	0x016C
    016A 0000      NOP
    016B C001      RJMP	0x016D
    016C 9A36      SBI	0x06,6
(0209) 	LED_L;
    016D 9893      CBI	0x12,3
(0210) 	ms(3000);
FILE: <library>
    016E EB08      LDI	R16,0xB8
    016F E01B      LDI	R17,0xB
    0170 DF24      RCALL	_ms
    0171 CFEB      RJMP	0x015D
    0172 9508      RET
empy16s:
    0173 920A      ST	R0,-Y
    0174 921A      ST	R1,-Y
    0175 938A      ST	R24,-Y
    0176 939A      ST	R25,-Y
    0177 9F02      MUL	R16,R18
    0178 01C0      MOVW	R24,R0
    0179 9F12      MUL	R17,R18
    017A 0D90      ADD	R25,R0
    017B 9F03      MUL	R16,R19
    017C 0D90      ADD	R25,R0
    017D 018C      MOVW	R16,R24
    017E 9199      LD	R25,Y+
    017F 9189      LD	R24,Y+
    0180 9019      LD	R1,Y+
    0181 9009      LD	R0,Y+
    0182 9508      RET
pop_gset2:
    0183 E0E2      LDI	R30,2
    0184 C00E      RJMP	pop
pop_gset4:
    0185 E0E8      LDI	R30,0x8
    0186 C00C      RJMP	pop
push_gset5:
    0187 92FA      ST	R15,-Y
    0188 92EA      ST	R14,-Y
push_gset4:
    0189 92DA      ST	R13,-Y
    018A 92CA      ST	R12,-Y
push_gset3:
    018B 92BA      ST	R11,-Y
    018C 92AA      ST	R10,-Y
push_gset2:
    018D 937A      ST	R23,-Y
    018E 936A      ST	R22,-Y
push_gset1:
    018F 935A      ST	R21,-Y
    0190 934A      ST	R20,-Y
    0191 9508      RET
pop_gset1:
    0192 E0E1      LDI	R30,1
pop:
    0193 9149      LD	R20,Y+
    0194 9159      LD	R21,Y+
    0195 FDE0      SBRC	R30,0
    0196 9508      RET
    0197 9169      LD	R22,Y+
    0198 9179      LD	R23,Y+
    0199 FDE1      SBRC	R30,1
    019A 9508      RET
    019B 90A9      LD	R10,Y+
    019C 90B9      LD	R11,Y+
    019D FDE2      SBRC	R30,2
    019E 9508      RET
    019F 90C9      LD	R12,Y+
    01A0 90D9      LD	R13,Y+
    01A1 FDE3      SBRC	R30,3
    01A2 9508      RET
    01A3 90E9      LD	R14,Y+
    01A4 90F9      LD	R15,Y+
    01A5 9508      RET
push_lset:
    01A6 93FA      ST	R31,-Y
    01A7 93EA      ST	R30,-Y
    01A8 93BA      ST	R27,-Y
    01A9 93AA      ST	R26,-Y
    01AA 939A      ST	R25,-Y
    01AB 938A      ST	R24,-Y
    01AC 933A      ST	R19,-Y
    01AD 932A      ST	R18,-Y
    01AE 931A      ST	R17,-Y
    01AF 930A      ST	R16,-Y
    01B0 929A      ST	R9,-Y
    01B1 928A      ST	R8,-Y
    01B2 927A      ST	R7,-Y
    01B3 926A      ST	R6,-Y
    01B4 925A      ST	R5,-Y
    01B5 924A      ST	R4,-Y
    01B6 923A      ST	R3,-Y
    01B7 922A      ST	R2,-Y
    01B8 921A      ST	R1,-Y
    01B9 920A      ST	R0,-Y
    01BA B60F      IN	R0,0x3F
    01BB 920A      ST	R0,-Y
    01BC 9508      RET
pop_lset:
    01BD 9009      LD	R0,Y+
    01BE BE0F      OUT	0x3F,R0
    01BF 9009      LD	R0,Y+
    01C0 9019      LD	R1,Y+
    01C1 9029      LD	R2,Y+
    01C2 9039      LD	R3,Y+
    01C3 9049      LD	R4,Y+
    01C4 9059      LD	R5,Y+
    01C5 9069      LD	R6,Y+
    01C6 9079      LD	R7,Y+
    01C7 9089      LD	R8,Y+
    01C8 9099      LD	R9,Y+
    01C9 9109      LD	R16,Y+
    01CA 9119      LD	R17,Y+
    01CB 9129      LD	R18,Y+
    01CC 9139      LD	R19,Y+
    01CD 9189      LD	R24,Y+
    01CE 9199      LD	R25,Y+
    01CF 91A9      LD	R26,Y+
    01D0 91B9      LD	R27,Y+
    01D1 91E9      LD	R30,Y+
    01D2 91F9      LD	R31,Y+
    01D3 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -