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

📄 ydjk.s43

📁 通过MSP430F135单片机内部的模数转换器实现简单的电量计算
💻 S43
字号:
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;当前问题:程序写入后可正常运行,一旦写入修正系数则不能.
;************************4*******
#include       "msp430x13x.h"   // Standard Equations
#define         DOUBLE 1
#define	        HW_MPY 0
#define         SW_UFLOW 0
#define         SW_RND 0
#include        "fppdef4.s43"
#include        "temp_t.s43" 
;**********************************
;n1    dw  8000h,0000h,0000h
;n2    dw  8200h,0000h,0000h
;n3    dw  8020h,0000h,0000h
;I1      dw     7b09h,0000h,0000h    ;
;**********************************
              org       0c000h
;**********************************
RESET         mov       #0400h,SP               ; Initialize stackpointer
              bit.b     #WDTIFG,&IFG1
              jz        SetupWDT
              bic.b     #WDTIFG,&IFG1
SetupWDT      mov.w     #WDTPW+WDTHOLD,&WDTCTL  ; Stop WDT 选择复位模式
              mov.b     #DCO2+MOD3,&DCOCTL      ;#DCO0+DCO1+DCO2,&DCOCTL
              mov.b     #RSEL2,&BCSCTL1
SetupOsc      bic.b     #OFIFG,&IFG1            ; Clear OSC fault flag 
              mov.w     #3000h,R15              ; R15 = Delay 
SetupOsc1     dec.w     R15                     ; Additional delay to ensure start 
              jnz       SetupOsc1               ;
              bit.b     #OFIFG,&IFG1            ; OSC fault flag set? 
              jnz       SetupOsc                ; OSC Fault, clear flag again 
              mov.b     #SELM_2+DIVM_0+SELS+DIVS_0,&BCSCTL2   ;MCLK选择XT2CLK且0分频,SMCLK选择XT2CLK且0分频,
                                                ;内部振荡器激活。
              dint                              ;关掉所有可禁止中断
;*****************
;*****************
              mov.b     #0c0h,&P2DIR            ;
              bic.b     #0c0h,&P2OUT
              mov       #0000h,R15
wait_         nop
              nop
              xor.b     #40h,&P2OUT
              dec       R15
              jnz       wait_
;***************二次初始化
#include      "init.s43"
;&&&&&&&&&&&&&&&&&&&&&&&&&
;*************开放中断
              mov.b     #01h,tx0_cnt
              eint
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;              mov       #n3,RPARG
;              mov       #I1,RPRES
         ;     call	#CNV_FP_BCD
;              call      #FLT_MUL              ;乘以模数转换的比例系数
;              MOV       @RPRES+,R15
;	      MOV       @RPRES+,R14
;	      MOV       @RPRES+,R13
;              mov     R12,R12
;*********************************
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Mainloop      mov.b      #00h,sys_ck
              bit.b      #80h,fg_rx0
              jz         L1
              call       #rxtx_com0        ;处理COM0口接收内容
              bic.b      #80h,fg_rx0
L1            bit.b      #01h,fg_main
              jz         L2
              call       #prepare_ad       ;启动模数转换
              bic.b      #01h,fg_main
L2            bit.b      #02h,fg_main
              jz         L3
              call       #comput_ad        ;调用模数转换数据处理子程序
              bic.b      #02h,fg_main
L3            bit.b      #10h,fg_rx0
              jz         L4
              mov        #2000h,R15
rx_wait       dec        R15
              jnz        rx_wait
              bic.b      #80h,&P2OUT
              bic.b      #80h,&P2OUT
              mov.b      #00h,fg_rx0
L4            cmp.b      #0c0h,delay
              jlo        Mainloop
              dint
              mov        #WDT_ARST_1_9,&WDTCTL      ;
              jmp        $
;*************************************
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
prepare_ad    mov       #TASSEL_2+ID_3+MC_0+TACLR,&TACTL    ;时钟源选择SMCLK,8 分频,连续增记数
              mov       #271h,&TACCR0                       ;定时器&CCR0 用于比较模式
              bis       #CCIE,&TACCTL0
              BIS       #MC_1,&TACTL
              mov.b     #00h,ad_cnt2
              mov.b     #00h,ad_cnt3
              ret
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
stop_ad       mov       #TASSEL_2+ID_3+MC_0+TACLR,&TACTL    ;时钟源选择SMCLK,8 分频,连续增记数
              bic       #CCIE,&TACCTL0
              ret
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;*************************************
;************   Timer_B 定时中断
HCCR0         xor.b      #40h,&P2OUT
              inc.b      ad_cnt1
              cmp.b      #80h,ad_cnt1
              jlo        time_b1
              bis.b      #01h,fg_main     ;设置开始采集电流标志
              mov.b      #00h,ad_cnt1
