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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Ele_insect 于 2022-9-26 16:04 编辑 . o+ M) E# Z. d: o9 Y0 k4 u

" E/ k: s$ J! z+ T' ^6 k- Y#include <msp430x14x.h>/ D2 }+ ^$ ^, z1 k- M
#include * ~- p2 V$ p/ N9 x; [
#define uchar unsigned char
' V2 x) X. d6 V4 H2 U! V#define uint unsigned int
  l+ o5 z$ Z% p; Q. @2 u7 {#define CPU_F ((double) 8000000.0)//当前CPU主频
" E9 p- u1 B8 z6 ?2 c* ?9 v#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  }" V6 ^) N2 a. D#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
6 i. U3 I) P" |  q+ xuint sintable[]={255,246,239,225,213,200,180,162,130,122,108,95,80,59,39,28,17,10,3,1,3,10,
+ M1 N+ h# w: t3 Y5 T6 |17,28,39,59,80,95,108,122,130,162,180,200,213,225,239,246,255};( }- K" P* a, s* D+ C" ~; ~0 W
uint t=0;/ ?! X4 G9 ~* F! V
void Init_clk()//时钟初始化" t: c) m8 l" e& \3 d5 {
{; M+ \- c# f, P' d: U
   uchar i;7 l9 |+ e: M1 T) f5 D
   BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
6 o1 K9 ?* e1 O, z   do
7 W" {/ U8 L4 Y& u   {0 U) [! K4 L/ u% c# V4 U( Q: z
     IFG1 &= ~OFIFG;//清振荡器失效标志
) z1 y, e  z* k) _     for(i=0xff;i>0;i--);
4 E2 H& }: {! h, Z   }while((IFG1 & OFIFG)!=0);     //若振荡器失效标志有效
  T0 `! ^. I0 \  w" P: b4 D   BCSCTL2|=SELM_2+SELS+DIVS_2;   //使MCLK=XT2=8M,SMCLK经过4分频,则SMCLK=2M
  w/ D2 H5 W* s}- p* h' x- D- r  V/ g5 a5 ?
void main(void)4 A, |7 f# O, h4 J# r( [
{                                             
( y, j% N* t+ i! A; [& k9 l  WDTCTL = WDTPW + WDTHOLD;  / m0 i8 `/ c0 R6 B
  Init_clk();            //时钟初始化
$ h; E- O1 E' w' [8 Y' M4 S9 B  P4DIR |= 0x07;         // P4.0 - P4.2 输出, M4 O9 O! p; K2 E
  P4SEL |= 0x07;         // P4.0 - P4.2 第二功能(PWM输出)/ o8 b7 Y# A9 q9 Q% P& v' d
  TBCTL = TBSSEL_2 + MC_1; // SMCLK,增计数模式
/ M4 h- i6 ~) r  TBCCTL0 |=CCIE;          //CCR0比较模式,打开中断
  a' a7 n, @' Y* y4 p) y8 J  TBCCR0 = 255;            //PWM周期 7 y; M0 z- [* f9 b- A* X
  + Z# l; p2 A/ c/ c
  TBCCTL1 = OUTMOD_7; //选择输出模式7,当TBR计数到0时,CCRx数据加载到TBCTLx中                      6 F$ C8 R* \9 L$ Y" p4 e- ~
  TBCCTL2 = OUTMOD_7;    , y$ t4 I; b3 Y! I* U/ V
   + Z2 c4 V' T2 w1 D) t# z9 h
  TBCCR1 =sintable[t];
7 l0 L0 a% R3 H  TBCCR2 = 128;          //占空比128/255=50% 2 _0 g3 L6 n% Z3 u% H; h# s
  while(1)
! x! x: u4 m7 Y3 ?' q  {
+ U7 b9 r: \; O. B6 M$ B) e   _EINT();//打开总中断; r1 k; I; N& C1 X) [) |) d) w
  }, M* M& I6 C) }4 y7 K1 M. [# r8 n
}
; t$ {) D5 a0 Y8 q4 |3 T/ O#pragma vector=tiMERB0_VECTOR
" ?2 n' L/ ]! u1 ^__interrupt void timerB()
! Z) ^+ i* i2 ]9 ~{" k# a/ g5 b* w0 {! |* J
  t=(t+1)%39;
1 a' P' R1 P8 v8 `8 z3 I  TBCCR1=sintable[t];//将新的抽样值装入TBCCR18 V+ Z' U. H# z3 B+ t' x3 f- x
}
, F) A3 v' o1 G; l9 G. g5 H
9 P# j! r7 {4 i) {* n! Y- C: `/ X2 L9 R3 F6 A" g% l8 ~( o

该用户从未签到

2#
发表于 2022-9-20 13:39 | 只看该作者
本帖最后由 名字好听吗 于 2022-9-23 21:08 编辑
7 a1 h  |9 A- A4 H1 f
2 C' m8 e3 R: Y这些要,细细地看,还要分析情况,搞得跟逆向工程似的

该用户从未签到

3#
发表于 2022-9-20 14:51 | 只看该作者
本帖最后由 Crash 于 2022-9-23 21:48 编辑
* O2 b7 e* Y4 U9 t/ A/ @' P. C9 B/ J% P; [; y( `% p$ |6 M
PWM就是方波信号,时钟信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-7 22:53 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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