找回密码
 注册
关于网站域名变更的通知
查看: 283|回复: 2
打印 上一主题 下一主题

定时器产生pwm信号和实现DA功能

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-20 10:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑   D& V) h1 @$ E

: f6 Z( ]! N" m7 K8 d9 y* j% R#include <msp430x14x.h>
- q% {( y' t1 A" j6 }6 T#include * Z  x2 v7 D! ]* Y3 a) F. L
#define uchar unsigned char
  J% R* R/ D  ~) A; T2 T- U$ U#define uint unsigned int. A9 }9 T* Z. N# T' D, L, `
#define CPU_F ((double) 8000000.0)//当前CPU主频 6 U; V" f# D. e2 A6 b; t
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
/ b$ G; [8 ]" C0 e4 V#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
: o5 g/ [. ]+ a  l1 Euint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,
2 l5 Q, c7 q' M! J7 S& g17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};7 n1 x/ g' n7 s9 h
uint t=0;* M5 D: Y$ o, F
void Init_clk()//时钟初始化
: g1 I8 S5 _( }" P2 ^$ g% c, u{
7 C( g5 l$ e' g8 \   uchar i;
+ Z; G$ Z4 y+ ?; g* h$ N) v   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的  g8 r; L/ T, X& U/ l' E; m
   do: G7 a) H7 ?) N
   {
7 C; \, n3 r7 A) O7 f9 a: y     IFG1 &= ~OFIFG;//清振荡器失效标志
0 }5 n, y5 `2 f% k7 @" \     for(i=0xff;i>0;i--);
. T4 N  T2 r: W' t9 ?5 V! O+ t   }while((IFG1 & OFIFG)!=0);     //若振荡器失效标志有效* X3 _* N* {9 ]5 {( x
   BCSCTL2|=SELM_2+SELS+DIVS_2;   //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M9 q# O/ a1 l1 l( v* v# G/ j1 b
}
3 h" Z) Z4 Z) \. Avoid main(void)
) e. T* l* ^4 b! I1 E8 [3 T{                                              ' b) A" G+ O2 D  e) I8 {7 v
  WDTCTL = WDTPW + WDTHOLD;  
8 y0 p: |+ I8 |4 {2 ~0 V  Init_clk();            //时钟初始化, c2 X" U! Y/ ?/ _8 y
  P4DIR |= 0x07;         // P4.0 - P4.2 输出& S9 S$ s3 G/ J. q8 W) t$ q7 x7 _* k4 S
  P4SEL |= 0x07;         // P4.0 - P4.2 第二功能(PWM输出)9 _5 O' v5 c+ i& j  E2 X3 n
  TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式
1 H4 d! K: M- a/ y0 c; L; y$ f  TBCCTL0 |=CCIE;          //CCR0比较模式,打开中断8 [* p$ E! R% }# F) T( a% Q
  TBCCR0 = 255;            //PWM周期   \) ~0 w0 X  ~
  
" Z  @; M7 M7 Q% g. i' [  TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中                      / y) I# T7 Q* R5 k5 ?0 b- p
  TBCCTL2 = OUTMOD_7;    9 W/ a7 T) ]3 {0 Y4 M# V
   
0 O$ T: }- A+ f* X  TBCCR1 =sintable[t];
% ]' i; V$ H7 v$ a/ n7 `6 u  TBCCR2 = 128;          //占空比128/255=50% : C. G" q9 l. l5 _) d1 {
  while(1)
3 U: g- U4 T- q2 n  {
9 W) E0 }: v7 I! F   _EINT();//打开总中断
  S  {6 Z5 m, b: {9 G  }
; Y. l% j, h& i; }0 R}
( f% I7 B) q" ~9 d3 t#pragma vector=tiMERB0_VECTOR
2 T/ Z6 g3 a* ]' F$ u, c5 h__interrupt void timerB()
7 Y3 e  O/ U7 h/ S{
4 O- J/ @) ^3 n" N  t=(t+1)%39;1 c* r2 S0 \/ s0 f4 E" [. R* v
  TBCCR1=sintable[t];//将新的抽样值装入TBCCR12 C' ?' R/ D3 N8 {; F% n
}" G. B0 `9 O2 z1 Z* q  V

5 a- y6 I0 a& |- M/ d6 s$ j7 w  L( `9 Y) `$ X/ ]/ L7 |

该用户从未签到

2#
发表于 2022-9-20 13:39 | 只看该作者
本帖最后由 名字好听吗 于 2022-9-23 21:08 编辑 . }" N" J/ u) O; V* F
. K, F  }; K6 J
这些要,细细地看,还要分析情况,搞得跟逆向工程似的

该用户从未签到

3#
发表于 2022-9-20 14:51 | 只看该作者
本帖最后由 Crash 于 2022-9-23 21:48 编辑
3 s3 R. }" s# Z& s+ D' i7 l3 b
. B3 `) i# ~/ SPWM就是方波信号,时钟信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-4 13:35 , Processed in 0.140625 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表