|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 3 _) E" Y% y" U% C! A% J5 L
+ a+ X7 U) ?1 N#include <msp430x14x.h># B! Y2 D: G7 E9 q0 k5 [
#include : Z& m% x+ i- d) `
#define uchar unsigned char
, u7 \. N. e# R. a- g#define uint unsigned int
6 z9 ~9 ^: l+ J# C9 y#define CPU_F ((double) 8000000.0)//当前CPU主频
2 S% F9 l& B) O1 l#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
% z0 D; R4 K+ p |* o4 }7 V#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))" Q7 d) d/ z5 i, {5 k8 H& d: t
uint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,
- F: P3 k; j7 Z( d$ \5 X8 L. R17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
0 P7 Q ]; ^% Y* ^: Juint t=0;* t8 t; M+ c& d
void Init_clk()//时钟初始化
; p; O2 p/ z7 }$ X$ C' |{
, M, y8 P/ K% `& j, u uchar i;
9 k5 V1 d) s2 b/ Y BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的6 Z5 ^5 ~0 m" s ^3 ]4 S/ a
do8 v# V; ^) P( ~$ Q, H* @
{
+ e# |9 [# D: @8 l* A IFG1 &= ~OFIFG;//清振荡器失效标志
% y" f1 n+ ]" `# l for(i=0xff;i>0;i--);
, o# Z" `: L) V H' E }while((IFG1 & OFIFG)!=0); //若振荡器失效标志有效
$ x0 H7 K( U: h" Z BCSCTL2|=SELM_2+SELS+DIVS_2; //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M, R4 ~- n$ n7 g
}" q: A9 l8 j+ B: u6 Z9 w
void main(void)0 i, T2 Z* U& H
{ 8 F6 }3 g; k+ l# w1 y% ~/ K1 v4 \% z
WDTCTL = WDTPW + WDTHOLD;
) }+ C' A/ k2 f Init_clk(); //时钟初始化
3 C0 F, F) p! o3 N5 A1 E9 S8 S( ?5 x P4DIR |= 0x07; // P4.0 - P4.2 输出
3 c& T$ v, X# q P4SEL |= 0x07; // P4.0 - P4.2 第二功能(PWM输出)+ n9 w) `9 u& y/ ?2 R: G
TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式) m, `" _5 }4 \: q/ X) |8 R/ o
TBCCTL0 |=CCIE; //CCR0比较模式,打开中断! y/ Q8 v& y( \2 c" @$ j
TBCCR0 = 255; //PWM周期 / w" O" G0 C( |! b" R7 n }3 i
7 U* w8 w9 u6 }' j; O4 l TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中
( ^; S0 U0 r$ U e' p5 W6 L6 b# Y TBCCTL2 = OUTMOD_7;
7 w# }( y! N! y ( t8 L5 o5 e* J2 _( A) q. i
TBCCR1 =sintable[t];
2 h* d* N1 ]4 `1 v TBCCR2 = 128; //占空比128/255=50%
# L9 {2 o! A& `9 O7 G% `1 \ while(1)
* j+ F# t$ l2 a {
! f8 ]# _) T1 k8 }& k6 ?( ? _EINT();//打开总中断
. v0 |0 n% s9 b% w6 a5 L# I2 y }
, n8 y: C5 A: p4 A" C/ c: u}. H. u, I8 R2 r$ T* C8 `" @$ V
#pragma vector=tiMERB0_VECTOR, f( d9 S: o% o x2 v. N* C$ k
__interrupt void timerB()- x- C+ J& v1 X+ L- T
{$ ?/ O6 }* V4 D% Q
t=(t+1)%39;5 \5 j$ e# G9 d- N# G6 T1 s( {
TBCCR1=sintable[t];//将新的抽样值装入TBCCR1: C& O/ S' t6 k8 j x
}# Q- j* v6 S, N9 }3 C
8 I# k7 U* {1 ], C6 C" O
1 R' j S$ v; P& s |
|