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

📄 m128_alky_touch_con1.lst

📁 m8做的电压检测
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0551) pp->SumError += Error; // 积分
    6287 01CF      MOVW	R24,R30
    6288 9609      ADIW	R24,0x9
    6289 01FC      MOVW	R30,R24
    628A 8020      LDD	R2,Z+0
    628B 8031      LDD	R3,Z+1
    628C 0C2C      ADD	R2,R12
    628D 1C3D      ADC	R3,R13
    628E 8231      STD	Z+1,R3
    628F 8220      STD	Z+0,R2
(0552)   if(pp->SumError > 1000)
    6290 EE88      LDI	R24,0xE8
    6291 E093      LDI	R25,3
    6292 01FA      MOVW	R30,R20
    6293 8421      LDD	R2,Z+9
    6294 8432      LDD	R3,Z+10
    6295 1582      CP	R24,R2
    6296 0593      CPC	R25,R3
    6297 F41C      BGE	0x629B
(0553)    {pp->SumError = 1000;}
    6298 8792      STD	Z+10,R25
    6299 8781      STD	Z+9,R24
    629A C00B      RJMP	0x62A6
(0554)   else
(0555)    {
(0556)    	// TEMP=pp->SumError+Max;
(0557)    	 if(pp->SumError < -1000)
    629B 01FA      MOVW	R30,R20
    629C 8581      LDD	R24,Z+9
    629D 8592      LDD	R25,Z+10
    629E 3188      CPI	R24,0x18
    629F EFAC      LDI	R26,0xFC
    62A0 079A      CPC	R25,R26
    62A1 F424      BGE	0x62A6
(0558)         pp->SumError= -1000;
    62A2 E188      LDI	R24,0x18
    62A3 EF9C      LDI	R25,0xFC
    62A4 8792      STD	Z+10,R25
    62A5 8781      STD	Z+9,R24
(0559)    }
(0560) dError = pp->LastError - pp->PrevError; // 当前微分
    62A6 01FA      MOVW	R30,R20
    62A7 8027      LDD	R2,Z+7
    62A8 8430      LDD	R3,Z+8
    62A9 80A5      LDD	R10,Z+5
    62AA 80B6      LDD	R11,Z+6
    62AB 18A2      SUB	R10,R2
    62AC 08B3      SBC	R11,R3
(0561) pp->PrevError = pp->LastError;
    62AD 8025      LDD	R2,Z+5
    62AE 8036      LDD	R3,Z+6
    62AF 8630      STD	Z+8,R3
    62B0 8227      STD	Z+7,R2
(0562) pp->LastError = Error;
    62B1 82D6      STD	Z+6,R13
    62B2 82C5      STD	Z+5,R12
(0563) return (pp->Proportion * Error + pp->Integral * pp->SumError + pp->Derivative * dError);
    62B3 8521      LDD	R18,Z+9
    62B4 8532      LDD	R19,Z+10
    62B5 8103      LDD	R16,Z+3
    62B6 2711      CLR	R17
    62B7 940E 9BA2 CALL	empy16s
    62B9 0118      MOVW	R2,R16
    62BA 01FA      MOVW	R30,R20
    62BB 8102      LDD	R16,Z+2
    62BC 2711      CLR	R17
    62BD 0196      MOVW	R18,R12
    62BE 940E 9BA2 CALL	empy16s
    62C0 0128      MOVW	R4,R16
    62C1 0C42      ADD	R4,R2
    62C2 1C53      ADC	R5,R3
    62C3 01FA      MOVW	R30,R20
    62C4 8104      LDD	R16,Z+4
    62C5 2711      CLR	R17
    62C6 0195      MOVW	R18,R10
    62C7 940E 9BA2 CALL	empy16s
    62C9 0E40      ADD	R4,R16
    62CA 1E51      ADC	R5,R17
    62CB 0182      MOVW	R16,R4
    62CC 940C 9C2E JMP	pop_xgset303C
