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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑
) W/ r( f) i. p& y. e' u
* n- t, a/ q# T#include <msp430x14x.h>, {  V! g- T( B* D7 H9 y4 t
#include
5 n' W! r2 d( ~9 i# p2 I! u#define uchar unsigned char
; t/ v2 T0 N' w7 f' U#define uint unsigned int3 c7 b. v, Z8 L, k$ ~$ i7 J
#define CPU_F ((double) 8000000.0)//当前CPU主频 ; J1 A8 @$ w1 j5 Y$ k2 n2 x
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)); [+ F* r: q) O/ m' l2 X
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))+ a- O4 q) z0 R2 s
uint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,
& r  [2 `/ D3 [6 N8 e8 }17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};  |+ E+ l. Y/ n! s/ ?: y( z
uint t=0;# b2 R, C: n4 o! x3 z: D
void Init_clk()//时钟初始化
6 J3 j" }3 w( e$ n{
8 O. C9 x- j+ W  x6 d; H: x, m% q   uchar i;
. T9 ]$ h1 k- v" i6 q   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
6 M5 k' O. N  H; h$ w2 v' ]" i   do
" d1 q+ Z  d0 k. a2 k/ x' f* b; t) b; O   {, b( a- _6 y7 r8 \' r; i1 ]" d- X% u4 z
     IFG1 &= ~OFIFG;//清振荡器失效标志
( k8 o( |( K  S! F7 x# w: Z) ?) u3 Y     for(i=0xff;i>0;i--);! y8 \+ m. o9 u' n7 O* l: m
   }while((IFG1 & OFIFG)!=0);     //若振荡器失效标志有效
  e& s: w' ^9 j6 b6 ~0 ~8 X3 {  S   BCSCTL2|=SELM_2+SELS+DIVS_2;   //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M
& B4 |$ D' s" P9 Q$ ?}
% Q' G  B* q" L% x$ j- m% bvoid main(void)" s6 W; E+ i6 g% j& K& B8 X5 Z
{                                              1 T, }/ V0 H' G, ^
  WDTCTL = WDTPW + WDTHOLD;  
6 z2 n# ?* |. r; G' f  Init_clk();            //时钟初始化; \4 ^3 v: U  ?2 I% e% u
  P4DIR |= 0x07;         // P4.0 - P4.2 输出
# [" y, P2 Z" \6 t% w5 Q  P4SEL |= 0x07;         // P4.0 - P4.2 第二功能(PWM输出)2 W" i  L/ A6 ]  g% \
  TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式0 _4 s$ V4 q) k/ {* E4 \3 g
  TBCCTL0 |=CCIE;          //CCR0比较模式,打开中断  l% `+ `+ G- {- T
  TBCCR0 = 255;            //PWM周期
9 x3 w( ?8 O7 e# v0 j  8 Y0 `; X( b0 d$ X- G$ k: b# }! t
  TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中                     
( O0 s: z0 b$ M8 }* m; S; t- E  TBCCTL2 = OUTMOD_7;   
' ?7 w; L" i2 W; m2 Q   
: k' q  N9 m" A& b6 ?3 y  TBCCR1 =sintable[t];
4 l+ r1 f; D1 u' z* p7 R  TBCCR2 = 128;          //占空比128/255=50%
6 Z. ^7 t; k5 H+ |8 M  while(1)9 J4 K+ k3 a! W  l) u" \$ |3 w0 O  ]
  {" t' [# G& e" ~* E0 ]
   _EINT();//打开总中断
$ G  a5 a8 r* Y8 ?# Y  }) Q; M4 }6 x( B2 b( |
}
5 ^: b3 I! q+ a$ [* J5 f#pragma vector=tiMERB0_VECTOR3 U, q. k  o) v' C4 p4 B* l, N( g
__interrupt void timerB()" o/ s+ N* F+ k# @2 s+ }; Q! Q
{
4 j& {) Z+ H3 i& ]2 g& o  t=(t+1)%39;* @0 t2 G) s/ z" ~1 X; y
  TBCCR1=sintable[t];//将新的抽样值装入TBCCR1& q, x! J+ C- x, C+ Q8 K
}  v7 P& L* m+ e$ Q

- u: g. C' l% i; S* m/ e
; e+ {( K6 H/ o( i

该用户从未签到

2#
发表于 2022-9-20 13:39 | 只看该作者
本帖最后由 名字好听吗 于 2022-9-23 21:08 编辑
  c- r# Q5 y  H/ w/ H9 M1 x$ D7 O  m& [: d
这些要,细细地看,还要分析情况,搞得跟逆向工程似的

该用户从未签到

3#
发表于 2022-9-20 14:51 | 只看该作者
本帖最后由 Crash 于 2022-9-23 21:48 编辑
. w* K0 k4 B3 N( V, }- p8 Y" Z& s
2 n& I# C4 F& b3 O! tPWM就是方波信号,时钟信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-12 08:11 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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