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

📄 dnb.s43

📁 DESCRIPTION : 0.2S级三相电子式电能表
💻 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 + -