|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 * t, g% [! `: R A N
! K( g1 `$ z; b- j3 S: r#include <msp430x14x.h>& s; I) A0 c3 \4 T8 _, W; E
#include
* o5 S. h4 U7 E3 ?) \#define uchar unsigned char
5 A( d/ d: \; r8 {#define uint unsigned int
( \: e7 `4 b; }5 l#define CPU_F ((double) 8000000.0)//当前CPU主频 2 z9 l- Z f" C$ I! `! {
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
% O7 {( R, j- _; x0 ]9 V; ]! k( B) ^#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)): N! x1 ~$ p2 R' u
uint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,6 \$ V) _% D$ c2 t' M6 W
17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
& _- g# m5 m5 A" C# Xuint t=0;' H/ u* n8 Y5 @/ o) L1 k" ^9 u$ m! }! G: k
void Init_clk()//时钟初始化5 D* T, B1 U8 Q
{
! r! X5 c. A& {0 M uchar i;
: P$ x/ p. t5 e* l3 K1 D+ l5 k+ Q9 b BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
2 H5 k1 _1 L, Y" d; I do
|& }$ h8 G$ O9 H% P! K {
5 W$ {0 `3 a# \. S IFG1 &= ~OFIFG;//清振荡器失效标志
) h: ~' K' e- X* A( G for(i=0xff;i>0;i--); d, ]4 }+ @9 H' T/ j& k0 z6 Q) M
}while((IFG1 & OFIFG)!=0); //若振荡器失效标志有效
6 s4 _) I3 k5 t+ g G BCSCTL2|=SELM_2+SELS+DIVS_2; //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M& f7 e+ `4 a: A9 w
}
6 K8 m( d+ \( m. gvoid main(void) k' a+ B" Q2 Y4 u* v$ E
{ 5 D+ ^3 I6 d+ }" ~# s! {4 a
WDTCTL = WDTPW + WDTHOLD;
; T6 S. G6 N/ B7 Q- E3 }7 o Init_clk(); //时钟初始化
3 T6 X y9 t5 h7 N7 }, G& n P4DIR |= 0x07; // P4.0 - P4.2 输出+ r% p1 J/ _. D% |; n& z
P4SEL |= 0x07; // P4.0 - P4.2 第二功能(PWM输出)5 a0 Y6 G( r' b; \; x8 {
TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式6 A9 o, Q$ }- `1 h J( c! r
TBCCTL0 |=CCIE; //CCR0比较模式,打开中断$ r+ G% L9 l$ Y
TBCCR0 = 255; //PWM周期
1 F4 T2 u G# F1 Z5 r$ U }$ ^, h " g' `& ~, d) e; F T4 {6 l
TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中 8 W3 U, t7 t4 S7 B
TBCCTL2 = OUTMOD_7; $ a8 `. k4 @; \: s& N8 [( _% b* X5 d, F
' A% `, t& X+ ]+ R. ~+ _1 v TBCCR1 =sintable[t];+ W n, {* Q/ r
TBCCR2 = 128; //占空比128/255=50%
& x d5 C1 |4 {8 v4 C5 S while(1)2 B3 Y" q' \/ I* @8 M* w h
{
8 V; E2 t- p* `& }* J3 T- x _EINT();//打开总中断' U, k2 Z" q' b [+ I V1 ~0 P6 L
}
2 B1 P) A& ~9 t! a+ n8 n$ Y}
# g/ t _6 j" b2 Q2 f6 d#pragma vector=tiMERB0_VECTOR6 e" u. u) H. P+ |7 N% C. L
__interrupt void timerB()
. L" U& s" e2 C3 h! f7 k0 r{" C7 w* m! r; H0 `, D# o- _
t=(t+1)%39;
# ]5 N2 X& w1 @# j( i& C9 y8 i TBCCR1=sintable[t];//将新的抽样值装入TBCCR1
5 F" l; z4 O! w% K' m# c}
2 m( J4 Q5 Z) p; a4 C
8 [+ T* h1 Q% N1 ?$ I
7 b2 r& n+ U- a' r9 N$ X
|
|