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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 1 L) r) |. B. E$ j3 z4 n
% D6 z, @/ O3 y) d9 D. w: G6 g
#include <msp430x14x.h>/ i: E; q9 @3 r; e
#include ( I5 A; K7 T9 u( h, c
#define uchar unsigned char
) U# {  y5 _; I8 ]* [: k4 \5 `* D#define uint unsigned int" X+ f& w( m, a- P; r
#define CPU_F ((double) 8000000.0)//当前CPU主频
& n+ }. _* S- W8 {#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)); q9 I7 ^. m4 Y9 q1 L
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)). W- M" p1 e6 `; s2 O6 l7 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,
* \' b4 S2 y6 H- ~( O) o17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
; Q5 W4 I2 s. @* G  Quint t=0;
% g' c& b; T2 i" nvoid Init_clk()//时钟初始化
; \+ F5 [' q- S4 M, ^7 c9 [{
( \% ?) E. W3 t8 O8 r$ g   uchar i;3 h4 m& v: N2 T2 B* m  H* O( s" L1 g
   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
3 E! S  f5 k% ]7 D# ?   do0 Z) p3 S9 E8 F+ k; i
   {8 V7 E7 o0 Q7 Y. W" W
     IFG1 &= ~OFIFG;//清振荡器失效标志7 R# C9 X0 d0 @, ?
     for(i=0xff;i>0;i--);
( G& d  O+ y( n, y/ x& e   }while((IFG1 & OFIFG)!=0);     //若振荡器失效标志有效
" N0 l. f" Q, E/ X! o   BCSCTL2|=SELM_2+SELS+DIVS_2;   //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M
8 A; c4 X- G& c) J8 g4 t2 d- L  z& K}
; \& h; n* P; g, \4 k0 vvoid main(void)% q2 P* P8 k9 H% Q# a
{                                              . e1 a8 V7 `4 s2 J
  WDTCTL = WDTPW + WDTHOLD;  9 L, B% x, z3 c+ l* o
  Init_clk();            //时钟初始化
& J; T  I' H2 j; L+ C8 `  P4DIR |= 0x07;         // P4.0 - P4.2 输出% l1 f( P7 i' w. v, i
  P4SEL |= 0x07;         // P4.0 - P4.2 第二功能(PWM输出)
* \- q! u; {6 z! b, P9 W0 l. Q7 O. T  TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式
# ]! ?' W! I7 [  TBCCTL0 |=CCIE;          //CCR0比较模式,打开中断
0 u5 \6 G& d; R1 U: S  TBCCR0 = 255;            //PWM周期 : _& X3 x! I) q7 p4 E
  
! H5 C2 n8 E5 a0 K+ l/ H  TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中                      7 n& Y+ O  y: F' a% v7 k
  TBCCTL2 = OUTMOD_7;    4 r$ A5 L+ o; l) Y
   
2 K/ ?; ?9 p/ Y7 |# ?' E9 B% Z  TBCCR1 =sintable[t];6 A$ }8 _- {( u# F5 M! k9 \  ^( u% e
  TBCCR2 = 128;          //占空比128/255=50% + X2 q# Z+ b" P
  while(1)
% ^2 J1 D- ^1 @+ _9 h1 ]  T  {
: |6 V& J: z* w5 O& e! L5 S   _EINT();//打开总中断
9 h6 n4 a/ U! O( S  }
9 R: G# g) e0 v# c; T6 T: p}
6 a3 F3 r" d6 v+ `. J" f& D#pragma vector=tiMERB0_VECTOR# T- b- ~" A& P3 [5 l" p
__interrupt void timerB()
9 D" i' b$ [3 I; C{. T- k; m3 ~% }: q. m3 s
  t=(t+1)%39;
/ |4 y; b/ t! }7 t) h5 o  TBCCR1=sintable[t];//将新的抽样值装入TBCCR1
4 v# A! F, B' O: X, P}8 h& f# q3 K' o8 c. p) w

- y1 y# B: ~/ G
' m# F5 X# E. D; X

该用户从未签到

2#
发表于 2022-9-20 13:39 | 只看该作者
本帖最后由 名字好听吗 于 2022-9-23 21:08 编辑
/ M, a0 d2 p8 {# [" L5 Z/ y1 V& ?0 D: v7 ^7 h
这些要,细细地看,还要分析情况,搞得跟逆向工程似的

该用户从未签到

3#
发表于 2022-9-20 14:51 | 只看该作者
本帖最后由 Crash 于 2022-9-23 21:48 编辑 # T9 u9 r. ?; b$ y4 _
, J4 ?0 r" T8 F4 V2 _
PWM就是方波信号,时钟信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-26 14:36 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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