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

📄 ydjk_ad.s43

📁 通过MSP430F135单片机内部的模数转换器实现简单的电量计算
💻 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 + -