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

📄 baseasm.asm

📁 电力系统中的保护装置全部代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                .include        "ywbios.h"

DC_Chn	.set	0             ;//pin19
PIa_Chn	.set	4             ;//pin23
PIb_Chn	.set	14            ;//pin5
PIc_Chn	.set	9             ;//pin10
PI0_Chn	.set	6             ;//pin25
Ua_Chn	.set	1            ;//pin20
Ub_Chn	.set	3            ;//pin22
Uc_Chn	.set	8            ;//pin11
U0_Chn	.set	5            ;//pin24
Ux_Chn	.set	2            ;//pin21
MIa_Chn	.set	15           ;//pin4
MIb_Chn	.set	10           ;//pin7
MIc_Chn	.set	12           ;//pin9
Ubr1	.set	11			;pin8
Ubr2	.set	7        ;pin26
Ubr3	.set	13       ;pin6



chl_Num       		    	.set        	0  	;/* channel number      				*/
pchl_device_name	    	.set         	1	;/* pointer to channel device name 	          	*/
chl_device_name 	    	.set        	2	;/* save channel device name  		          	*/
pchl_name		        .set         	18	;/* pointer to channel name 		                */
chl_name 		        .set         	19	;/* save channel name  				        */
chl_calculate_style	    	.set         	51	;/* channel value calculate style 	        	*/	
pchl_value_dimension		.set        	52	;/* channel value dimension 		         	*/
chl_calculate_coefficient	.set          	53	;/* channel value calculate coefficient         	*/
chl_correlation_channel 	.set        	54      ;/* correlation channel high 16 bits B phase            */
pchl_Sample_Address	    	.set	        55	;/* save sample addree pointer		          	*/
;
chla_DC_component	    	.set         	56	;/* save D.C component value 		         	*/
chla_fundamental_real		.set      	57	;/* save fundamental real   		           	*/
chla_fundamental_imaginary 	.set         	58	;/* save fundamental imaginary   	              	*/		
chla_2nd_harmonic_real		.set        	59	;/* save second harmonic real   	             	*/
chla_2nd_harmonic_imaginary     .set        	60	;/* save second harmonic imaginary                   	*/		
chla_3rd_harmonic_real		.set        	61	;/* save third harmonic real  		              	*/
chla_3rd_harmonic_imaginary     .set       	62	;/* save third harmonic imaginary                   	*/	
chla_5th_harmonic_real		.set         	63	;/* save fifth harmonic real  		             	*/
chla_5th_harmonic_imaginary     .set        	64	;/* save fifth harmonic imaginary               	*/	
;                                                        
chlb_DC_component	        .set	        65	;/* save D.C component value  		            	*/
chlb_fundamental_real		.set         	66	;/* save fundamental real 		            	*/
chlb_fundamental_imaginary      .set        	67	;/* save fundamental imaginary   	        	*/		
chlb_2nd_harmonic_real		.set        	68	;/* save second harmonic real  		         	*/
chlb_2nd_harmonic_imaginary     .set          	69	;/* save second harmonic imaginary                   	*/		
chlb_3rd_harmonic_real		.set        	70	;/* save third harmonic real  		           	*/
chlb_3rd_harmonic_imaginary     .set        	71	;/* save third harmonic imaginary  	             	*/	
chlb_5th_harmonic_real		.set        	72	;/* save fifth harmonic real  		           	*/
chlb_5th_harmonic_imaginary     .set         	73	;/* save fifth harmonic imaginary     	                */
chl_value                       .set            74      ;modify by fei 2001,9,13
chl_value1                      .set            75      ;modify by fei.2001,9,19                      
chl_scale                       .set            77
chl_angle_compensate            .set		78
chl_angle_compensate_real       .set		79
chl_angle_compensate_imaginary  .set            80
chl_empty_flag                  .set            81
;--------------------------------------------------------
DC_COMPONENT		        .set          	1       ;/*direct current                                  	*/
FUNDAMENTAL		        .set       	2       ;/*fundamental  	                             	*/
HARMONIC_2ND		    	.set     	4       ;/*2nd hormonic		                              	*/
HARMONIC_3RD		     	.set      	8       ;/*3rd hormonic 	                              	*/
HARMONIC_5TH		    	.set         	16      ;/*5th hormonic	  	                               	*/

	.global	_pSampleDataAddr,_pChannelDataAddr,DIV_F30

            .global   _FSQRT 
