baseasm.asm

来自「电力系统中的保护装置全部代码」· 汇编 代码 · 共 655 行 · 第 1/2 页

ASM
655
字号
                
                POP	R4
                POP	R5
                POPF    R6
                POP     R6
                POPF    R7
                POP     R7
                RETS

	.global _Cal_Harmous
;/***********************************************************************/
;/*                                                                    	*/
;/* FUNCTION      void  Delta_I_Handle(void)                           	*/
;/*                                                                    	*/
;/*      求谐波分量                                                     */
;/*                                                                     */
;/*                                                                     */
;/***********************************************************************/                                      
;Cal_Harmous(float *sample, float *coeff, HARMOUS *result,
;                            float fcoeff, float fcos, float fsin);
_Cal_Harmous:
		PUSH	FP
		LDI	SP,FP

		PUSH	R7
		PUSHF	R7
		PUSH	R6
		PUSHF	R6

                LDI    	_AD_OneDataSize-1,BK 
		LDI 	*-FP(2),AR1               
                LDF     *AR1--(Sample_Point)%,R2
                LDI	*-FP(3),AR0
     	                        
                LDI	AR1,R3

		LDF	0,R0
                LDF	0,R2		               ;initialize R2
		RPTS	Sample_Point-1                ;Place AD_Number channel sample data
                MPYF3	*AR1++%,*AR0++,R0  
            ||  ADDF3 	R0,R2,R2 
		ADDF	R0,R2,R1
               
 		LDI	R3,AR1
		LDF	0,R0
                LDF	0,R2		               ;initialize R2
		RPTS	Sample_Point-1                ;Place AD_Number channel sample data
                MPYF3  *AR1++%,*AR0++,R0  
            ||  ADDF3 	R0,R2,R2 
		ADDF	R0,R2

                LDF    *-FP(6),R6           		;//校正非同时采样引起的角度偏差
                LDF    *-FP(7),R7

                MPYF3   R1,R6,R0
                MPYF    R7,R1
                MPYF    R2,R7
                MPYF    R2,R6
                SUBF    R7,R0
                ADDF    R6,R1

                MPYF    *-FP(5),R0              ;//比例系数
                MPYF    *-FP(5),R1              ;//比例系数
                
                LDI	*-FP(4),AR0
                STF	R0,*AR0
                STF	R1,*+AR0
                
		POPF	R6
		POP	R6
		POPF	R7
		POP	R7
		POP	FP
		RETS
        
        

;/***********************************************************************/
;/*                                                                    	*/
;/* 功能:  求记忆电压                                                	*/
;/* 入口:  通道号,结果存放地址                                        	*/
;/*                                                                    	*/
;/***********************************************************************/                                      
                .global      _back_calculate   
_back_calculate:
;void back_calculate(unsigned AIChn, float *real, float *imaginary)
		PUSH	FP
		LDI	SP,FP

                LDI    	_AD_OneDataSize-1,BK 

                LDP 	@_CalculatePtr
		LDI 	@_CalculatePtr,AR1               
		LDP 	@_pChannelDataAddr
                LDF     *AR1--(Sample_Point * 4)%,R2
        	LDI 	@_pChannelDataAddr,AR2
        	LDI	_OneChannelSize,R0
        	MPYI	*-FP(2),R0
        	ADDI	R0,AR2
        	LDI	_AD_OneDataSize,R0
        	MPYI	*-FP(2),R0
        	ADDI	R0,AR1,R3
     	                        
 		LDP	@_pFOURIER1 	
                LDI	@_pFOURIER1,AR0

		LDF	0,R0
                LDF	0,R2
 		LDI	R3,AR1
		RPTS	Sample_Point - 1
                MPYF3	*AR1++%,*AR0++,R0  
            ||  ADDF3 	R0,R2,R2 
		ADDF	R0,R2,R1
               
 		LDI	R3,AR1
		LDF	0,R0
                LDF	0,R2
		RPTS	Sample_Point - 1
                MPYF3   *AR1++%,*AR0++,R0  
            ||  ADDF3 	R0,R2,R2 
		ADDF	R0,R2

                LDF     *+AR2(chl_angle_compensate_real),R0		;//校正非同时采样引起的角度偏差
                LDF     *+AR2(chl_angle_compensate_imaginary),R3
                MPYF    R1,R0
                MPYF    R2,R3
		ADDF	R3,R0
                MPYF    *+AR2(chl_angle_compensate_real),R2
                MPYF    *+AR2(chl_angle_compensate_imaginary),R1
                SUBF	R1,R2,R1
                
                LDF    *+AR2(chl_calculate_coefficient),R2              ;//比例系数
                MPYF   *+AR2(chl_scale),R2                              ;//校正系数
                MPYF    R2,R0
                MPYF    R2,R1
                
                LDI	*-FP(3),AR2
                STF	R0,*AR2
                LDI	*-FP(4),AR2
                STF	R1,*AR2

		POP	FP
                RETS

       .global  _Delta_I_Handle
;_Delta_I_Handle(UNSIGNED LastSampleIndex);
;/***********************************************************************/
;/*                                                                    	*/
;/* FUNCTION  _Delta_I_Handle(UNSIGNED LastSampleIndex);                */
;/*                                                                    	*/
;/*      电流突变量判别                                                 */
;/*                                                                     */
;/*                                                                     */
;/***********************************************************************/                                      
QDB      .set     0
Iaqdjs   .set     1
Ibqdjs   .set     2
Icqdjs   .set     3
Izqdjs   .set     4
IqdPtr   .set     5
WaitFlag .set     6
Iqdsj    .set     7
              
         .global       _IQD,_TMD_System_Clock

_pIQD    .word  _IQD
SampleT	 .float	    20.0/Sample_Point
_QDSET   .float        232.0

