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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 3 _) E" Y% y" U% C! A% J5 L

+ a+ X7 U) ?1 N#include <msp430x14x.h># B! Y2 D: G7 E9 q0 k5 [
#include : Z& m% x+ i- d) `
#define uchar unsigned char
, u7 \. N. e# R. a- g#define uint unsigned int
6 z9 ~9 ^: l+ J# C9 y#define CPU_F ((double) 8000000.0)//当前CPU主频
2 S% F9 l& B) O1 l#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
% z0 D; R4 K+ p  |* o4 }7 V#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))" Q7 d) d/ z5 i, {5 k8 H& d: t
uint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,
- F: P3 k; j7 Z( d$ \5 X8 L. R17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
0 P7 Q  ]; ^% Y* ^: Juint t=0;* t8 t; M+ c& d
void Init_clk()//时钟初始化
; p; O2 p/ z7 }$ X$ C' |{
, M, y8 P/ K% `& j, u   uchar i;
9 k5 V1 d) s2 b/ Y   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的6 Z5 ^5 ~0 m" s  ^3 ]4 S/ a
   do8 v# V; ^) P( ~$ Q, H* @
   {
+ e# |9 [# D: @8 l* A     IFG1 &= ~OFIFG;//清振荡器失效标志
% y" f1 n+ ]" `# l     for(i=0xff;i>0;i--);
, o# Z" `: L) V  H' E   }while((IFG1 & OFIFG)!=0);     //若振荡器失效标志有效
$ x0 H7 K( U: h" Z   BCSCTL2|=SELM_2+SELS+DIVS_2;   //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M, R4 ~- n$ n7 g
}" q: A9 l8 j+ B: u6 Z9 w
void main(void)0 i, T2 Z* U& H
{                                              8 F6 }3 g; k+ l# w1 y% ~/ K1 v4 \% z
  WDTCTL = WDTPW + WDTHOLD;  
) }+ C' A/ k2 f  Init_clk();            //时钟初始化
3 C0 F, F) p! o3 N5 A1 E9 S8 S( ?5 x  P4DIR |= 0x07;         // P4.0 - P4.2 输出
3 c& T$ v, X# q  P4SEL |= 0x07;         // P4.0 - P4.2 第二功能(PWM输出)+ n9 w) `9 u& y/ ?2 R: G
  TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式) m, `" _5 }4 \: q/ X) |8 R/ o
  TBCCTL0 |=CCIE;          //CCR0比较模式,打开中断! y/ Q8 v& y( \2 c" @$ j
  TBCCR0 = 255;            //PWM周期 / w" O" G0 C( |! b" R7 n  }3 i
  
7 U* w8 w9 u6 }' j; O4 l  TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中                     
( ^; S0 U0 r$ U  e' p5 W6 L6 b# Y  TBCCTL2 = OUTMOD_7;   
7 w# }( y! N! y   ( t8 L5 o5 e* J2 _( A) q. i
  TBCCR1 =sintable[t];
2 h* d* N1 ]4 `1 v  TBCCR2 = 128;          //占空比128/255=50%
# L9 {2 o! A& `9 O7 G% `1 \  while(1)
* j+ F# t$ l2 a  {
! f8 ]# _) T1 k8 }& k6 ?( ?   _EINT();//打开总中断
. v0 |0 n% s9 b% w6 a5 L# I2 y  }
, n8 y: C5 A: p4 A" C/ c: u}. H. u, I8 R2 r$ T* C8 `" @$ V
#pragma vector=tiMERB0_VECTOR, f( d9 S: o% o  x2 v. N* C$ k
__interrupt void timerB()- x- C+ J& v1 X+ L- T
{$ ?/ O6 }* V4 D% Q
  t=(t+1)%39;5 \5 j$ e# G9 d- N# G6 T1 s( {
  TBCCR1=sintable[t];//将新的抽样值装入TBCCR1: C& O/ S' t6 k8 j  x
}# Q- j* v6 S, N9 }3 C

8 I# k7 U* {1 ], C6 C" O
1 R' j  S$ v; P& s

该用户从未签到

2#
发表于 2022-9-20 13:39 | 只看该作者
本帖最后由 名字好听吗 于 2022-9-23 21:08 编辑
  `% Q; T$ ?* @, E3 p% @. F: o& R
这些要,细细地看,还要分析情况,搞得跟逆向工程似的

该用户从未签到

3#
发表于 2022-9-20 14:51 | 只看该作者
本帖最后由 Crash 于 2022-9-23 21:48 编辑
' H. v, B8 R: B  k* f; t) S! C
. \; M7 ~6 {; Y; ~* f+ Q6 XPWM就是方波信号,时钟信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-5 14:06 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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