;*************
time_b1       inc.b      B0_int_no
              and.b      #3fh,B0_int_no
              cmp.b      #00h,B0_int_no
              jeq        secend
              reti
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
secend        inc.b      delay
              inc.b      sys_ck
              cmp.b      #10h,sys_ck
              jlo        sec_go1
              dint
              mov        #WDT_ARST_1_9,&WDTCTL      ;
              jmp        $
sec_go1       inc.b      ad_ck
              cmp.b      #20h,ad_ck
              jlo        sec_go2
              dint
              mov        #WDT_ARST_1_9,&WDTCTL      ;
              jmp        $
sec_go2       inc.b      ad_int_no
              cmp.b      #20h,ad_int_no
              jlo        sec_go3
              dint
              mov        #WDT_ARST_1_9,&WDTCTL      ;
              jmp        $
sec_go3       inc.b      rx0_no
              cmp.b      #0f0h,rx0_no
              jlo        sec_ov
              dint
              mov        #WDT_ARST_1_9,&WDTCTL      ;
              jmp        $
sec_ov        reti
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;************   Timer_A 定时中断
CAPTURE_TA0     MOV       #SHT1_0+SHT0_9+MSC+ADC12ON,&ADC12CTL0  ;使用内部参考电压 1.5V
                MOV       #CSTARTADD_0+SHP+ADC12DIV_1+ADC12SSEL_3+CONSEQ_1,&ADC12CTL1
                MOV       #007H,&ADC12IE
                BIS       #ENC+ADC12SC,&ADC12CTL0   ;开始启动A/D;启动采样时钟
                reti
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;**********************************
;Ia	     dw	    7f33h,0000h,0000h    ;
;Ic          dw     7f2eh,0000h,0000h    ;
test         dw     8500h,0000h,0000h
sy           dw     9242h,0acc0h,0000h
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;---------------------------------------------------------------------------
#include        "ydjk_ad.s43"
#include        "ydjk_COM0.s43"
#include	"fppfnc4.s43"
#include	"fpp04.s43"
#include	"cnv04.s43"
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;*********************************************************************
NMI_INT       bit.b       #OFIFG,&IFG1            ; OSC fault flag set? 
              jnz         SetOsc                 ; OSC Fault, clear flag again 
              bit.b       #ACCVIFG,&IFG1
              jnz         flash_err
              bic.b       #NMIIFG,&IFG1
rst_wait      mov         #WDT_ARST_1_9,&WDTCTL   ; 1.9mS后看门狗复位 
;******
delay_wait    BIS.B       #ACCVIE+NMIIE+OFIE,&IE1     ;开放接收和发送中断
dly_wait_0    jmp         dly_wait_0
              reti
;*******************************
flash_err     bic.b       #ACCVIFG,&IFG1            ; Clear OSC fault flag 
              jmp         rst_wait
;*******************************
SetOsc        bic.b       #OFIFG,&IFG1            ; Clear OSC fault flag 
              mov         #3000h,R15              ; R15 = Delay 
SetOsc1       dec         R15                     ; Additional delay to ensure start 
              jnz         SetOsc1               ;
              bit.b       #OFIFG,&IFG1            ; OSC fault flag set? 
              jnz         SetOsc                ; OSC Fault, clear flag again 
              mov.b       #SELM_2+DIVM_0+SELS+DIVS_0,&BCSCTL2   ;MCLK选择XT2CLK且0分频,SMCLK选择XT2CLK且0分频,
              jmp         rst_wait
;********************************
;*********************************************************************
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
              COMMON     INTVEC           ; Interrupt vectors
;---------------------------------------------------------------------------
              ORG        UART0TX_VECTOR
              DW         COM0_TX
              ORG        UART0RX_VECTOR
              DW         COM0_RX
              ORG        TIMERB0_VECTOR
              DW         HCCR0                    ; TIMER_B CCR0
              ORG        TIMERA0_VECTOR
              DW         CAPTURE_TA0              ; TIMER_A CCR0
              ORG        ADC_VECTOR
              DW         ADD_INT
              ORG        NMI_VECTOR
              DW         NMI_INT
              ORG        RESET_VECTOR
              DW         RESET                    ; POR, ext. Reset, Watchdog
;---------------------------------------------------------------------------
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
              END

⌨️ 快捷键说明

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