PIa_Chn   .set   4             ;pin23
PIb_Chn   .set   14            ;pin5
PIc_Chn   .set   9             ;pin10

fp        .set   ar3

_Delta_I_Handle:
                push	fp
                ldi	sp,fp
                
                push    r4
                push    r5
                push    r6
                pushf   r6
                push    ar4
                push    r7
                pushf   r7

                ldp	@_pIQD
                ldi     @_pIQD,ar4

                ldi     *-fp(2),ar0
                ldp	@_pSampleDataAddr
                addi	@_pSampleDataAddr,ar0
                ldi	ar0,ar1
                ldi	ar0,ar2
                ldi	_AD_OneDataSize-1,bk
                ldi	*ar1--(Sample_Point)%,r0
                ldi	*ar2--(2*Sample_Point)%,r0
                
                ldi     _AD_OneDataSize*PIa_Chn,ir0
                subf3	*+ar1(ir0),*+ar0(ir0),r0             ;r0=ia(k)-ia(k-n)
                subf3	*+ar2(ir0),*+ar1(ir0),r1             ;r1=ia(k-n)-ia(k-2n)
                
                ldi     _AD_OneDataSize*PIb_Chn,ir0
                subf3	*+ar1(ir0),*+ar0(ir0),r2             ;r2=ib(k)-ib(k-n)
                subf3	*+ar2(ir0),*+ar1(ir0),r3             ;r3=ib(k-n)-ib(k-2n)
                
                ldi     _AD_OneDataSize*PIc_Chn,ir0
                subf3	*+ar1(ir0),*+ar0(ir0),r4             ;r4=ic(k)-ic(k-n)
                subf3	*+ar2(ir0),*+ar1(ir0),r5             ;r5=ic(k-n)-ic(k-2n)
                
                subf3   r2,r0,r6                             ;r6=|iab(k)-iab(k-n)|
                absf    r6
                subf3   r3,r1,r7                             ;r7=|iab(k-n)-iab(k-2n)|
                absf    r7
                
                subf    r4,r2                                ;r2=|ibc(k)-ibc(k-n)|
                absf    r2
                subf    r5,r3                                ;r3=|ibc(k-n)-ibc(k-2n)|
                absf    r3
                
                subf    r0,r4                                ;r4=|ica(k)-ica(k-n)|
                absf    r4
                subf    r1,r5                                ;r5=|ica(k-n)-ica(k-2n)|
                absf    r5
                                
                ldp     @_QDSET
                ldi     -1,r0
                subf    r7,r6
                absf    r6
                mpyf    2,r7
                ldf     @_QDSET,r1
                addf	r1,r7
                cmpf	r7,r6
                ldige   1,r0
                addi    *+ar4(Iaqdjs),r0
                ldin    0,r0
                sti     r0,*+ar4(Iaqdjs)
                ldi     r0,r7
                
                ldi     -1,r0
                subf    r3,r2
                absf    r2
                mpyf    2,r3
                addf	r1,r3
                cmpf	r3,r2
                ldige   1,r0
                addi    *+ar4(Ibqdjs),r0
                ldin    0,r0
                sti     r0,*+ar4(Ibqdjs)
                addi    r0,r7
                
                ldi     -1,r0
                subf    r5,r4
                absf    r4
                mpyf    2,r5
                addf	r1,r5
                cmpf	r5,r4
                ldige   1,r0
                addi    *+ar4(Icqdjs),r0
                ldin    0,r0
                sti     r0,*+ar4(Icqdjs)
                
                ldi     -1,r1
                addi    r0,r7
                ldinz   1,r1
                addi    *+ar4(Izqdjs),r1
                ldin    0,r1
                sti     r1,*+ar4(Izqdjs)
                
                cmpi    8,r1
                blo     _Delta_I_Handle_End
                ldi     8,r0
                cmpi    *+ar4(Iaqdjs),r0
                bls     _Delta_I_Startup
                cmpi    *+ar4(Ibqdjs),r0
                bls     _Delta_I_Startup
                cmpi    *+ar4(Icqdjs),r0
                bls     _Delta_I_Startup
                cmpi    16,r1
                blo     _Delta_I_Handle_End
                ldi     0,r1
                sti     r1,*+ar4(Iaqdjs)
                sti     r1,*+ar4(Ibqdjs)
                sti     r1,*+ar4(Icqdjs)
                sti     r1,*+ar4(Izqdjs)
                br      _Delta_I_Handle_End
_Delta_I_Startup:
                ldi     r1,ir0
                ldi     0,r0
                ldi     1,r1
                sti     r1,*+ar4(QDB)
                sti     r1,*+ar4(WaitFlag)
                sti     r0,*+ar4(Iaqdjs)
                sti     r0,*+ar4(Ibqdjs)
                sti     r0,*+ar4(Icqdjs)
                sti     r0,*+ar4(Izqdjs)
                
                ldi     *ar0--(ir0)%,r0
                sti     ar0,*+ar4(IqdPtr)

		ldp	@_Sample_Ptr
		ldi	@_Sample_Ptr,r1
                subi	ar0,r1
                bge	_Delta_I_Startup1
                addi	_AD_OneDataSize-1,r1
_Delta_I_Startup1:              
		float	r1,r1
		ldp	@SampleT
		mpyf	@SampleT,r1
		fix	r1,r1
		ldp	@_TMD_System_Clock
		subri	@_TMD_System_Clock,r1
		sti	r1,*+ar4(Iqdsj)
_Delta_I_Handle_End:

                popf    r7
                pop     r7
		pop	ar4
                popf    r6
                pop     r6
                pop     r5
                pop     r4
		pop	fp
		rets

		.end

⌨️ 快捷键说明

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