|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑
/ }' J* d2 O9 s& t# D- l0 u2 V3 D- m4 M2 {
#include <msp430x14x.h>
; t# t# r4 i: E8 ?% D& U#include - f O/ {. F/ E4 B; h w
#define uchar unsigned char- i. c' B1 |2 D4 s8 H
#define uint unsigned int
/ F4 B: Y9 A/ d#define CPU_F ((double) 8000000.0)//当前CPU主频
5 A7 o. F) x9 v1 n#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
6 G) V) L: H8 I#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
0 v4 h$ t! q; Y8 A0 Suint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,. i7 T/ o5 h3 z* d) M2 a) H8 [
17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
8 |" T- ~- X6 u# Y1 g5 C" Ouint t=0;+ o! v2 H9 G5 q
void Init_clk()//时钟初始化
n5 Q9 e' i4 {: D7 r, t% U( n{
8 p2 ]4 _, d; K! _9 H! a) g' ~ uchar i;
) j! P% T' `" {9 }: i6 y BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
, n( ^ L' K/ P5 B* P, F! _! Z8 p; R7 { do# Y# A' a, [8 ]; e# S+ h
{7 W. u c8 k5 O0 P5 P7 C2 p
IFG1 &= ~OFIFG;//清振荡器失效标志" c7 H _- Z: O0 t6 \7 s
for(i=0xff;i>0;i--);2 ~( Q; j# c+ D8 {# [ z
}while((IFG1 & OFIFG)!=0); //若振荡器失效标志有效
4 w3 n! B5 o5 X# [" k5 {! W6 H8 F4 ` BCSCTL2|=SELM_2+SELS+DIVS_2; //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M
# A& t; H$ D" u% B}
; `/ g# `, s0 B+ j' Q& {/ k. pvoid main(void)( c& p2 _( }0 a% B: I* e; u
{
# ]) h+ g! s$ O& \$ F7 ^ WDTCTL = WDTPW + WDTHOLD; . M# k3 ]$ \9 i0 U. h
Init_clk(); //时钟初始化
' O8 Z, v( y; T. P2 R+ o P4DIR |= 0x07; // P4.0 - P4.2 输出
2 q3 [* E) t6 R1 K4 q& O- | P4SEL |= 0x07; // P4.0 - P4.2 第二功能(PWM输出)
: `3 R: D6 Z5 F( S: h TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式
% q' ~$ a, k) T$ I: R5 Z TBCCTL0 |=CCIE; //CCR0比较模式,打开中断! V# h; d- @9 Q: a. a: w
TBCCR0 = 255; //PWM周期
' g1 E6 b: e: s0 W& `2 G8 W5 M O
. q! b+ X* [4 O: G# C+ ? TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中 $ j% ^/ \: a6 O5 g, R6 |# A
TBCCTL2 = OUTMOD_7; $ M5 ~, m7 K- V+ ~
) x# \3 _9 N* T1 X1 A5 b TBCCR1 =sintable[t];
$ S8 D9 U7 u! u3 r TBCCR2 = 128; //占空比128/255=50% 1 o9 o' \- L- o. P, w' l0 P
while(1)
S6 h4 N( x1 \: o0 A2 s {' w7 a$ K6 R& X
_EINT();//打开总中断
: A$ v# f# J( i0 K) P/ J1 D }5 ]/ w( L- R% G- E* s+ k# r3 [: z
}* y6 l4 j6 x, j8 \! V1 D9 c$ s$ n
#pragma vector=tiMERB0_VECTOR( }0 M, k# x0 ]: E
__interrupt void timerB()
. Z* s5 r% u0 ^( Q{- E4 Z0 Y6 h( P* G( Z- _0 H* S
t=(t+1)%39;
' F& ]3 t) ^' s5 ^: r U* R) V TBCCR1=sintable[t];//将新的抽样值装入TBCCR1
. N8 x! d; ~* ?7 Z4 X7 d* J+ [}7 o$ s6 p; r8 ]; d& s
. K* T, q/ Z& z
# X* z p- a; s4 ^( B8 t |
|