📄 ydjk_ad.s43
字号:
;************32个周期模拟量累加取平均
comput_ad
sub #0020h,SP
;***********计算 A 相电流有效值
Ia_0 add AD_MEM1_L,AD_MEMa_L
addc AD_MEM1_H,AD_MEMa_H
;***********计算 C 相电流有效值
Ic_0 add AD_MEM2_L,AD_MEMc_L
addc AD_MEM2_H,AD_MEMc_H
;************************
inc.b ad_cnt3
cmp.b #20h,ad_cnt3
jhs fp_hex
mov #AD_MEMa_F,R14
jmp compute_go
;************************
fp_hex call #stop_ad
mov.b #00h,ad_cnt3
mov AD_MEMa_L,R14
mov AD_MEMa_H,R15
call #byt_r5 ;双字右移5位
mov R14,AD_MEMa_L
mov R15,AD_MEMa_H
mov #0000h,AD_MEMa_F
mov #AD_MEMa_F,RPARG
call #CNV_BIN40 ;先转换为浮点数
MOV @RPRES+,AD_MEMa_F
MOV @RPRES+,AD_MEMa_H
MOV @RPRES+,AD_MEMa_L
mov #AD_MEMa_F,RPARG
mov #1000h,RPRES
call #FLT_MUL ;乘以模数转换的比例系数
MOV @RPRES+,AD_MEMa_F
MOV @RPRES+,AD_MEMa_H
MOV @RPRES+,AD_MEMa_L
;*************C相
mov AD_MEMc_L,R14
mov AD_MEMc_H,R15
call #byt_r5 ;双字右移5位
mov R14,AD_MEMc_L
mov R15,AD_MEMc_H
mov #0000h,AD_MEMc_F
mov #AD_MEMc_F,RPARG
call #CNV_BIN40 ;先转换为浮点数
MOV @RPRES+,AD_MEMc_F
MOV @RPRES+,AD_MEMc_H
MOV @RPRES+,AD_MEMc_L
mov #AD_MEMc_F,RPARG
mov #1006h,RPRES
call #FLT_MUL ;乘以模数转换的比例系数
MOV @RPRES+,AD_MEMc_F
MOV @RPRES+,AD_MEMc_H
MOV @RPRES+,AD_MEMc_L
;************将 A 相电流浮点数转换为十六进制数格式
; MOV #AD_MEMa_F,RPARG ; 12位BCD
; call #CNV_FP_BCD ;在上面的电流有效值计算中,已经多乘了10倍
; MOV @RPRES+,R15
; MOV @RPRES+,R14
; MOV @RPRES+,R13
; mov R12,R12
MOV #AD_MEMa_F,RPARG ; 12位BCD
call #CNV_FP_BIN ;在上面的电流有效值计算中,已经多乘了10倍
MOV @RPRES+,temp_cnv3
MOV @RPRES+,temp_cnv2
MOV @RPRES+,temp_cnv1
;************
cmp.b #0000h,temp_cnv1
jeq hex_asc_a
mov.b #00h,ad_ck
;************
hex_asc_a mov #real_data+27,R15
mov temp_cnv1,temp_data
and #000fh,temp_data
cmp #0ah,temp_data
jlo asc_Ia10
add.b #37h,temp_data
jmp asc_Ia11
asc_Ia10 add.b #30h,temp_data
asc_Ia11 mov.b temp_data,1(R15)
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
mov temp_cnv1,temp_data
and #000fh,temp_data
cmp #0ah,temp_data
jlo asc_Ia20
add.b #37h,temp_data
jmp asc_Ia21
asc_Ia20 add.b #30h,temp_data
asc_Ia21 mov.b temp_data,0(R15)
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
mov temp_cnv1,temp_data
and #000fh,temp_data
cmp #0ah,temp_data
jlo asc_Ia30
add.b #37h,temp_data
jmp asc_Ia31
asc_Ia30 add.b #30h,temp_data
asc_Ia31 mov.b temp_data,3(R15)
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
mov temp_cnv1,temp_data
and #000fh,temp_data
cmp #0ah,temp_data
jlo asc_Ia40
add.b #37h,temp_data
jmp asc_Ia41
asc_Ia40 add.b #30h,temp_data
asc_Ia41 mov.b temp_data,2(R15)
; mov R12,R12
;************将 C 相电流浮点数转换为十六进制数格式
; MOV #AD_MEMc_F,RPARG ; 12位BCD
; call #CNV_FP_BCD ;在上面的电流有效值计算中,已经多乘了10倍
; MOV @RPRES+,R15
; MOV @RPRES+,R14
; MOV @RPRES+,R13
MOV #AD_MEMc_F,RPARG ; 12位BCD
call #CNV_FP_BIN ;在上面的电流有效值计算中,已经多乘了10倍
MOV @RPRES+,temp_cnv3
MOV @RPRES+,temp_cnv2
MOV @RPRES+,temp_cnv1
;************
cmp.b #0000h,temp_cnv1
jeq hex_asc_c
mov.b #00h,ad_ck
;************
hex_asc_c mov #real_data+35,R15
mov temp_cnv1,temp_data
and #000fh,temp_data
cmp #0ah,temp_data
jlo asc_Ic10
add.b #37h,temp_data
jmp asc_Ic11
asc_Ic10 add.b #30h,temp_data
asc_Ic11 mov.b temp_data,1(R15)
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
mov temp_cnv1,temp_data
and #000fh,temp_data
cmp #0ah,temp_data
jlo asc_Ic20
add.b #37h,temp_data
jmp asc_Ic21
asc_Ic20 add.b #30h,temp_data
asc_Ic21 mov.b temp_data,0(R15)
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
mov temp_cnv1,temp_data
and #000fh,temp_data
cmp #0ah,temp_data
jlo asc_Ic30
add.b #37h,temp_data
jmp asc_Ic31
asc_Ic30 add.b #30h,temp_data
asc_Ic31 mov.b temp_data,3(R15)
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
rrc temp_cnv1
mov temp_cnv1,temp_data
and #000fh,temp_data
cmp #0ah,temp_data
jlo asc_Ic40
add.b #37h,temp_data
jmp asc_Ic41
asc_Ic40 add.b #30h,temp_data
asc_Ic41 mov.b temp_data,2(R15)
;**********************
mov #AD_MEMc_L+2,R14
;*************清除模拟量暂存寄存器
compute_go mov #AD_MEM_TP,R15
temp_ad_clr mov #0000h,0(R15)
incd R15
cmp R14,R15
jlo temp_ad_clr
add #0020h,SP
ret
;************双字右移5位子程序
byt_r5 rra R15
rrc R14 ;右移第一位
byt_r4 rra R15
rrc R14 ;右移第二位
rra R15
rrc R14 ;右移第三位
rra R15
rrc R14 ;右移第四位
rra R15
rrc R14 ;右移第五位
ret
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;*********************************
ADD_INT ADD &ADC12IV,PC
reti
jmp ADC12OV
jmp ADC12TOV
jmp ADC12MOD0
jmp ADC12MOD1
jmp ADC12MOD2
jmp ADC12MOD3
jmp ADC12MOD4
jmp ADC12MOD5
jmp ADC12MOD6
jmp ADC12MOD7
jmp ADC12MOD8
jmp ADC12MOD9
jmp ADC12MOD10
jmp ADC12MOD11
jmp ADC12MOD12
jmp ADC12MOD13
jmp ADC12MOD14
;***********************************
mov &ADC12MEM15,AD_MEM_TP
reti
;*********************先减去参考电压,计算起来可能快些
ADC12OV reti
ADC12TOV reti
ADC12MOD0 BIC #ENC,&ADC12CTL0 ;开始关闭A/D;启动采样时钟
mov &ADC12MEM0,AD_MEM0_L
reti
ADC12MOD1 mov.b #00h,ad_int_no
mov AD_MEM0_L,ad_temp0
mov &ADC12MEM1,ad_temp1
cmp AD_MEM0_L,ad_temp1
jlo ADC12MOD1_1
sub AD_MEM0_L,ad_temp1
jmp ADC12MOD1_2
ADC12MOD1_1 sub ad_temp1,ad_temp0
mov ad_temp0,ad_temp1
ADC12MOD1_2 add ad_temp1,AD_MEM1_L
addc #0000h,AD_MEM1_H
reti
ADC12MOD2 mov.b #00h,ad_int_no
mov AD_MEM0_L,ad_temp0
mov &ADC12MEM2,ad_temp1
cmp AD_MEM0_L,ad_temp1
jlo ADC12MOD2_1
sub AD_MEM0_L,ad_temp1
jmp ADC12MOD2_2
ADC12MOD2_1 sub ad_temp1,ad_temp0
mov ad_temp0,ad_temp1
ADC12MOD2_2 add ad_temp1,AD_MEM2_L
addc #0000h,AD_MEM2_H
inc.b ad_cnt2
cmp.b #20h,ad_cnt2
jlo ad_ov
mov.b #00h,ad_cnt2 ;标志一个周期结束
bis.b #02h,fg_main
ad_ov reti
;*****************
ADC12MOD3 mov &ADC12MEM3,AD_MEM_TP
reti
ADC12MOD4 mov &ADC12MEM4,AD_MEM_TP
reti
ADC12MOD5 mov &ADC12MEM5,AD_MEM_TP
reti
ADC12MOD6 mov &ADC12MEM6,AD_MEM_TP
reti
ADC12MOD7 mov &ADC12MEM7,AD_MEM_TP
reti
ADC12MOD8 mov &ADC12MEM8,AD_MEM_TP
reti
ADC12MOD9 mov &ADC12MEM9,AD_MEM_TP
reti
ADC12MOD10 mov &ADC12MEM10,AD_MEM_TP
reti
ADC12MOD11 mov &ADC12MEM11,AD_MEM_TP
reti
ADC12MOD12 mov &ADC12MEM12,AD_MEM_TP
reti
ADC12MOD13 mov &ADC12MEM13,AD_MEM_TP
reti
ADC12MOD14 mov &ADC12MEM14,AD_MEM_TP
reti
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; MOV #0ABh,mult_2
; MOV #1234h,mult_3
MACU CLR mult_5
CLR mult_6
CLR mult_4 ; clear multiplier high word
MOV #1,mult_1 ;
MUT2 BIT mult_1,mult_2 ; test actual bit
JZ MUT1 ; if 0: do nothing
ADD mult_3,mult_5 ; if 1: ad multiplier to result
ADDC mult_4,mult_6
MUT1 RLA mult_3 ; multiplier X 2
RLC mult_4 ;
RLA mult_1 ; next bit to be test
JNC MUT2 ; if bit in carry: finished
ret
;*********************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -