📄 asm.s43
字号:
#include "msp430x22x4.h"
;用定时器A的CCR2来捕获内部ACLK信号
;并对ACLK输入8分频
;定时器时钟源选择SMCLK=1MHZ
;则捕获一个完整的ACLK信号大约为(1M*8/32768)个SMCLK
;第一个CCR2的捕获值是不完整的ACLK周期
;应该将第二个CCR2的值减去第一个CCR2的值才是一个完整的ACLK周期
;执行程序观察R6是否为256左右
; MSP430F2274
; -----------------
; /|\| XIN|-
; | | |
; --|RST XOUT|-
; | |
; | P1.0|-->LED
NAME main
PUBLIC main
;-----------------------------------------------------------------------------
; MSP430F22x中断向量表
;-----------------------------------------------------------------------------
ORG 0FFFEh
DC16 main
;------------------------------------------------------------------------------
RSEG CODE ;程序开始
;------------------------------------------------------------------------------
main MOV.W #0600H,SP ;设置堆栈指针
stopWDT MOV.W #WDTPW+WDTHOLD,&WDTCTL ;关看门狗
MOV.B &CALBC1_1MHZ,&BCSCTL1 ;设定DCO为1MHZ
MOV.B &CALDCO_1MHZ,&DCOCTL
BIC.B #OFIFG,IFG1
wait_osc ;等待晶振稳定
BIT.B #OFIFG,IFG1
JNZ wait_osc
BIS.B #DIVA_3,&BCSCTL1 ;ACLK输入八分频
MOV.W #CM1+CCIS_1+CAP,&TACCTL2 ;捕获模式,捕获上升沿,捕获内部ACLK
MOV.W #TASSEL_2+MC_2+TACLR,&TACTL ;定时器时钟源为SMCLK,启动连续计数,清TAR
wait_1 BIT.W #CCIFG,&TACCTL2 ;查CCR2标志位
JZ wait_1
MOV.W &TACCR2,R7 ;第一个捕获值存入R7
BIC.W #CCIFG,&TACCTL2 ;清CCR2的标志位
wait_2 BIT.W #CCIFG,&TACCTL2 ;再次等待
JZ wait_2
MOV.W &TACCR2,R6 ;将第二次捕获值存入R6
BIC.W #CCIFG,&TACCTL2
BIC.W #MC1,&TACTL ;关定时器A
SUB.W R7,R6 ;计算两次捕获值之差
mainloop
JMP mainloop
END main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -