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 + -
显示快捷键?