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

📄 m128_alky_touch_con1.s

📁 m8做的电压检测
💻 S
📖 第 1 页 / 共 5 页
字号:
	.dbline 530
	std z+10,R25
	std z+9,R24
	.dbline 530
	xjmp L3
L2:
	.dbline 532
;   else
;    {
	.dbline 534
;    	// TEMP=pp->SumError+Max;
;    	 if(pp->SumError < -20000)
	movw R30,R20
	ldd R24,z+9
	ldd R25,z+10
	cpi R24,224
	ldi R26,177
	cpc R25,R26
	brge L4
X1:
	.dbline 535
;         pp->SumError= -20000;
	ldi R24,-20000
	ldi R25,-79
	std z+10,R25
	std z+9,R24
L4:
	.dbline 536
;    }
L3:
	.dbline 537
; dError = pp->LastError - pp->PrevError; // 当前微分
	movw R30,R20
	ldd R2,z+7
	ldd R3,z+8
	ldd R10,z+5
	ldd R11,z+6
	sub R10,R2
	sbc R11,R3
	.dbline 538
; pp->PrevError = pp->LastError;
	ldd R2,z+5
	ldd R3,z+6
	std z+8,R3
	std z+7,R2
	.dbline 539
; pp->LastError = Error;
	std z+6,R13
	std z+5,R12
	.dbline 540
; if(Set_LD_Value>299)
	ldi R24,299
	ldi R25,1
	lds R2,_Set_LD_Value
	lds R3,_Set_LD_Value+1
	cp R24,R2
	cpc R25,R3
	brsh L6
X2:
	.dbline 541
;   return (pp->Proportion * Error + (pp->Integral * pp->SumError)/2 + pp->Derivative * dError);
	ldd R18,z+9
	ldd R19,z+10
	ldd R16,z+3
	clr R17
	xcall empy16s
	ldi R18,2
	ldi R19,0
	xcall div16s
	movw R2,R16
	movw R30,R20
	ldd R16,z+2
	clr R17
	movw R18,R12
	xcall empy16s
	movw R4,R16
	add R4,R2
	adc R5,R3
	movw R30,R20
	ldd R16,z+4
	clr R17
	movw R18,R10
	xcall empy16s
	add R4,R16
	adc R5,R17
	movw R16,R4
	xjmp L1
L6:
	.dbline 543
; else
;   return (pp->Proportion * Error + (pp->Integral * pp->SumError)/4 + pp->Derivative * dError);
	movw R30,R20
	ldd R18,z+9
	ldd R19,z+10
	ldd R16,z+3
	clr R17
	xcall empy16s
	ldi R18,4
	ldi R19,0
	xcall div16s
	movw R2,R16
	movw R30,R20
	ldd R16,z+2
	clr R17
	movw R18,R12
	xcall empy16s
	movw R4,R16
	add R4,R2
	adc R5,R3
	movw R30,R20
	ldd R16,z+4
	clr R17
	movw R18,R10
	xcall empy16s
	add R4,R16
	adc R5,R17
	movw R16,R4
	.dbline -2
L1:
	.dbline 0 ; func end
	xjmp pop_xgset303C
	.dbsym l TEMP 1 I
	.dbsym r dError 10 I
	.dbsym r Error 12 I
	.dbsym r NextPoint 10 i
	.dbsym r pp 20 pS[PID]
	.dbend
	.dbfunc e PIDCalc_WD _PIDCalc_WD fI
;           TEMP -> <dead>
;         dError -> R10,R11
;          Error -> R12,R13
;      NextPoint -> R10,R11
;             pp -> R20,R21
	.even
_PIDCalc_WD::
	xcall push_xgset303C
	movw R10,R18
	movw R20,R16
	.dbline -1
	.dbline 548