;FLOAT	FSQRT(FLOAT REAL,FLOAT IMAG)
_FSQRT:
	PUSH	FP
	LDI	SP,FP
	ABSF	*-FP(2),R0
	ABSF	*-FP(3),R1
	CMPF	R0,R1
	BGE	_FSQRT1
	LDF	R0,R2
	LDF	R1,R0
	LDF	R2,R1
_FSQRT1:
	LDF	R1,R2
	MPYF	9.0,R1
	BZ	_FSQRT2
	LDF     R0,R3
	MPYF	3.0,R3
	ADDF	R3,R1

	MPYF	R0,R0
	MPYF	5.0,R0
	CALL    DIV_F30
	ADDF	R2,R0
_FSQRT2:
	POP	FP
	RETS
*********************************************************************
* _FFRENQ V5.11 - Floating point divide function for TMS3203x/4x
* Copyright (c) 1992-1999 Texas Instruments Incorporated
*********************************************************************
*    Inputs:           float FFRENQ(void)
*    Outputs:          R0
*    Status:           Set from result in R0
*    Operation:        Result = FFRENQ().            
*********************************************************************	
;Created By CG. 10-11-2001
;本段程序应加入到MACRO.ASM 
        .global   _Sample_Ptr
        .global   _pChannelDataAddr 

_mFREQ	.macro 	parameter3 
;parameter3. 	frequency calculate data address
  
;register use:	R0  - save accumulate value 	
;register use:	R2  - save temporary value 
;               R3  - save temporary value
;               R4  - save temporary value
;
 	        LDI	AR1,AR3			;把采样值指针存入AR3
 	        LDP	parameter3	
                LDI	parameter3,AR4		;把系数指针存入AR4
                LDI     1,IR0
 	        LDF	0,R2		        ;initialize R2
	    	LDF	0,R0
 ; Filter	
    	   	RPTS    Sample_Point * 2 - 1 
                MPYF3	*AR3++(IR0)%,*AR4++,R0  
     	      || ADDF3 	R0,R2,R2
 	        ADDF	R0,R2
	    			
	    	.endm		   
                           


;Created By CG. 10-11-2001
;本段程序应加入到BIOCS.ASM

 .global     _pFREQUENCY_S1
 .global     _pFREQUENCY_S2	        			
 .global     _FFRENQ
 
HighCoeff	.float	1/24
Uthreshold	.float	100.0
_FFRENQ:               
                PUSH    R4
                PUSH	R5
                PUSH    R6
                PUSHF   R6
                PUSH    AR4
                PUSH    AR3
                LDI     _AD_OneDataSize-1,BK 		  ;采样区尺寸	
                LDP 	@_CalculatePtr                   ;Load data page pointer
	        LDI 	@_CalculatePtr,AR1               ;Load sample data address pointer
                LDI     AR1,R5
	        LDI    *AR1--(50)%,R0
	        LDP	@_pChannelDataAddr
	        LDI	@_pChannelDataAddr,AR3
	        LDI 	Ua_Chn,R6
	        LDI     R6,AR2
	        MPYI    _OneChannelSize,AR2
	        ADDI	AR3,AR2
		LDP	@Uthreshold
		LDF	@Uthreshold,R0        
	        CMPF	*+AR2(75),R0                    ;chl_value1=75
	        BLT	_UaNOZERO			;Uc is not zero
	        LDI 	Ub_Chn,R6
	        LDI     R6,AR2
	        MPYI    _OneChannelSize,AR2
	        ADDI	AR3,AR2
	        CMPF	*+AR2(75),R0
	        BLT	_UaNOZERO			;Ub is not zero
	        LDI 	Uc_Chn,R6
	        LDI     R6,AR2
	        MPYI    _OneChannelSize,AR2
	        ADDI	AR3,AR2
	        CMPF	*+AR2(75),R0
	        BGT	RESULT0				;Ua is not zero
_UaNOZERO:      
                MPYI	_AD_OneDataSize,R6
                ADDI	R6,AR1
;		LDP	@_pFFRENQ_EOF			;modified by lht.2001.12.7 
;                LDI	@_pFFRENQ_EOF,ar0
;S1 calculate 
                _mFREQ  @_pFREQUENCY_S1
                LDF     R2,R3
;                MPYF    *ar0,R3
;S2 calculate
         	_mFREQ  @_pFREQUENCY_S2
                LDF     R2,R4
                
                LDI     R5,AR1
                LDI    *AR1--(56)%,R0
                ADDI    R6,AR1
