|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 % w% }8 j) e9 [+ P% N( Z6 I
* G# ~7 y0 Q ^7 N' ^#include <msp430x14x.h>
* Y7 o+ e5 B. h# v$ ~+ h#include
! Q2 _0 d2 A+ [# \* q; E#define uchar unsigned char' |" D! T- N: @+ \6 K: D+ |
#define uint unsigned int
0 r& Z/ ^0 f9 x* c5 K$ K#define CPU_F ((double) 8000000.0)//当前CPU主频 8 [1 b! c9 g5 x1 v8 E. s U
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
4 ~, J; j; J' l2 V4 X, H#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
! b; e/ `/ @( _4 K' b: yuint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,
3 T/ N) V# P" j# [: [" ~17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
/ J$ \9 s! G8 _) q4 ?uint t=0;
/ c, [& a6 @- Q* V: z3 Xvoid Init_clk()//时钟初始化
5 Y4 }. U3 F/ m$ T2 K5 |3 M6 D{
+ N& O# H; j. D$ Z uchar i;
" D* j9 f. |& W) K) Z BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的6 U$ {/ l2 C- V8 @: M
do+ E' U+ V# \- {
{2 V- L: q5 [3 W" e
IFG1 &= ~OFIFG;//清振荡器失效标志
1 A/ L z0 L. D5 ~2 u- L for(i=0xff;i>0;i--);
3 p7 \5 S+ I7 N$ I }while((IFG1 & OFIFG)!=0); //若振荡器失效标志有效7 [: {+ v+ c9 @: J
BCSCTL2|=SELM_2+SELS+DIVS_2; //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M
# H$ p! q* S- v}
5 X1 D- R6 R- S. \7 e" `void main(void)! X* W8 y8 h z- A8 W7 \
{
. |0 b! |5 H# u: F; }8 u; h WDTCTL = WDTPW + WDTHOLD; % p8 H" b3 |' s$ {% p& T: j- I% |) `! f
Init_clk(); //时钟初始化9 v* h* T$ H3 ?+ M( m' [+ f
P4DIR |= 0x07; // P4.0 - P4.2 输出
0 z5 }3 S- l' {, Q% A) Q. n P4SEL |= 0x07; // P4.0 - P4.2 第二功能(PWM输出)
: O' R3 C/ h. \6 k9 W8 N' z; { TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式5 h! ~5 V$ g7 k- t5 y
TBCCTL0 |=CCIE; //CCR0比较模式,打开中断. E2 J* ]& `- t7 q5 @5 ]/ {
TBCCR0 = 255; //PWM周期
* a, m, E x3 Z2 ]) ?7 Q8 q- } 6 Y: u" _1 s8 C4 h3 z( E1 l
TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中
6 M+ x4 _4 v7 ^" m$ Z! s; K TBCCTL2 = OUTMOD_7;
' q, l; Q& V k
4 g; F6 P/ j6 i: F4 G$ c' A; m TBCCR1 =sintable[t];
" R. l, H+ m) R& v: G. z1 L+ E TBCCR2 = 128; //占空比128/255=50% 6 J/ Z% z' i4 ~' v
while(1)! s0 ~ [2 I' a( c+ u+ H
{7 W! e$ T% F$ q. o4 k
_EINT();//打开总中断
: H6 T& k' L$ D4 t, G- J2 ~ }8 [! A( R3 w$ m4 e. C; ]9 \5 u
}% u- S" K" F1 U0 a
#pragma vector=tiMERB0_VECTOR+ ]" l- F$ y+ J# p. d) N C2 E! D: D* E
__interrupt void timerB()
# j6 z H1 M% m6 C2 x* a{- u' ^- G7 `7 o0 ]% ]2 M
t=(t+1)%39;
# w: J4 r& N0 c% {2 n' _2 p# J TBCCR1=sintable[t];//将新的抽样值装入TBCCR1
' R# y1 e/ Z- q. r}1 _/ [# A Q2 f$ M9 s" V$ n; \" S
8 a0 g. b" N4 @4 t- B! \ |6 B5 Q
|
|