|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑
3 C, w8 a* A/ |( o# t! W1 U7 a0 n- V
& K$ P$ P7 S% s( m: _8 p#include <msp430x14x.h>* E6 J# O/ }% z6 F8 U6 X" |
#include 3 T o7 F [2 u2 v+ [+ {
#define uchar unsigned char
( |' A2 X8 c+ p4 c; b; E9 y5 I' G4 Y#define uint unsigned int
! o3 Y% E7 M w" B0 F: h2 J#define CPU_F ((double) 8000000.0)//当前CPU主频 . k( c2 t( L$ [( t% I
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))$ `, C) h! j8 w* G, }" @
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
8 F- N" V7 }! e V" M1 n3 _uint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,
) L; _$ T1 Z7 A! _; x1 c$ c17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
; ~! N2 z0 z, x4 E1 ouint t=0;
0 g! ]( A, u! j4 o/ \void Init_clk()//时钟初始化
3 O3 Y- N6 Z/ W4 x9 l: h7 j{ Y }% S; w" R
uchar i;* r7 W, G" h- R3 P' w7 U0 B
BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的( g# z7 ^/ d- C: X
do$ |0 U* d6 j5 |1 W* g2 g7 x
{
& o2 E( [+ P& ]! x3 @ IFG1 &= ~OFIFG;//清振荡器失效标志, G& t0 y' d8 I2 s
for(i=0xff;i>0;i--);
- K: G8 Y! v) t r3 O& m8 }% r }while((IFG1 & OFIFG)!=0); //若振荡器失效标志有效+ f) Z7 U' z6 Y7 S7 B6 m; P0 w9 W: W
BCSCTL2|=SELM_2+SELS+DIVS_2; //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M
k8 i$ ]- C9 s- `! S- x! M5 t}/ |; M* N6 K% }8 E$ o0 r
void main(void) t8 h! H4 f4 \$ W" p( f! r
{ ( q) T M; _# _5 c0 x
WDTCTL = WDTPW + WDTHOLD;
0 l% [. G9 D& u% {! N& \9 q4 {2 D Init_clk(); //时钟初始化
4 F0 `+ Z, U! L u/ D P4DIR |= 0x07; // P4.0 - P4.2 输出9 I2 w; ]+ U8 `0 f0 P0 X
P4SEL |= 0x07; // P4.0 - P4.2 第二功能(PWM输出)
, x8 H4 b- T3 G; K; f8 J TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式
) W- i% o$ s8 E6 y% x TBCCTL0 |=CCIE; //CCR0比较模式,打开中断7 @* F Q. _' l" P! j" w' R& L% D
TBCCR0 = 255; //PWM周期 7 A) u- A! @8 k
$ M5 X' h9 N) Q# ?. D ?4 H7 n
TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中
& k! h; b* A5 U( j" Z& x# n$ t; y2 I) r TBCCTL2 = OUTMOD_7;
8 s6 P( e8 w. ~. O, g3 k w z7 C Z7 @3 g: Z
TBCCR1 =sintable[t];. S8 B& n; X, ]9 N2 g. e
TBCCR2 = 128; //占空比128/255=50% 4 L+ t" U o( E; w+ y+ ?9 F. q
while(1)
& s8 T2 v. L" [0 A* h P1 D4 @ {
$ \& i: e4 P5 ~# G' N; g _EINT();//打开总中断
' m2 ~) A& G# L }' K5 l7 @) F9 E3 e+ j
}
" [! U2 t; @, ]5 P2 ]1 [. q#pragma vector=tiMERB0_VECTOR
( e. q- `5 b7 ?; ^__interrupt void timerB()
! y# Z2 u, h# b% R9 ]! x! z1 f{$ X/ G2 _- v6 N. h7 a5 X$ `1 |. t l
t=(t+1)%39;: y- ]1 p$ N3 x2 B& d
TBCCR1=sintable[t];//将新的抽样值装入TBCCR13 N4 q3 E# |# c7 w0 L2 X7 [0 u! f
}
2 X. q/ g% x5 ~8 A2 S9 C
8 e3 R% @* Z+ g& ?
% V1 q# r; l; {5 o7 r6 l* h |
|