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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 9 v: y/ M( s1 C" F7 h

3 `* @2 v% B2 \5 U0 O  y) H- K#include <msp430x14x.h>
1 K0 y3 ]; g+ [2 W+ D6 D( h#include - S; y$ m& E/ h( ^4 V# i: T
#define uchar unsigned char
, v3 w. t) k$ v: v9 @3 v7 P#define uint unsigned int; ^8 f) q) {0 ?
#define CPU_F ((double) 8000000.0)//当前CPU主频 3 M- j. }: c" y( c7 J7 h3 t
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))9 i+ L$ M, g/ j( n" m6 [7 l/ t# S& |
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
( k) ~. }  P# ^6 s6 _uint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,; v8 E! Q- c9 B% L7 F, t
17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
* [7 A! K/ `& r" m5 `uint t=0;- h/ K" P+ V: Z; ^( \8 B" i8 ?3 h
void Init_clk()//时钟初始化# v  T' ?' r$ n5 X5 J4 ]  _! E$ y
{4 q0 _0 A# y! p: f; N
   uchar i;( `: w! E: ^& M; U9 Z: z
   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
; |  y: k, w  h4 ?, I$ M   do9 J" D: @; _/ @8 s" e
   {
* |) x* O+ Q0 J% a" h1 N     IFG1 &= ~OFIFG;//清振荡器失效标志. g! B: p  T8 G/ e4 u% z8 z: r
     for(i=0xff;i>0;i--);& ?. q( _6 a( M# Z( I" y* h% r
   }while((IFG1 & OFIFG)!=0);     //若振荡器失效标志有效2 l: F6 D% S5 {; _1 j" g
   BCSCTL2|=SELM_2+SELS+DIVS_2;   //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M6 t$ M/ K0 H% |" N7 T
}0 V. ^% B& E# Q2 o* x! I6 |
void main(void)
7 U& m8 @7 ~8 R4 M) a{                                             
0 h. U3 V( n/ l0 l( ]5 i  WDTCTL = WDTPW + WDTHOLD;  
- Z2 l, ~) y+ \  Init_clk();            //时钟初始化7 K/ v1 Q) I: N3 g
  P4DIR |= 0x07;         // P4.0 - P4.2 输出
: U- x5 _: q( {' R4 ~! v; M  P4SEL |= 0x07;         // P4.0 - P4.2 第二功能(PWM输出)
5 K+ o( d" a8 B  TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式) S' [# I# s- H0 h1 c4 d
  TBCCTL0 |=CCIE;          //CCR0比较模式,打开中断7 ?: C( M/ X1 L6 V! a
  TBCCR0 = 255;            //PWM周期
, V4 {- c% ^& H  4 v- D1 F4 [/ V% P4 T  s1 _2 S$ D
  TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中                      6 d8 ~" ~% `$ b
  TBCCTL2 = OUTMOD_7;   
3 o' b( a* S: G( R   ! A1 @8 v8 {& j( J
  TBCCR1 =sintable[t];
: }7 b7 D3 J* K/ v3 j& \/ ]" [  TBCCR2 = 128;          //占空比128/255=50% 1 h7 a2 Z% C! G5 ^1 q
  while(1): f0 L9 d/ I1 ~) {
  {# v8 U- ~) n$ w" S. }+ g
   _EINT();//打开总中断
6 s4 u- A- O6 T2 Y9 R  }) E: n- D3 s9 Z( c) U
}
  I6 v; \/ k, T8 G% ?#pragma vector=tiMERB0_VECTOR
1 c0 U& B* \2 T  s# c5 @) k__interrupt void timerB()6 d8 L. k8 |3 B# f  B5 G6 V  `+ N
{2 z: ?9 {9 C" u8 d1 \) I
  t=(t+1)%39;
6 ^, N8 l& f. S9 O  TBCCR1=sintable[t];//将新的抽样值装入TBCCR1
8 s6 [+ D7 t& G8 g, n0 c}
" k, ~8 J) r3 w0 F4 \/ R. O
& q( J$ D8 h1 S6 r8 y4 C' x) _9 s' T% z. c- D$ _8 s8 S3 A  Q4 F; V9 F

该用户从未签到

2#
发表于 2022-9-20 13:39 | 只看该作者
本帖最后由 名字好听吗 于 2022-9-23 21:08 编辑
$ J% R6 L& w. Z" M( x& u7 }2 [, N" i2 V; l$ Z6 Y
这些要,细细地看,还要分析情况,搞得跟逆向工程似的

该用户从未签到

3#
发表于 2022-9-20 14:51 | 只看该作者
本帖最后由 Crash 于 2022-9-23 21:48 编辑
# {" x6 ~) m: J. n$ l# @1 _3 H
$ g$ s: \9 b' W. H2 LPWM就是方波信号,时钟信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 04:44 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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