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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 * t, g% [! `: R  A  N

! K( g1 `$ z; b- j3 S: r#include <msp430x14x.h>& s; I) A0 c3 \4 T8 _, W; E
#include
* o5 S. h4 U7 E3 ?) \#define uchar unsigned char
5 A( d/ d: \; r8 {#define uint unsigned int
( \: e7 `4 b; }5 l#define CPU_F ((double) 8000000.0)//当前CPU主频 2 z9 l- Z  f" C$ I! `! {
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
% O7 {( R, j- _; x0 ]9 V; ]! k( B) ^#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)): N! x1 ~$ p2 R' u
uint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,6 \$ V) _% D$ c2 t' M6 W
17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
& _- g# m5 m5 A" C# Xuint t=0;' H/ u* n8 Y5 @/ o) L1 k" ^9 u$ m! }! G: k
void Init_clk()//时钟初始化5 D* T, B1 U8 Q
{
! r! X5 c. A& {0 M   uchar i;
: P$ x/ p. t5 e* l3 K1 D+ l5 k+ Q9 b   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
2 H5 k1 _1 L, Y" d; I   do
  |& }$ h8 G$ O9 H% P! K   {
5 W$ {0 `3 a# \. S     IFG1 &= ~OFIFG;//清振荡器失效标志
) h: ~' K' e- X* A( G     for(i=0xff;i>0;i--);  d, ]4 }+ @9 H' T/ j& k0 z6 Q) M
   }while((IFG1 & OFIFG)!=0);     //若振荡器失效标志有效
6 s4 _) I3 k5 t+ g  G   BCSCTL2|=SELM_2+SELS+DIVS_2;   //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M& f7 e+ `4 a: A9 w
}
6 K8 m( d+ \( m. gvoid main(void)  k' a+ B" Q2 Y4 u* v$ E
{                                              5 D+ ^3 I6 d+ }" ~# s! {4 a
  WDTCTL = WDTPW + WDTHOLD;  
; T6 S. G6 N/ B7 Q- E3 }7 o  Init_clk();            //时钟初始化
3 T6 X  y9 t5 h7 N7 }, G& n  P4DIR |= 0x07;         // P4.0 - P4.2 输出+ r% p1 J/ _. D% |; n& z
  P4SEL |= 0x07;         // P4.0 - P4.2 第二功能(PWM输出)5 a0 Y6 G( r' b; \; x8 {
  TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式6 A9 o, Q$ }- `1 h  J( c! r
  TBCCTL0 |=CCIE;          //CCR0比较模式,打开中断$ r+ G% L9 l$ Y
  TBCCR0 = 255;            //PWM周期
1 F4 T2 u  G# F1 Z5 r$ U  }$ ^, h  " g' `& ~, d) e; F  T4 {6 l
  TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中                      8 W3 U, t7 t4 S7 B
  TBCCTL2 = OUTMOD_7;    $ a8 `. k4 @; \: s& N8 [( _% b* X5 d, F
   
' A% `, t& X+ ]+ R. ~+ _1 v  TBCCR1 =sintable[t];+ W  n, {* Q/ r
  TBCCR2 = 128;          //占空比128/255=50%
& x  d5 C1 |4 {8 v4 C5 S  while(1)2 B3 Y" q' \/ I* @8 M* w  h
  {
8 V; E2 t- p* `& }* J3 T- x   _EINT();//打开总中断' U, k2 Z" q' b  [+ I  V1 ~0 P6 L
  }
2 B1 P) A& ~9 t! a+ n8 n$ Y}
# g/ t  _6 j" b2 Q2 f6 d#pragma vector=tiMERB0_VECTOR6 e" u. u) H. P+ |7 N% C. L
__interrupt void timerB()
. L" U& s" e2 C3 h! f7 k0 r{" C7 w* m! r; H0 `, D# o- _
  t=(t+1)%39;
# ]5 N2 X& w1 @# j( i& C9 y8 i  TBCCR1=sintable[t];//将新的抽样值装入TBCCR1
5 F" l; z4 O! w% K' m# c}
2 m( J4 Q5 Z) p; a4 C 8 [+ T* h1 Q% N1 ?$ I
7 b2 r& n+ U- a' r9 N$ X

该用户从未签到

2#
发表于 2022-9-20 13:39 | 只看该作者
本帖最后由 名字好听吗 于 2022-9-23 21:08 编辑 ) B+ M* U* Q  q) }- `$ W

9 l+ I8 N! _4 D2 w这些要,细细地看,还要分析情况,搞得跟逆向工程似的

该用户从未签到

3#
发表于 2022-9-20 14:51 | 只看该作者
本帖最后由 Crash 于 2022-9-23 21:48 编辑
4 e: F- G# B6 }; ~
& N3 m. M' b; {. _PWM就是方波信号,时钟信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 05:31 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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