|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 * ]8 S( Z7 ~) I+ A
$ {' a' U/ i9 u! B# a3 K# x
#include <msp430x14x.h>7 D* B3 T0 X5 v+ H0 O
#include ; T8 e: u+ w w8 u, h2 O9 U" H
#define uchar unsigned char3 d+ X. T+ V( r. A: H. S# x
#define uint unsigned int% G3 ]! u6 C/ d: m2 `
#define CPU_F ((double) 8000000.0)//当前CPU主频
) n: q, R2 f8 q, X#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))# z, |7 c2 S m! U" q$ z( g
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))" ^5 s6 H/ a) h O2 z. q/ ]
uint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,
3 M3 V7 \* {( V1 n( d0 E5 z, g! S17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};; F. {( K& [9 N, c/ R1 V7 q
uint t=0;* Q& b+ g* J! x: {
void Init_clk()//时钟初始化
9 X& N) R$ @6 L' p{
5 N7 s1 D c# A) X, m C# Q5 _6 t uchar i;
( H- ~ H$ |/ i% i' U( a+ i! g BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的3 f5 F* a5 z/ [7 E
do$ _# l" x& M( o& C2 ^+ A% N* ~
{& V1 p8 W* k7 }) s7 y
IFG1 &= ~OFIFG;//清振荡器失效标志
1 l) v. G+ M9 g6 t" j& Y6 b for(i=0xff;i>0;i--);
/ h5 f1 ?5 Z5 g, `& \ }while((IFG1 & OFIFG)!=0); //若振荡器失效标志有效$ a6 E; n! T" `2 v$ U9 S# s
BCSCTL2|=SELM_2+SELS+DIVS_2; //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M) {0 F& f1 {1 Q O% q, E( ^
}
8 J' j/ ~0 B6 I5 tvoid main(void). V2 V. x$ u Q1 T
{
3 n: H% ^* r) |8 r( J% ?% g WDTCTL = WDTPW + WDTHOLD;
. C/ m3 X: t' C8 r9 p5 M Init_clk(); //时钟初始化
. w C+ W" t9 X) r, l5 W P4DIR |= 0x07; // P4.0 - P4.2 输出
4 B9 g! ?- J- E$ f" F4 Q6 ` P4SEL |= 0x07; // P4.0 - P4.2 第二功能(PWM输出)! e5 \$ k5 g2 h$ Y) \- A* C
TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式
}- X3 k) E) y$ w TBCCTL0 |=CCIE; //CCR0比较模式,打开中断
& G( b* p( s+ E( G4 \ TBCCR0 = 255; //PWM周期 5 d" `3 w S/ Y- l
' t: w' M5 w0 t4 y+ F: t
TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中 - M5 E3 j* \" w4 h
TBCCTL2 = OUTMOD_7;
0 B. G6 F' {" [$ R " R: V0 L! B* ^% l1 B" B3 R
TBCCR1 =sintable[t];
# H* w- U/ A/ M' e- D( c- G TBCCR2 = 128; //占空比128/255=50% ; `3 O5 k7 m& E9 a M, Z b
while(1)
- i. K1 i# d+ S+ z2 q, c" W' X {
. k& y9 I5 b( e" Y) C _EINT();//打开总中断
# R9 b. x2 Q) {( ?8 V: ^ }
3 T. Y# Y4 _8 F8 W}
- v7 ]7 g# J9 C#pragma vector=tiMERB0_VECTOR7 P, @3 s" i. l; c e
__interrupt void timerB()
( `, ?! q3 S- \$ Y{, N% s- Y: H' ^
t=(t+1)%39;- P8 o4 W0 v2 K M% K' U
TBCCR1=sintable[t];//将新的抽样值装入TBCCR1
! Z1 _5 D6 }7 v/ h# h9 H}
, m& ]8 y# g" u9 B8 \! u) h2 b
$ l/ ?% Z" V+ `+ b8 a% w( c% `2 Q \6 y
|
|