(0564) }
(0565) //******************************************
(0566) void PIDInit (PID *pp)
(0567) {	//初始化为0
(0568)   pp->SetPoint=0;
_PIDInit:
  pp                   --> R16
    62CE 2422      CLR	R2
    62CF 2433      CLR	R3
    62D0 01F8      MOVW	R30,R16
    62D1 8231      STD	Z+1,R3
    62D2 8220      STD	Z+0,R2
(0569)   pp->Proportion=0;
    62D3 8222      STD	Z+2,R2
(0570)   pp->Integral=0;
    62D4 8223      STD	Z+3,R2
(0571)   pp->Derivative=0;
    62D5 8224      STD	Z+4,R2
(0572)   pp->LastError=0;
    62D6 8236      STD	Z+6,R3
    62D7 8225      STD	Z+5,R2
(0573)   pp->PrevError=0;
    62D8 8630      STD	Z+8,R3
    62D9 8227      STD	Z+7,R2
(0574)   pp->SumError=0;
    62DA 8632      STD	Z+10,R3
    62DB 8621      STD	Z+9,R2
    62DC 9508      RET
(0575) }
(0576) 
(0577) //******************************************
(0578) void port_init(void)
(0579) {
(0580)  PORTA = 0x0F;
_port_init:
    62DD E08F      LDI	R24,0xF
    62DE BB8B      OUT	0x1B,R24
(0581)  DDRA  = 0xF0;
    62DF EF80      LDI	R24,0xF0
    62E0 BB8A      OUT	0x1A,R24
(0582)  PORTB = 0x00;
    62E1 2422      CLR	R2
    62E2 BA28      OUT	0x18,R2
(0583)  DDRB  = 0xFF;
    62E3 EF8F      LDI	R24,0xFF
    62E4 BB87      OUT	0x17,R24
(0584)  PORTC = 0xFF; //m103 output only
    62E5 BB85      OUT	0x15,R24
(0585)  DDRC  = 0xFF;
    62E6 BB84      OUT	0x14,R24
(0586)  PORTD = 0xFF;
    62E7 BB82      OUT	0x12,R24
(0587)  DDRD  = 0xFF;
    62E8 BB81      OUT	0x11,R24
(0588)  PORTE = 0xC0;
    62E9 EC80      LDI	R24,0xC0
    62EA B983      OUT	0x03,R24
(0589)  DDRE  = 0x3F;
    62EB E38F      LDI	R24,0x3F
    62EC B982      OUT	0x02,R24
(0590)  PORTF = 0x00;
    62ED 9220 0062 STS	0x0062,R2
(0591)  DDRF  = 0x00;
    62EF 9220 0061 STS	0x0061,R2
(0592)  PORTG = 0x1F;
    62F1 E18F      LDI	R24,0x1F
    62F2 9380 0065 STS	0x0065,R24
(0593)  DDRG  = 0x1B;
    62F4 E18B      LDI	R24,0x1B
    62F5 9380 0064 STS	0x0064,R24
    62F7 9508      RET
(0594) }
(0595) 
(0596) //******************************************
(0597) //TIMER0 initialize - prescale:32
(0598) // WGM: PWM Fast
(0599) // desired value: 1mSec
(0600) // actual value:  2.048mSec (-104.8%)
(0601) void timer0_init(void)
(0602) {
(0603)  TCCR0 = 0x00; //stop
_timer0_init:
    62F8 2422      CLR	R2
    62F9 BE23      OUT	0x33,R2
(0604)  ASSR  = 0x00; //set async mode
    62FA BE20      OUT	0x30,R2
(0605)  TCNT0 = 0x7D; //set count
    62FB E78D      LDI	R24,0x7D
    62FC BF82      OUT	0x32,R24
(0606)  OCR0  = 0xFF;
    62FD EF8F      LDI	R24,0xFF
    62FE BF81      OUT	0x31,R24
(0607)  //TCCR0 = 0x6B; //start timer
(0608)  TCCR0 = 0x7B; //start timer
    62FF E78B      LDI	R24,0x7B
    6300 BF83      OUT	0x33,R24
    6301 9508      RET
_timer0_ovf_isr:
    6302 938A      ST	R24,-Y
    6303 B78F      IN	R24,0x3F
    6304 938A      ST	R24,-Y
(0609) }
(0610) 
(0611) //******************************************
(0612) #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
(0613) void timer0_ovf_isr(void)
(0614) {
(0615)  TCNT0 = 0x7D; //reload counter value
    6305 E78D      LDI	R24,0x7D
    6306 BF82      OUT	0x32,R24
    6307 9189      LD	R24,Y+
    6308 BF8F      OUT	0x3F,R24
    6309 9189      LD	R24,Y+
    630A 9518      RETI
(0616) }
(0617) 
(0618) //******************************************
(0619) //TIMER1 initialize - prescale:256
(0620) // WGM: 14) PWM fast, TOP=ICRn
(0621) // desired value: 2Sec
(0622) // actual value:  2.000Sec (0.0%)
(0623) void timer1_init(void)
(0624) {
(0625)  TCCR1B = 0x00; //stop
_timer1_init:
    630B 2422      CLR	R2
    630C BC2E      OUT	0x2E,R2
(0626)  TCNT1H = 0x85; //setup
    630D E885      LDI	R24,0x85
    630E BD8D      OUT	0x2D,R24
(0627)  TCNT1L = 0xEF;
    630F EE8F      LDI	R24,0xEF
    6310 BD8C      OUT	0x2C,R24
(0628)  OCR1AH = 0x7A;
    6311 E78A      LDI	R24,0x7A
    6312 BD8B      OUT	0x2B,R24
(0629)  OCR1AL = 0x11;
    6313 E181      LDI	R24,0x11
    6314 BD8A      OUT	0x2A,R24
(0630)  
(0631)  OCR1BH = 0x7A;
    6315 E78A      LDI	R24,0x7A
    6316 BD89      OUT	0x29,R24
(0632)  OCR1BL = 0x11;
    6317 E181      LDI	R24,0x11
    6318 BD88      OUT	0x28,R24
(0633)  
(0634)  OCR1CH = 0x7A;
    6319 E78A      LDI	R24,0x7A
    631A 9380 0079 STS	0x0079,R24
(0635)  OCR1CL = 0x11;
    631C E181      LDI	R24,0x11
    631D 9380 0078 STS	0x0078,R24
(0636)  
(0637)  ICR1H  = 0x7A;
    631F E78A      LDI	R24,0x7A
    6320 BD87      OUT	0x27,R24
(0638)  ICR1L  = 0x11;
    6321 E181      LDI	R24,0x11
    6322 BD86      OUT	0x26,R24
    6323 9508      RET
_timer1_ovf_isr:
  TEMP                 --> R10
  rOut                 --> R20
    6324 920A      ST	R0,-Y
    6325 921A      ST	R1,-Y
    6326 922A      ST	R2,-Y
    6327 923A      ST	R3,-Y
    6328 924A      ST	R4,-Y
    6329 925A      ST	R5,-Y
    632A 926A      ST	R6,-Y
    632B 927A      ST	R7,-Y
    632C 928A      ST	R8,-Y
    632D 929A      ST	R9,-Y
    632E 92AA      ST	R10,-Y
    632F 92BA      ST	R11,-Y
    6330 930A      ST	R16,-Y
    6331 931A      ST	R17,-Y
    6332 932A      ST	R18,-Y
    6333 933A      ST	R19,-Y
    6334 934A      ST	R20,-Y
    6335 935A      ST	R21,-Y
    6336 938A      ST	R24,-Y
    6337 939A      ST	R25,-Y
    6338 93AA      ST	R26,-Y
    6339 93BA      ST	R27,-Y
    633A 93EA      ST	R30,-Y
    633B 93FA      ST	R31,-Y
    633C B60F      IN	R0,0x3F
    633D 920A      ST	R0,-Y
    633E 940E 9C05 CALL	push_xgset300C
(0639)  //TCCR1A = 0xC2;
(0640) // TCCR1B = 0x1D; //start Timer
(0641) }
(0642) 
(0643) //******************************************
(0644) #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
(0645) void timer1_ovf_isr(void)
(0646) {
(0647)  //TIMER1 has overflowed
(0648)  //TCNT1H = 0x85; //reload counter high value
(0649)  //TCNT1L = 0xEF; //reload counter low value
(0650)  int rOut;
(0651)  uint TEMP;
(0652)  
(0653)  rOut=PIDCalc(&LD_PID,DQ_LD_Value);
    6340 9120 0141 LDS	R18,DQ_LD_Value
    6342 9130 0142 LDS	R19,DQ_LD_Value+1
    6344 E80C      LDI	R16,0x8C
    6345 E011      LDI	R17,1
    6346 DEBB      RCALL	_PIDCalc
    6347 01A8      MOVW	R20,R16
(0654)   if(rOut<0)  rOut=0;
    6348 3000      CPI	R16,0
    6349 E0E0      LDI	R30,0
    634A 071E      CPC	R17,R30
    634B F414      BGE	0x634E
    634C 2744      CLR	R20
    634D 2755      CLR	R21
(0655)      if(rOut>ICR1_TEMP)   rOut=ICR1_TEMP;
    634E 9020 010D LDS	R2,ICR1_TEMP
    6350 9030 010E LDS	R3,ICR1_TEMP+1
    6352 1624      CP	R2,R20
    6353 0635      CPC	R3,R21
    6354 F408      BCC	0x6356
    6355 01A1      MOVW	R20,R2
(0656)  TEMP=ICR1_TEMP-rOut;
    6356 90A0 010D LDS	R10,ICR1_TEMP
    6358 90B0 010E LDS	R11,ICR1_TEMP+1
    635A 1AA4      SUB	R10,R20
    635B 0AB5      SBC	R11,R21
(0657)  LDPWM_Value_XianShi = TEMP;
    635C 92B0 0102 STS	LDPWM_Value_XianShi+1,R11
    635E 92A0 0101 STS	LDPWM_Value_XianShi,R10
(0658)  CLI();
    6360 94F8      BCLR	7
(0659) // if(P_OK==1)
(0660) // {
(0661)    OCR1A = TEMP;
    6361 BCBB      OUT	0x2B,R11
    6362 BCAA      OUT	0x2A,R10
(0662)    ICR1  = ICR1_TEMP;
    6363 9020 010D LDS	R2,ICR1_TEMP
    6365 9030 010E LDS	R3,ICR1_TEMP+1
    6367 BC37      OUT	0x27,R3
    6368 BC26      OUT	0x26,R2
(0663) // }
(0664) // else
(0665) //   OCR1A = ICR1_TEMP;
(0666) // OCR1AH = TEMP/256;
(0667) // OCR1AL = TEMP%256;
(0668)  SEI();
    6369 9478      BSET	7
    636A 940E 9C0A CALL	pop_xgset300C
    636C 9009      LD	R0,Y+
    636D BE0F      OUT	0x3F,R0
    636E 91F9      LD	R31,Y+
    636F 91E9      LD	R30,Y+
    6370 91B9      LD	R27,Y+
    6371 91A9      LD	R26,Y+
    6372 9199      LD	R25,Y+
    6373 9189      LD	R24,Y+
    6374 9159      LD	R21,Y+
    6375 9149      LD	R20,Y+
    6376 9139      LD	R19,Y+
    6377 9129      LD	R18,Y+
    6378 9119      LD	R17,Y+
    6379 9109      LD	R16,Y+
    637A 90B9      LD	R11,Y+
    637B 90A9      LD	R10,Y+
    637C 9099      LD	R9,Y+
    637D 9089      LD	R8,Y+
    637E 9079      LD	R7,Y+
    637F 9069      LD	R6,Y+
    6380 9059      LD	R5,Y+
    6381 9049      LD	R4,Y+
    6382 9039      LD	R3,Y+
    6383 9029      LD	R2,Y+
    6384 9019      LD	R1,Y+

⌨️ 快捷键说明

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