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

📄 mega16.lst

📁 电动车控制器
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0109 0913      SBC	R17,R3
    010A DFE1      RCALL	_uart0_tx
(0143) 	}
(0144) 	uart0_tx(M8Mode);
    010B 91000063  LDS	R16,M8Mode
    010D DFDE      RCALL	_uart0_tx
(0145) 	uart0_tx(0xff-M8Mode);
    010E 90200063  LDS	R2,M8Mode
    0110 2433      CLR	R3
    0111 EF0F      LDI	R16,0xFF
    0112 1902      SUB	R16,R2
    0113 0913      SBC	R17,R3
    0114 DFD7      RCALL	_uart0_tx
    0115 9508      RET
_int0_isr:
    0116 922A      ST	R2,-Y
    0117 938A      ST	R24,-Y
    0118 B62F      IN	R2,0x3F
    0119 922A      ST	R2,-Y
(0146) }
(0147) /*************************************************************************** 
(0148)           用于手动模式和巡航模式的选择                                    
(0149) ****************************************************************************/ 
(0150) #pragma interrupt_handler int0_isr:2
(0151) void int0_isr(void)
(0152) {
(0153)  //external interupt on INT0
(0154)      if(SpeedMode)
    011A 90200061  LDS	R2,SpeedMode
    011C 2022      TST	R2
    011D F031      BEQ	0x0124
(0155) 	 {
(0156) 	     SpeedMode=0;//手动模式
    011E 2422      CLR	R2
    011F 92200061  STS	SpeedMode,R2
(0157) 		 LedDp=0;
    0121 92200076  STS	LedDp,R2
(0158) 	 }	 
    0123 C00A      RJMP	0x012E
(0159) 	 else
(0160) 	 {
(0161) 	     SpeedMode=0x55;//巡航模式
    0124 E585      LDI	R24,0x55
    0125 93800061  STS	SpeedMode,R24
(0162) 		 LedDp=0x01;
    0127 E081      LDI	R24,1
    0128 93800076  STS	LedDp,R24
(0163) 		 SpeedVal=AdResult;
    012A 90200060  LDS	R2,AdResult
    012C 92200062  STS	SpeedVal,R2
(0164) 	 }
    012E 9029      LD	R2,Y+
    012F BE2F      OUT	0x3F,R2
    0130 9189      LD	R24,Y+
    0131 9029      LD	R2,Y+
    0132 9518      RETI
(0165) }
(0166) /*************************************************************************** 
(0167)                                                     A/D初始化 
(0168) ****************************************************************************/ 
(0169) void adc_init(void) 
(0170) { 
(0171)  ADCSRA =0x0; //关闭AD 
_adc_init:
    0133 2422      CLR	R2
    0134 B826      OUT	0x06,R2
(0172)  ADMUX = (1<<REFS0)|(1<<ADLAR)|(1<<MUX1); //选择外部参考电源 ADC2 左对齐 
    0135 E682      LDI	R24,0x62
    0136 B987      OUT	0x07,R24
(0173)  ACSR = (1<<ACD); //关闭模拟比较器 
    0137 E880      LDI	R24,0x80
    0138 B988      OUT	0x08,R24
(0174)  ADCSRA = (1<<ADEN)|(1<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS0);//中断允许 32分频 
    0139 E98D      LDI	R24,0x9D
    013A B986      OUT	0x06,R24
    013B 9508      RET
_Adc_isr:
  ad_tmp               --> R20
    013C 930A      ST	R16,-Y
    013D 931A      ST	R17,-Y
    013E 932A      ST	R18,-Y
    013F 933A      ST	R19,-Y
    0140 938A      ST	R24,-Y
    0141 939A      ST	R25,-Y
    0142 93EA      ST	R30,-Y
    0143 B70F      IN	R16,0x3F
    0144 930A      ST	R16,-Y
    0145 940E02FA  CALL	push_gset1
(0175) } 
(0176) /*************************************************************************** 
(0177)                                                     A/D中断处理 
(0178) ****************************************************************************/ 
(0179) #pragma interrupt_handler Adc_isr:15
(0180) void Adc_isr(void) 
(0181) { 
(0182)    uint ad_tmp;
(0183)    ad_tmp=ADCH; //读取高位数据(左对齐)
    0147 B145      IN	R20,0x05
    0148 2755      CLR	R21
(0184)    if(ad_tmp>0xd0)ad_tmp=0xd0;
    0149 ED80      LDI	R24,0xD0
    014A E090      LDI	R25,0
    014B 1784      CP	R24,R20
    014C 0795      CPC	R25,R21
    014D F408      BCC	0x014F
    014E ED40      LDI	R20,0xD0
(0185)    if(ad_tmp<0x30)ad_tmp=0x30;
    014F 3340      CPI	R20,0x30
    0150 E0E0      LDI	R30,0
    0151 075E      CPC	R21,R30
    0152 F410      BCC	0x0155
    0153 E340      LDI	R20,0x30
    0154 E050      LDI	R21,0
(0186)    ad_tmp-=0x30;
    0155 5340      SUBI	R20,0x30
    0156 4050      SBCI	R21,0
(0187)    AdResult=(ad_tmp*0xff/0xa0)&0x00ff-1;   
    0157 EF0F      LDI	R16,0xFF
    0158 E010      LDI	R17,0
    0159 019A      MOVW	R18,R20
    015A 940E02DC  CALL	empy16s
    015C EA20      LDI	R18,0xA0
    015D E030      LDI	R19,0
    015E 940E02C2  CALL	div16u
    0160 01C8      MOVW	R24,R16
    0161 7F8E      ANDI	R24,0xFE
    0162 7090      ANDI	R25,0
    0163 93800060  STS	AdResult,R24
    0165 940E02FD  CALL	pop_gset1
    0167 9109      LD	R16,Y+
    0168 BF0F      OUT	0x3F,R16
    0169 91E9      LD	R30,Y+
    016A 9199      LD	R25,Y+
    016B 9189      LD	R24,Y+
    016C 9139      LD	R19,Y+
    016D 9129      LD	R18,Y+
    016E 9119      LD	R17,Y+
    016F 9109      LD	R16,Y+
    0170 9518      RETI
_timer1_comp_isr:
  tt                   --> Y+1
    0171 922A      ST	R2,-Y
    0172 938A      ST	R24,-Y
    0173 939A      ST	R25,-Y
    0174 B62F      IN	R2,0x3F
    0175 922A      ST	R2,-Y
(0188)    //LedBuf[0]=AdResult;
(0189) } 
(0190) #pragma interrupt_handler timer1_comp_isr:9
(0191) void timer1_comp_isr(void)
(0192) {
(0193)  //compare occured TCNT1=OCR1
(0194)  uchar tt;
(0195)     TCNT1 = 0xC2F7; //setup 
    0176 EF87      LDI	R24,0xF7
    0177 EC92      LDI	R25,0xC2
    0178 BD9D      OUT	0x2D,R25
    0179 BD8C      OUT	0x2C,R24
(0196)     //PORTD ^=0x60;		
(0197)     //LedDp[second_data%4]=1;
(0198) 	//LedBuf[0]=second_data;
(0199)     if(++second_data>=60)
    017A 91800084  LDS	R24,second_data
    017C 5F8F      SUBI	R24,0xFF
    017D 2E28      MOV	R2,R24
    017E 92200084  STS	second_data,R2
    0180 338C      CPI	R24,0x3C
    0181 F0C8      BCS	0x019B
(0200)     {
(0201) 	    second_data=0;
    0182 2422      CLR	R2
    0183 92200084  STS	second_data,R2
(0202)         if(++minut_data>=60)
    0185 91800085  LDS	R24,minut_data
    0187 5F8F      SUBI	R24,0xFF
    0188 2E28      MOV	R2,R24
    0189 92200085  STS	minut_data,R2
    018B 338C      CPI	R24,0x3C
    018C F070      BCS	0x019B
(0203) 	    {
(0204) 	        minut_data=0;
    018D 2422      CLR	R2
    018E 92200085  STS	minut_data,R2
(0205) 		    if(++hour_data>=24)	 
    0190 91800086  LDS	R24,hour_data
    0192 5F8F      SUBI	R24,0xFF
    0193 2E28      MOV	R2,R24
    0194 92200086  STS	hour_data,R2
    0196 3188      CPI	R24,0x18
    0197 F018      BCS	0x019B
(0206) 	        {
(0207) 	            hour_data=0;
    0198 2422      CLR	R2
    0199 92200086  STS	hour_data,R2
(0208) 	        }
(0209)     	}
(0210)      }		
    019B 9029      LD	R2,Y+
    019C BE2F      OUT	0x3F,R2
    019D 9199      LD	R25,Y+
    019E 9189      LD	R24,Y+
    019F 9029      LD	R2,Y+
    01A0 9518      RETI
_led_display:
  tmp1                 --> R22
  tmp0                 --> R10
  delay                --> R20
    01A1 940E02F6  CALL	push_gset3
    01A3 2F40      MOV	R20,R16
(0211)  
(0212) }
(0213) 
(0214) //led display
(0215) void led_display(uchar delay)
(0216) {
(0217)   uchar tmp0,tmp1;
(0218)   tmp0=LedBuf[0];
    01A4 90A00074  LDS	R10,LedBuf
(0219)   tmp1=LedBuf[1];
    01A6 91600075  LDS	R22,LedBuf+1
(0220)   if(tmp0>99)tmp0=99;
    01A8 E683      LDI	R24,0x63
    01A9 158A      CP	R24,R10
    01AA F408      BCC	0x01AC
    01AB 2EA8      MOV	R10,R24
(0221)   if(tmp1>99)tmp1=99;  
    01AC E683      LDI	R24,0x63
    01AD 1786      CP	R24,R22
    01AE F408      BCC	0x01B0
    01AF E663      LDI	R22,0x63
(0222)   PORTB = ~0x08;  
    01B0 EF87      LDI	R24,0xF7
    01B1 BB88      OUT	0x18,R24
(0223)   PORTA = LedTab[(tmp0%10)]; 
    01B2 E02A      LDI	R18,0xA
    01B3 E030      LDI	R19,0
    01B4 2D0A      MOV	R16,R10
    01B5 2711      CLR	R17
    01B6 940E02A2  CALL	mod16s
    01B8 01F8      MOVW	R30,R16
    01B9 E684      LDI	R24,0x64
    01BA E090      LDI	R25,0
    01BB 0FE8      ADD	R30,R24
    01BC 1FF9      ADC	R31,R25
    01BD 8020      LDD	R2,Z+0
    01BE BA2B      OUT	0x1B,R2
(0224)   if(LedDp&0x01)PORTB|=0x10;
    01BF 90200076  LDS	R2,LedDp
    01C1 FE20      SBRS	R2,0
    01C2 C002      RJMP	0x01C5
    01C3 9AC4      SBI	0x18,4
    01C4 C003      RJMP	0x01C8
(0225)   else PORTB&=0xEF;
    01C5 B388      IN	R24,0x18
    01C6 7E8F      ANDI	R24,0xEF
    01C7 BB88      OUT	0x18,R24
(0226)   ms_delay(delay);
    01C8 2F04      MOV	R16,R20
    01C9 2711      CLR	R17
    01CA D058      RCALL	_ms_delay
(0227)      
(0228)   PORTB = ~0x04;  
    01CB EF8B      LDI	R24,0xFB
    01CC BB88      OUT	0x18,R24
(0229)   PORTA = LedTab[((tmp0/10)&0x0f)];
    01CD E02A      LDI	R18,0xA
    01CE E030      LDI	R19,0
    01CF 2D0A      MOV	R16,R10
    01D0 2711      CLR	R17
    01D1 940E02A6  CALL	div16s
    01D3 01F8      MOVW	R30,R16
    01D4 70EF      ANDI	R30,0xF
    01D5 70F0      ANDI	R31,0
    01D6 E684      LDI	R24,0x64
    01D7 E090      LDI	R25,0
    01D8 0FE8      ADD	R30,R24
    01D9 1FF9      ADC	R31,R25
    01DA 8020      LDD	R2,Z+0
    01DB BA2B      OUT	0x1B,R2
(0230)   if(LedDp&0x02)PORTB|=0x10;
    01DC 90200076  LDS	R2,LedDp
    01DE FE21      SBRS	R2,1
    01DF C002      RJMP	0x01E2
    01E0 9AC4      SBI	0x18,4
    01E1 C003      RJMP	0x01E5
(0231)   else PORTB&=0xEF;
    01E2 B388      IN	R24,0x18
    01E3 7E8F      ANDI	R24,0xEF
    01E4 BB88      OUT	0x18,R24
(0232)   ms_delay(delay);
    01E5 2F04      MOV	R16,R20
    01E6 2711      CLR	R17
    01E7 D03B      RCALL	_ms_delay
(0233)     
(0234)   PORTB = ~0x02;  
    01E8 EF8D      LDI	R24,0xFD
    01E9 BB88      OUT	0x18,R24
(0235)   PORTA = LedTab[(tmp1%10)];
    01EA E02A      LDI	R18,0xA
    01EB E030      LDI	R19,0
    01EC 2F06      MOV	R16,R22
    01ED 2711      CLR	R17
    01EE 940E02A2  CALL	mod16s
    01F0 01F8      MOVW	R30,R16
    01F1 E684      LDI	R24,0x64
    01F2 E090      LDI	R25,0
    01F3 0FE8      ADD	R30,R24
    01F4 1FF9      ADC	R31,R25
    01F5 8020      LDD	R2,Z+0
    01F6 BA2B      OUT	0x1B,R2
(0236)   if(LedDp&0x04)PORTB|=0x10;
    01F7 90200076  LDS	R2,LedDp
    01F9 FE22      SBRS	R2,2
    01FA C002      RJMP	0x01FD
    01FB 9AC4      SBI	0x18,4
    01FC C003      RJMP	0x0200
(0237)   else PORTB&=0xEF;
    01FD B388      IN	R24,0x18
    01FE 7E8F      ANDI	R24,0xEF
    01FF BB88      OUT	0x18,R24
(0238)   ms_delay(delay); 
    0200 2F04      MOV	R16,R20
    0201 2711      CLR	R17
    0202 D020      RCALL	_ms_delay
(0239)    
(0240)   PORTB = ~0x01;  
    0203 EF8E      LDI	R24,0xFE
    0204 BB88      OUT	0x18,R24
(0241)   PORTA = LedTab[((tmp1/10)&0x0f)];
    0205 E02A      LDI	R18,0xA
    0206 E030      LDI	R19,0
    0207 2F06      MOV	R16,R22
    0208 2711      CLR	R17
    0209 940E02A6  CALL	div16s
    020B 01F8      MOVW	R30,R16
    020C 70EF      ANDI	R30,0xF
    020D 70F0      ANDI	R31,0
    020E E684      LDI	R24,0x64
    020F E090      LDI	R25,0
    0210 0FE8      ADD	R30,R24
    0211 1FF9      ADC	R31,R25

⌨️ 快捷键说明

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