📄 dnb.s43
字号:
; =============================================================================
; HANG ZHOU HSIANG CHENG ELECTRIC CO., LTD
; FILE : dnb.s43
; VERSION : 1.0
; BEG DATE : 2002/8/10
; MOD DATE : 2002/8/16
; DESCRIPTION : 0.2S级三相电子式电能表
; =============================================================================
#include "msp430x14x.h"
#include "dnb.h"
ORG 1100h
START mov.w #0A00h,SP ;set stack point
mov.w #WDTPW+WDTHOLD,&WDTCTL ;STOP WDT
mov.b #0,IFG1 ;清中断标志IFG1
mov.b #0,IFG2 ;清中断标志IFG2
bic.b #XT2OFF,&BCSCTL1 ;启动振荡器
XT2LOOP bic.b #OFIFG,&IFG1 ;清OFIFG
bit.b #OFIFG,&IFG1
jnz XT2LOOP
mov.w #0FFh,R4
XT2DELAY dec.w R4 ;延时
nop
jnz XT2DELAY
bic.b #OFIFG,&IFG1 ;清OFIFG
mov.b #SELS+SELM1,&BCSCTL2 ;XT2CLK为SMCLK,MCLK
;-------- Clear RAM ------------
mov.w #7ffh,R4
Clear_RAM mov.b #0,DCODE(R4)
dec.w R4
cmp.w #0h,R4
jnz Clear_RAM
clr.w &state
;-------- not used register ----
mov.b #00h,&IE1
mov.b #00h,&ME1
mov.b #00h,&CAPD
mov.b #00h,&CACTL2
mov.b #00h,&CACTL1
;-----------端口设置------------
;-------- P1口 -----------------
mov.b #08h,&P1SEL ;设P1.3为外围模块功能,其余为I/O
mov.b #0f7h,&P1DIR ;设为输出
mov.b #00h,&P1IE ;禁止中断
;-------- P2口 -----------------
mov.b #00h,&P2SEL ;设为I/O
mov.b #0ffh,&P2DIR ;设为输出
mov.b #00h,&P2IE ;禁止中断
;-------- P3口 -----------------
mov.b #0ceh,&P3SEL ;设为外围功能模块
mov.b #0bdh,&P3DIR ;设为输出
;-------- P4口 -----------------
;mov.b #00h,&P4SEL ;设为I/O为何出错???0ff
;mov.b #0ffh,&P4DIR ;设为输出 0ff
;-------- P5口 -----------------
mov.b #10h,&P5SEL ;设为I/O
mov.b #0ffh,&P5DIR ;设为输出
;-------- P6口 -----------------
mov.b #00h,&P6SEL ;设为I/O
mov.b #0ffh,&P6DIR ;设为输出
;-----------Timer_A 设置----------------------------;
mov.w #TASSEL1+TACLR,&TACTL ;选MCLK、清零
mov.w #2500,&TACCR0 ;50Hz 20ms 20000us/0.125us/64=2500
mov.w #200,&TACCR1 ;25us
mov.w #2500,&SampleTime ;初始化为:50Hz时的采样间隔
mov.w #OUTMOD2+OUTMOD1+OUTMOD0+CCIE,&TACCTL0 ;设为比较模式,输出模式7,开中断00F0H
mov.w #OUTMOD2+OUTMOD1+OUTMOD0+CCIE,&TACCTL1 ;设为比较模式,输出模式7,开中断00F0H
mov.w #CM0+SCS+CAP+CCIE,&TACCTL2 ;设为捕获模式,上升沿,开中断
bis.w #MC0,&TACTL ;启动Timer_A增计数模式
bic.w #COV+CCIFG,TACCTL2 ;清TACCR2捕获溢出、中断标志
;-----------UART1 设置----------------------------
mov.b #10h,&UCTL1 ;设置8位数据位,UART模式
mov.b #30h,&UTCTL1 ;选择主系统时钟
mov.b #08h,&URCTL1 ;
mov.b #03h,&UBR11 ;波特率设置:9600
mov.b #41h,&UBR01 ;
mov.b #49h,&UMCTL1 ;调整控制寄存器
; mov.b #URXIE1+UTXIE1,&IE2 ;打开UART1收发中断
bic.b #URXIE1+UTXIE1,&IE2 ;打开UART1收发中断
mov.b #URXIFG1+UTXIFG1,&ME2 ;清除UART1收发中断标志
;-------------------------------------------------
bis.w #GIE,SR ;开启中断
MAINLOOP
bic.b #BIT7,P1OUT ;外部WDT RST
;mov.w #WDTPW+WDTCNTCL,&WDTCTL
;mov.w #0A00h,SP
;------------- reused register
;mov.b #00h,&IE1 ;关闭未用中断
;mov.b #URXIE1+UTXIE1,&IE2 ;打开UART1收发中断
;mov.b #UTXIE1,&IE2 ;打开UART1收发中断
;mov.b #00h,&ME1 ;清除未用中断标志
;mov.b #URXIFG1+UTXIFG1,&ME2 ;清除UART1收发中断标志
;-----------端口设置------------
;-------- P1口 -----------------
mov.b #08h,&P1SEL ;设P1.3为外围模块功能,其余为I/O
mov.b #0f7h,&P1DIR ;设为输出
mov.b #00h,&P1IE ;禁止中断
;-------- P2口 -----------------
mov.b #00h,&P2SEL ;设为I/O
mov.b #0ffh,&P2DIR ;设为输出
mov.b #00h,&P2IE ;禁止中断
;-------- P3口 -----------------
mov.b #0ceh,&P3SEL ;设为外围功能模块
mov.b #0bdh,&P3DIR ;设为输出
;-------- P4口 -----------------
;mov.b #00h,&P4SEL ;设为I/O为何出错???0ff
;mov.b #0ffh,&P4DIR ;设为输出 0ff
;-------- P5口 -----------------
mov.b #10h,&P5SEL ;设为I/O
mov.b #0ffh,&P5DIR ;设为输出
;-------- P6口 -----------------
mov.b #00h,&P6SEL ;设为I/O
mov.b #0ffh,&P6DIR ;设为输出
;-------------------------------
mov.b #SELS+SELM1,&BCSCTL2 ;XT2CLK为SMCLK,MCLK
bic.b #XT2OFF,&BCSCTL1 ;启动振荡器
;-----------UART1 设置------------------------------;
bis.b #BIT7,P1OUT ;外部WDT RST
mov.b #10h,&UCTL1 ;设置8位数据位,UART模式
mov.b #30h,&UTCTL1 ;选择主系统时钟
mov.b #08h,&URCTL1 ;
mov.b #03h,&UBR11 ;波特率设置:9600
mov.b #41h,&UBR01 ;
mov.b #49h,&UMCTL1 ;调整控制寄存器
bit.w #BITF,&state ;判断是否计算
jz Nocompute
bic.w #BITF,&state
call #COMPUTE
Nocompute bit.w #BIT0,&recok ;判断是否通讯接收
jz NORECEIVE
bic.w #BIT0,&recok
call #RECEIVEFUC
NORECEIVE
bis.b #BIT0,&P6OUT
jmp MAINLOOP
;---------- 子程
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -