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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 % w% }8 j) e9 [+ P% N( Z6 I

* G# ~7 y0 Q  ^7 N' ^#include <msp430x14x.h>
* Y7 o+ e5 B. h# v$ ~+ h#include
! Q2 _0 d2 A+ [# \* q; E#define uchar unsigned char' |" D! T- N: @+ \6 K: D+ |
#define uint unsigned int
0 r& Z/ ^0 f9 x* c5 K$ K#define CPU_F ((double) 8000000.0)//当前CPU主频 8 [1 b! c9 g5 x1 v8 E. s  U
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
4 ~, J; j; J' l2 V4 X, H#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
! b; e/ `/ @( _4 K' b: yuint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,
3 T/ N) V# P" j# [: [" ~17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};
/ J$ \9 s! G8 _) q4 ?uint t=0;
/ c, [& a6 @- Q* V: z3 Xvoid Init_clk()//时钟初始化
5 Y4 }. U3 F/ m$ T2 K5 |3 M6 D{
+ N& O# H; j. D$ Z   uchar i;
" D* j9 f. |& W) K) Z   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的6 U$ {/ l2 C- V8 @: M
   do+ E' U+ V# \- {
   {2 V- L: q5 [3 W" e
     IFG1 &= ~OFIFG;//清振荡器失效标志
1 A/ L  z0 L. D5 ~2 u- L     for(i=0xff;i>0;i--);
3 p7 \5 S+ I7 N$ I   }while((IFG1 & OFIFG)!=0);     //若振荡器失效标志有效7 [: {+ v+ c9 @: J
   BCSCTL2|=SELM_2+SELS+DIVS_2;   //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M
# H$ p! q* S- v}
5 X1 D- R6 R- S. \7 e" `void main(void)! X* W8 y8 h  z- A8 W7 \
{                                             
. |0 b! |5 H# u: F; }8 u; h  WDTCTL = WDTPW + WDTHOLD;  % p8 H" b3 |' s$ {% p& T: j- I% |) `! f
  Init_clk();            //时钟初始化9 v* h* T$ H3 ?+ M( m' [+ f
  P4DIR |= 0x07;         // P4.0 - P4.2 输出
0 z5 }3 S- l' {, Q% A) Q. n  P4SEL |= 0x07;         // P4.0 - P4.2 第二功能(PWM输出)
: O' R3 C/ h. \6 k9 W8 N' z; {  TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式5 h! ~5 V$ g7 k- t5 y
  TBCCTL0 |=CCIE;          //CCR0比较模式,打开中断. E2 J* ]& `- t7 q5 @5 ]/ {
  TBCCR0 = 255;            //PWM周期
* a, m, E  x3 Z2 ]) ?7 Q8 q- }  6 Y: u" _1 s8 C4 h3 z( E1 l
  TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中                     
6 M+ x4 _4 v7 ^" m$ Z! s; K  TBCCTL2 = OUTMOD_7;   
' q, l; Q& V  k   
4 g; F6 P/ j6 i: F4 G$ c' A; m  TBCCR1 =sintable[t];
" R. l, H+ m) R& v: G. z1 L+ E  TBCCR2 = 128;          //占空比128/255=50% 6 J/ Z% z' i4 ~' v
  while(1)! s0 ~  [2 I' a( c+ u+ H
  {7 W! e$ T% F$ q. o4 k
   _EINT();//打开总中断
: H6 T& k' L$ D4 t, G- J2 ~  }8 [! A( R3 w$ m4 e. C; ]9 \5 u
}% u- S" K" F1 U0 a
#pragma vector=tiMERB0_VECTOR+ ]" l- F$ y+ J# p. d) N  C2 E! D: D* E
__interrupt void timerB()
# j6 z  H1 M% m6 C2 x* a{- u' ^- G7 `7 o0 ]% ]2 M
  t=(t+1)%39;
# w: J4 r& N0 c% {2 n' _2 p# J  TBCCR1=sintable[t];//将新的抽样值装入TBCCR1
' R# y1 e/ Z- q. r}1 _/ [# A  Q2 f$ M9 s" V$ n; \" S

8 a0 g. b" N4 @4 t- B! \  |6 B5 Q

该用户从未签到

2#
发表于 2022-9-20 13:39 | 只看该作者
本帖最后由 名字好听吗 于 2022-9-23 21:08 编辑 ( H( M( L7 N9 |+ m$ ]+ }

* b& X3 R( {. P! \; |" i这些要,细细地看,还要分析情况,搞得跟逆向工程似的

该用户从未签到

3#
发表于 2022-9-20 14:51 | 只看该作者
本帖最后由 Crash 于 2022-9-23 21:48 编辑
% r! b) s) G- }1 H& e; _' u/ t& B: h( n, A
3 }; K+ }* p6 v! e! GPWM就是方波信号,时钟信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-9 12:57 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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