|
#include "msp430x43x.h"
#include "Pwm.h"
ORG 0c000h
Reset mov.w #00400h,SP
mov.w #(WDTPW+WDTHOLD),WDTCTL ; 禁止看门狗定时器
mov.b #00ch,&P2DIR ; P2.2和P2.3为输出
mov.b #00ch,&P2SEL ; P2.2和P2.3分别为TB1和TB2
mov.b #050,SCFQCTL ; 1.6384MHz/32768Hz = 50,fDCO=MCLK=1.6384MHz
mov.w #07ffh,R5
clr.w SampleTimes
Delay1 dec.w R5 ; 晶振初始化延时
cmp.w #00000h,R5
jnz Delay1
mov.w #(TBSSEL1+TBCLR),TBCTL ; 选择SMCLK为时钟,定时器清除
bis.w #(MC_1+CNTL_0+TBCLGRP_0),TBCTL ; 选择up,16位模式
mov.w #CCIE,TBCCTL0 ; 将CCR0设为比较模式,中断允许
mov.w #255,TBCCR0 ; PWM的周期为256,也就是DAC为8bit
mov.w #(OUTMOD_7+CLLD_1),TBCCTL1 ; 将CCRx设为比较模式,中断禁止
mov.w #(OUTMOD_7+CLLD_1),TBCCTL2 ; 选择输出模式7,当TBR计数到0时CCRx数据加载到TBCTLx
mov.w #SinTa××e,R5
add.w SampleTimes,R5
mov.w 0(R5),TBCCR2 ; 将正弦表加载到CCR2
mov.w #128,TBCCR1 ; PWM的占空比为50%,产生0.5VCC的直流电平
eint ; 中断允许
Loop1 nop
bis.w #LPM0,SR ; CUP进入低功耗模式
jmp Loop1
ret
;===================================================
TBisr0 push R5
incd.w SampleTimes
cmp.w #00040h,SampleTimes
jc TBisrl1
jmp TBisrl2
TBisrl1 clr.w SampleTimes
TBisrl2 mov.w #SinTa××e,R5
add.w SampleTimes,R5
mov.w 0(R5),TBCCR2 ; 将新的抽样值装入CCR2
pop R5
reti
;===================================================
ORG 0fffeh
DW Reset
ORG 0fffah
DW TBisr0
end |
|