📄 ydjk.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 + -