; }
; //******************************************
; //=============================PID计算部分==============================================
; int PIDCalc_WD( PID *pp, uint NextPoint)
; {
	.dbline 550
; int dError,Error,TEMP;
; Error = pp->SetPoint - NextPoint; // 偏差
	movw R30,R20
	ldd R12,z+0
	ldd R13,z+1
	sub R12,R10
	sbc R13,R11
	.dbline 551
; pp->SumError += Error; // 积分
	movw R24,R30
	adiw R24,9
	movw R30,R24
	ldd R2,z+0
	ldd R3,z+1
	add R2,R12
	adc R3,R13
	std z+1,R3
	std z+0,R2
	.dbline 552
;   if(pp->SumError > 1000)
	ldi R24,1000
	ldi R25,3
	movw R30,R20
	ldd R2,z+9
	ldd R3,z+10
	cp R24,R2
	cpc R25,R3
	brge L9
X3:
	.dbline 553
;    {pp->SumError = 1000;}
	.dbline 553
	std z+10,R25
	std z+9,R24
	.dbline 553
	xjmp L10
L9:
	.dbline 555
;   else
;    {
	.dbline 557
;    	// TEMP=pp->SumError+Max;
;    	 if(pp->SumError < -1000)
	movw R30,R20
	ldd R24,z+9
	ldd R25,z+10
	cpi R24,24
	ldi R26,252
	cpc R25,R26
	brge L11
X4:
	.dbline 558
;         pp->SumError= -1000;
	ldi R24,-1000
	ldi R25,-4
	std z+10,R25
	std z+9,R24
L11:
	.dbline 559
;    }
L10:
	.dbline 560
; dError = pp->LastError - pp->PrevError; // 当前微分
	movw R30,R20
	ldd R2,z+7
	ldd R3,z+8
	ldd R10,z+5
	ldd R11,z+6
	sub R10,R2
	sbc R11,R3
	.dbline 561
; pp->PrevError = pp->LastError;
	ldd R2,z+5
	ldd R3,z+6
	std z+8,R3
	std z+7,R2
	.dbline 562
; pp->LastError = Error;
	std z+6,R13
	std z+5,R12
	.dbline 563
; return (pp->Proportion * Error + pp->Integral * pp->SumError + pp->Derivative * dError);
	ldd R18,z+9
	ldd R19,z+10
	ldd R16,z+3
	clr R17
	xcall empy16s
	movw R2,R16
	movw R30,R20
	ldd R16,z+2
	clr R17
	movw R18,R12
	xcall empy16s
	movw R4,R16
	add R4,R2
	adc R5,R3
	movw R30,R20
	ldd R16,z+4
	clr R17
	movw R18,R10
	xcall empy16s
	add R4,R16
	adc R5,R17
	movw R16,R4
	.dbline -2
L8:
	.dbline 0 ; func end
	xjmp pop_xgset303C
	.dbsym l TEMP 1 I
	.dbsym r dError 10 I
	.dbsym r Error 12 I
	.dbsym r NextPoint 10 i
	.dbsym r pp 20 pS[PID]
	.dbend
	.dbfunc e PIDInit _PIDInit fV
;             pp -> R16,R17
	.even
_PIDInit::
	.dbline -1
	.dbline 567
; }
; //******************************************
; void PIDInit (PID *pp)
; {	//初始化为0
	.dbline 568
;   pp->SetPoint=0;
	clr R2
	clr R3
	movw R30,R16
	std z+1,R3
	std z+0,R2
	.dbline 569
;   pp->Proportion=0;
	std z+2,R2
	.dbline 570
;   pp->Integral=0;
	std z+3,R2
	.dbline 571
;   pp->Derivative=0;
	std z+4,R2
	.dbline 572
;   pp->LastError=0;
	std z+6,R3
	std z+5,R2
	.dbline 573
;   pp->PrevError=0;
	std z+8,R3
	std z+7,R2
	.dbline 574
;   pp->SumError=0;
	std z+10,R3
	std z+9,R2
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbsym r pp 16 pS[PID]
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 579
; }
; 
; //******************************************
; void port_init(void)
; {
	.dbline 580
;  PORTA = 0x0F;
	ldi R24,15
	out 0x1b,R24
	.dbline 581
;  DDRA  = 0xF0;
	ldi R24,240
	out 0x1a,R24
	.dbline 582
;  PORTB = 0x00;
	clr R2
	out 0x18,R2
	.dbline 583
;  DDRB  = 0xFF;
	ldi R24,255
	out 0x17,R24
	.dbline 584
;  PORTC = 0xFF; //m103 output only
	out 0x15,R24
	.dbline 585
;  DDRC  = 0xFF;
	out 0x14,R24
	.dbline 586
;  PORTD = 0xFF;
	out 0x12,R24
	.dbline 587
;  DDRD  = 0xFF;
	out 0x11,R24
	.dbline 588
;  PORTE = 0xC0;
	ldi R24,192
	out 0x3,R24
	.dbline 589
;  DDRE  = 0x3F;
	ldi R24,63
	out 0x2,R24
	.dbline 590
;  PORTF = 0x00;
	sts 98,R2
	.dbline 591
;  DDRF  = 0x00;
	sts 97,R2
	.dbline 592
;  PORTG = 0x1F;
	ldi R24,31
	sts 101,R24
	.dbline 593
;  DDRG  = 0x1B;
	ldi R24,27
	sts 100,R24
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 602
; }
; 
; //******************************************
; //TIMER0 initialize - prescale:32
; // WGM: PWM Fast
; // desired value: 1mSec
; // actual value:  2.048mSec (-104.8%)
; void timer0_init(void)
; {
	.dbline 603
;  TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 604
;  ASSR  = 0x00; //set async mode
	out 0x30,R2
	.dbline 605
;  TCNT0 = 0x7D; //set count
	ldi R24,125
	out 0x32,R24
	.dbline 606
;  OCR0  = 0xFF;
	ldi R24,255
	out 0x31,R24
	.dbline 608
;  //TCCR0 = 0x6B; //start timer
;  TCCR0 = 0x7B; //start timer
	ldi R24,123
	out 0x33,R24
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 64
	jmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile D:\Program\M128_ALKY_Touch_CON1\M128_ALKY_Touch_CON1.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R24
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 614
; }
; 
; //******************************************
; #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
; void timer0_ovf_isr(void)
; {
	.dbline 615
;  TCNT0 = 0x7D; //reload counter value
	ldi R24,125
	out 0x32,R24
	.dbline -2
L16:
	.dbline 0 ; func end
	ld R24,y+
	out 0x3f,R24
	ld R24,y+
	reti
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 624
; }
; 
; //******************************************
; //TIMER1 initialize - prescale:256
; // WGM: 14) PWM fast, TOP=ICRn
; // desired value: 2Sec
; // actual value:  2.000Sec (0.0%)
; void timer1_init(void)
; {
	.dbline 625
;  TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 626
;  TCNT1H = 0x85; //setup
	ldi R24,133
	out 0x2d,R24
	.dbline 627
;  TCNT1L = 0xEF;
	ldi R24,239
	out 0x2c,R24
	.dbline 628
;  OCR1AH = 0x7A;
	ldi R24,122
	out 0x2b,R24
	.dbline 629
;  OCR1AL = 0x11;
	ldi R24,17
	out 0x2a,R24
	.dbline 631
;  
;  OCR1BH = 0x7A;
	ldi R24,122
	out 0x29,R24
	.dbline 632
;  OCR1BL = 0x11;
	ldi R24,17
	out 0x28,R24
	.dbline 634
;  
;  OCR1CH = 0x7A;
	ldi R24,122
	sts 121,R24
	.dbline 635
;  OCR1CL = 0x11;
	ldi R24,17
	sts 120,R24
	.dbline 637
;  
;  ICR1H  = 0x7A;
	ldi R24,122
	out 0x27,R24
	.dbline 638
;  ICR1L  = 0x11;
	ldi R24,17
	out 0x26,R24
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 56
	jmp _timer1_ovf_isr
	.area text(rom, con, rel)
	.dbfile D:\Program\M128_ALKY_Touch_CON1\M128_ALKY_Touch_CON1.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
;           TEMP -> R10,R11
;           rOut -> R20,R21
	.even
_timer1_ovf_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R10
	st -y,R11
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R20
	st -y,R21
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	xcall push_xgset300C
	.dbline -1
	.dbline 646
;  //TCCR1A = 0xC2;
; // TCCR1B = 0x1D; //start Timer
; }
; 
; //******************************************
; #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
; void timer1_ovf_isr(void)
; {
	.dbline 653
;  //TIMER1 has overflowed
;  //TCNT1H = 0x85; //reload counter high value
;  //TCNT1L = 0xEF; //reload counter low value
;  int rOut;
;  uint TEMP;
;  
;  rOut=PIDCalc(&LD_PID,DQ_LD_Value);
	lds R18,_DQ_LD_Value
	lds R19,_DQ_LD_Value+1
	ldi R16,<_LD_PID
	ldi R17,>_LD_PID
	xcall _PIDCalc
	movw R20,R16
	.dbline 654
;   if(rOut<0)  rOut=0;
	cpi R16,0
	ldi R30,0
	cpc R17,R30
	brge L19
X5:
	.dbline 654
	clr R20
	clr R21
L19:
	.dbline 655
;      if(rOut>ICR1_TEMP)   rOut=ICR1_TEMP;
	lds R2,_ICR1_TEMP
	lds R3,_ICR1_TEMP+1
	cp R2,R20

⌨️ 快捷键说明

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