|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 9 v: y/ M( s1 C" F7 h
3 `* @2 v% B2 \5 U0 O y) H- K#include <msp430x14x.h>
1 K0 y3 ]; g+ [2 W+ D6 D( h#include - S; y$ m& E/ h( ^4 V# i: T
#define uchar unsigned char
, v3 w. t) k$ v: v9 @3 v7 P#define uint unsigned int; ^8 f) q) {0 ?
#define CPU_F ((double) 8000000.0)//当前CPU主频 3 M- j. }: c" y( c7 J7 h3 t
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))9 i+ L$ M, g/ j( n" m6 [7 l/ t# S& |
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
( k) ~. } P# ^6 s6 _uint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,; v8 E! Q- c9 B% L7 F, t
17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
* [7 A! K/ `& r" m5 `uint t=0;- h/ K" P+ V: Z; ^( \8 B" i8 ?3 h
void Init_clk()//时钟初始化# v T' ?' r$ n5 X5 J4 ] _! E$ y
{4 q0 _0 A# y! p: f; N
uchar i;( `: w! E: ^& M; U9 Z: z
BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
; | y: k, w h4 ?, I$ M do9 J" D: @; _/ @8 s" e
{
* |) x* O+ Q0 J% a" h1 N IFG1 &= ~OFIFG;//清振荡器失效标志. g! B: p T8 G/ e4 u% z8 z: r
for(i=0xff;i>0;i--);& ?. q( _6 a( M# Z( I" y* h% r
}while((IFG1 & OFIFG)!=0); //若振荡器失效标志有效2 l: F6 D% S5 {; _1 j" g
BCSCTL2|=SELM_2+SELS+DIVS_2; //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M6 t$ M/ K0 H% |" N7 T
}0 V. ^% B& E# Q2 o* x! I6 |
void main(void)
7 U& m8 @7 ~8 R4 M) a{
0 h. U3 V( n/ l0 l( ]5 i WDTCTL = WDTPW + WDTHOLD;
- Z2 l, ~) y+ \ Init_clk(); //时钟初始化7 K/ v1 Q) I: N3 g
P4DIR |= 0x07; // P4.0 - P4.2 输出
: U- x5 _: q( {' R4 ~! v; M P4SEL |= 0x07; // P4.0 - P4.2 第二功能(PWM输出)
5 K+ o( d" a8 B TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式) S' [# I# s- H0 h1 c4 d
TBCCTL0 |=CCIE; //CCR0比较模式,打开中断7 ?: C( M/ X1 L6 V! a
TBCCR0 = 255; //PWM周期
, V4 {- c% ^& H 4 v- D1 F4 [/ V% P4 T s1 _2 S$ D
TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中 6 d8 ~" ~% `$ b
TBCCTL2 = OUTMOD_7;
3 o' b( a* S: G( R ! A1 @8 v8 {& j( J
TBCCR1 =sintable[t];
: }7 b7 D3 J* K/ v3 j& \/ ]" [ TBCCR2 = 128; //占空比128/255=50% 1 h7 a2 Z% C! G5 ^1 q
while(1): f0 L9 d/ I1 ~) {
{# v8 U- ~) n$ w" S. }+ g
_EINT();//打开总中断
6 s4 u- A- O6 T2 Y9 R }) E: n- D3 s9 Z( c) U
}
I6 v; \/ k, T8 G% ?#pragma vector=tiMERB0_VECTOR
1 c0 U& B* \2 T s# c5 @) k__interrupt void timerB()6 d8 L. k8 |3 B# f B5 G6 V `+ N
{2 z: ?9 {9 C" u8 d1 \) I
t=(t+1)%39;
6 ^, N8 l& f. S9 O TBCCR1=sintable[t];//将新的抽样值装入TBCCR1
8 s6 [+ D7 t& G8 g, n0 c}
" k, ~8 J) r3 w0 F4 \/ R. O
& q( J$ D8 h1 S6 r8 y4 C' x) _9 s' T% z. c- D$ _8 s8 S3 A Q4 F; V9 F
|
|