;S3 calculate 
                _mFREQ  @_pFREQUENCY_S1
                LDF     R2,R5
;                MPYF    *ar0,R5
;S4 calculate
    	        _mFREQ  @_pFREQUENCY_S2 
    	        ABSF	R2,R0
    	        ABSF	R4,R1
    	        CMPF    R0,R1
    	        BLE     _FFRENT1
    	        LDF     R4,R2
    	        LDF     R3,R5
_FFRENT1:       LDF     R2,R1    	        
                LDF     R5,R0
                CMPF    0,R1
                BNZ     _FFRENT2
RESULT0:        LDF	0,R0
                BR	FEND
_FFRENT2:
        	CALL    DIV_F30 

		LDP	@HighCoeff
		LDF	@HighCoeff,R1
		MPYF	R0,R1
		MPYF	R0,R1
		MPYF	R0,R1
		ADDF	R1,R0
;		LDF     50.0,R1
;		SUBF3   R0,R1,R0
FEND:		
		POP     AR3
                POP     AR4
                POPF    R6
                POP     R6
                POP	R5
        	POP     R4        
                RETS                  			                 			
;/****************************************************************************************************************/	
;/***********************************************************************************************************/                  	
;/************************************************************************************/	                      
;                               滤波
;
;/************************************************************************************/
                               ;频率计算系数
	                       .sect   ".cinit"                          
                               .word   Sample_Point * 4, _FREQUENCY_S
_FREQUENCY_S                   .usect  ".FilterCoeff", Sample_Point * 4

_FREQUENCY_S1                  .float  -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
_FREQUENCY_S2                  .float  0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,2,2,2,2,2,2,2,2,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0
;_FREQUENCY_S1                  .float  -1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1
;_FREQUENCY_S2                  .float  0,0,0,-1,-1,-1,-1,-1,-1,2,2,2,2,2,2,-1,-1,-1,-1,-1,-1,0,0,0




                .text

                .global _pFREQUENCY_S1, _pFREQUENCY_S2, _AIChn
                .global _pFOURIER1,_pFOURIER2,_pFOURIER3,_pFOURIER5
                .global	_CalculatePtr
                
_pFREQUENCY_S1  .word   _FREQUENCY_S1       
_pFREQUENCY_S2  .word   _FREQUENCY_S2       
_pChannelDataAddr	.word	_AIChn

                .global      _fei_calculate   
_fei_calculate:
                PUSH    R7
                PUSHF   R7
                PUSH    R6
                PUSHF   R6
                PUSH	R5
                PUSH    R4
                LDI    	_AD_OneDataSize-1,BK 

                LDP 	@_CalculatePtr                   ;Load data page pointer
		LDI 	@_CalculatePtr,AR1               
		LDP 	@_pChannelDataAddr             ;Load data page pointer
                LDF     *AR1--(Sample_Point)%,R2
        	LDI 	@_pChannelDataAddr,AR2         ;Load channel data address pointer		   
                STF	R2,*+AR2(chl_value) 
     	                        
                LDI	AR1,R3
 		LDP	@_pFOURIER1 	
                LDI	_CHL_Number-1,R5               ;SET register R1 (32 sample channel remove from Power, Sum)	            
                LDI	@_pFOURIER1,AR0
                LDI     FUNDAMENTAL,R4
_Calcu_Loop:
 		ADDI	_OneChannelSize,AR2
 		ADDI	_AD_OneDataSize,R3
 		TSTB    *+AR2(chl_calculate_style),R4
 		BZ      _Calcu_Loop1
		LDF	0,R0
                LDF	0,R2		               ;initialize R2

 		LDI	R3,AR1
		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    *+AR2(chl_angle_compensate_real),R6		;//校正非同时采样引起的角度偏差
                LDF    *+AR2(chl_angle_compensate_imaginary),R7

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

                LDF    *+AR2(chl_calculate_coefficient),R2              ;//比例系数
                MPYF   *+AR2(chl_scale),R2                              ;//校正系数
                MPYF    R2,R0
                MPYF    R2,R1
                
                MPYF    R0,R0,R6
                MPYF    R1,R1,R7
                ADDF    R7,R6

                SUBI	Sample_Point*2,AR0

_Calcu_Loop1:
                SUBI	1,R5
                BNZD	_Calcu_Loop
                STF	R0,*+AR2(chla_fundamental_real)
                STF	R1,*+AR2(chla_fundamental_imaginary)
                STF     R6,*+AR2(chl_value1)

⌨️ 快捷键说明

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