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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 * ]8 S( Z7 ~) I+ A
$ {' a' U/ i9 u! B# a3 K# x
#include <msp430x14x.h>7 D* B3 T0 X5 v+ H0 O
#include ; T8 e: u+ w  w8 u, h2 O9 U" H
#define uchar unsigned char3 d+ X. T+ V( r. A: H. S# x
#define uint unsigned int% G3 ]! u6 C/ d: m2 `
#define CPU_F ((double) 8000000.0)//当前CPU主频
) n: q, R2 f8 q, X#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))# z, |7 c2 S  m! U" q$ z( g
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))" ^5 s6 H/ a) h  O2 z. q/ ]
uint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,
3 M3 V7 \* {( V1 n( d0 E5 z, g! S17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};; F. {( K& [9 N, c/ R1 V7 q
uint t=0;* Q& b+ g* J! x: {
void Init_clk()//时钟初始化
9 X& N) R$ @6 L' p{
5 N7 s1 D  c# A) X, m  C# Q5 _6 t   uchar i;
( H- ~  H$ |/ i% i' U( a+ i! g   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的3 f5 F* a5 z/ [7 E
   do$ _# l" x& M( o& C2 ^+ A% N* ~
   {& V1 p8 W* k7 }) s7 y
     IFG1 &= ~OFIFG;//清振荡器失效标志
1 l) v. G+ M9 g6 t" j& Y6 b     for(i=0xff;i>0;i--);
/ h5 f1 ?5 Z5 g, `& \   }while((IFG1 & OFIFG)!=0);     //若振荡器失效标志有效$ a6 E; n! T" `2 v$ U9 S# s
   BCSCTL2|=SELM_2+SELS+DIVS_2;   //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M) {0 F& f1 {1 Q  O% q, E( ^
}
8 J' j/ ~0 B6 I5 tvoid main(void). V2 V. x$ u  Q1 T
{                                             
3 n: H% ^* r) |8 r( J% ?% g  WDTCTL = WDTPW + WDTHOLD;  
. C/ m3 X: t' C8 r9 p5 M  Init_clk();            //时钟初始化
. w  C+ W" t9 X) r, l5 W  P4DIR |= 0x07;         // P4.0 - P4.2 输出
4 B9 g! ?- J- E$ f" F4 Q6 `  P4SEL |= 0x07;         // P4.0 - P4.2 第二功能(PWM输出)! e5 \$ k5 g2 h$ Y) \- A* C
  TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式
  }- X3 k) E) y$ w  TBCCTL0 |=CCIE;          //CCR0比较模式,打开中断
& G( b* p( s+ E( G4 \  TBCCR0 = 255;            //PWM周期 5 d" `3 w  S/ Y- l
  ' t: w' M5 w0 t4 y+ F: t
  TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中                      - M5 E3 j* \" w4 h
  TBCCTL2 = OUTMOD_7;   
0 B. G6 F' {" [$ R   " R: V0 L! B* ^% l1 B" B3 R
  TBCCR1 =sintable[t];
# H* w- U/ A/ M' e- D( c- G  TBCCR2 = 128;          //占空比128/255=50% ; `3 O5 k7 m& E9 a  M, Z  b
  while(1)
- i. K1 i# d+ S+ z2 q, c" W' X  {
. k& y9 I5 b( e" Y) C   _EINT();//打开总中断
# R9 b. x2 Q) {( ?8 V: ^  }
3 T. Y# Y4 _8 F8 W}
- v7 ]7 g# J9 C#pragma vector=tiMERB0_VECTOR7 P, @3 s" i. l; c  e
__interrupt void timerB()
( `, ?! q3 S- \$ Y{, N% s- Y: H' ^
  t=(t+1)%39;- P8 o4 W0 v2 K  M% K' U
  TBCCR1=sintable[t];//将新的抽样值装入TBCCR1
! Z1 _5 D6 }7 v/ h# h9 H}
, m& ]8 y# g" u9 B8 \! u) h2 b
$ l/ ?% Z" V+ `+ b8 a% w( c% `2 Q  \6 y

该用户从未签到

2#
发表于 2022-9-20 13:39 | 只看该作者
本帖最后由 名字好听吗 于 2022-9-23 21:08 编辑
5 S' |- d% H4 x( J1 D( U$ _7 `5 j  c9 K) M+ P7 |( |% \$ {/ Y
这些要,细细地看,还要分析情况,搞得跟逆向工程似的

该用户从未签到

3#
发表于 2022-9-20 14:51 | 只看该作者
本帖最后由 Crash 于 2022-9-23 21:48 编辑
8 O5 g7 n1 \# s) w" F( \& g7 V9 W  r) [7 g
PWM就是方波信号,时钟信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-17 10:37 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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