文档库 最新最全的文档下载
当前位置:文档库 › 基于msp430定时器输出PWM波

基于msp430定时器输出PWM波

基于msp430定时器输出PWM波

#include

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P1DIR |= BIT2; // P1.2 and P1.3 output

P1SEL |= BIT2; // P1.2 and P1.3 TA1/2 options TACTL = TASSEL_2 + MC_1;

CCR0 = 512-1; // PWM Period

CCTL1 = OUTMOD_7; // CCR1 reset/set

CCR1 = 127; // CCR1 PWM duty cycle

_BIS_SR(CPUOFF); // Enter LPM0

}

MSP430程序库十一定时器TA的PWM输出

MSP430程序库<十一>定时器TA 的PWM 输出 定时器是单片机常用的其本设备,用来产生精确计时或是其他功能;msp430的定时器不仅可以完成精确定时,还能产生PWM 波形输出,和捕获时刻值(上升沿或是下降沿到来的时候)。这里完成一个比较通用的PWM 波形产生程序。 ? 硬件介绍硬件介绍:: MSP430系列单片机的TimerA 结构复杂,功能强大,适合应用于工业控制,如数字化电机控制,电表和手持式仪表的理想配置。它给开发人员提供了较多灵活的选择余地。当PWM 不需要修改占空比和时间时,TimerA 能自动输出PWM ,而不需利用中断维持PWM 输出。 MSP430F16x 和MSP430F14x 单片机内部均含有两个定时器,TA 和TB ;TA 有三个模块,CCR0-CCR2;TB 含有CCR0-CCR67个模块;其中CCR0模块不能完整的输出PWM 波形(只有三种输出模式可用);TA 可以输出完整的2路PWM 波形;TB 可以输出6路完整的P WM 波形。 定时器的PWM 输出有有8种模式: 输出模式0 输出模式:输出信号OUTx 由每个捕获/比较模块的控制寄存器CCTLx 中的OUTx 位定义,并在写入该寄存器后立即更新。最终位OUTx 直通。 输出模式1 置位模式:输出信号在TAR 等于CCRx 时置位,并保持置位到定时器复位或选择另一种输出模式为止。 输出模式2 PWM 翻转/复位模式:输出在TAR 的值等于CCRx 时翻转,当TAR 的值等于CCR0时复位。 输出模式3 PWM 置位/复位模式:输出在TAR 的值等于CCRx 时置位,当TAR 的值等于CCR0时复位。 输出模式4 翻转模式:输出电平在TAR 的值等于CCRx 时翻转,输出周期是定时器周期的2倍。 输出模式5复位模式:输出在TAR 的值等于CCRx 时复位,并保持低电平直到选择另一种输出模式。 输出模式6PWM 翻转/置位模式:输出电平在TAR 的值等于CCRx 时翻转,当TAR 值等于CCR0时置位。 输出模式7PWM 复位/置位模式:输出电平在TAR 的值等于CCRx 时复位,当TAR 的值等于CCR0时置位。 下图是增计数模式下的输出波形(本程序使用的是增模式3和7): 计数模式计数模式:: 增计数模式 捕获/比较寄存器CCR0用作Timer_A 增计数模式的周期寄存器,因为CCR0为16位寄存器,所以该模式适用于定时周期小于65 536的连续计数情况。计数器TAR 可以增计数到CCR0的值,当计数值与CCR0的值相等(或定时器值大于CCR0的值)时,定时器复位并从0开始重新计数。 连续计数模式 在需要65 536个时钟周期的定时应用场合常用连续计数模式。定时器从当前值计数到0FFFFH 后,又从0开始重新计数 增/减计数模式 需要对称波形的情况经常可以使用增/减计数模式,该模式下,定时器先增计数到CCR0的值,然后反向减计数到0。计数周期仍由CCR0定义,它是CCR0计数器数值的2倍。

MSP430 定时器TB中断应用实例

MSP430 定时器TB中断应用实例 msp430定时器中断,实现功能:利用定时器TB0的中断实现板上led灯得闪烁。 TA和TB的设置相似,需要设置的寄存器有: 1、TBR:定时计数器主体,对定时计数器进行初始值设置。 2、TBCTL:控制寄存器,对定时器的各个属性进行设置,各位如图所示,(图中是TA的控制寄存器,把A改成B就是了) TBSSELx是选择定时器时钟输入源,一般设置为2取系统时钟。 IDx是对输入时钟进行分频,0不分频,1为2分频,2为4分频,3为8分频 MCx为计数模式控制位,0为停止模式,1为增基数模式,2为连续计数模式,3为增/减计数模式 3、TBCCR0寄存器用于设置比较值,例如增加计数模式时,当TBR中的值增加到TBCCR0中的值时,产生中断。 程序代码: #include "msp430.h" #define led P1OUT

int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1DIR = 0x01; TBR = 0;//设置计数器初值 TBCTL |= TBSSEL_2|0xc0|MC_1;//对寄存器TBCTL进行设置,TBSSEL_2为选择MCLK系统时钟,0xc0为8分频,MC_1为增计数模式 TBCCR0 = 0xfffd;//设置比较值,当TBR中的值增加到TBCCR0时,产生中断。TBCCTL0 &= ~CAP;//设置为比较模式 while(1) { led = 0x01; do{;} while(!(TBCCTL0 & CCIFG));//没有中断标志时进行空操作 TBCCTL0 &= 0xfffe;//对中断标志进行软件清零 led = 0x00; do{;} while(!(TBCCTL0 & CCIFG)); TBCCTL0 &= 0xfffe; } //return 0; }

MSP430 定时器A

上次Cloud和大家一起学习完了MSP430的时钟配置,这一篇,我们来学习MSP430 单片机的TimerA(定时/计数器A)。MSP430单片机的TimerA具有非常强大的功能,相关的寄存器配置也相当复杂,Cloud花了好久才逐步理清学习思路,尤其是学习数据手册的相关描述。在这里Cloud提醒大家,虽然现在网上有中文汉化版的数据手册,但Cloud阅读英文原版后对比发现还是英文原版对器件特性描述得更加清楚,而中文汉化版的省略掉了一些内容。好吧,扯远了。下面进入正题: 一、MSP430的Timer结构 首先让我们通过官方描述来初步了解一下MSP430单片机的Timer资源: 定时器A是一个16位的定时/计数器。定时器A支持多重捕获/比较,PWM输出和内部定时。定时器还有扩展中断功能,中断可以由定时器溢出产生或由捕获/比较寄存器产生。 定时器A的特性包括: ·四种运行模式的异步16位定时/计数器 ·可选择配置的时钟源 ·可配置的PWM输出 ·异步输入和输出锁存 ·对所有TA中断快速响应的中断向量寄存器 MSP430G2553单片机共有两个TimerA,分别是Timer0A和Timer1A。 OK,零零总总说了这么多,大家一定带有很多的疑惑,比如什么叫“捕获/比较”等,这里Cloud先不作解释,会用才是王道。我们呢先找来定时器A的结构图给大家初步了解一下定时器A的结构: 我们先从上面部分开始解释。中间红色的是一个16位的TimerA,TAR,这其实就是MSP430单片机内部的一个定时计数器了,类似于51中的TH0和TL0的合体。既然可以拿来计时,那么肯定可以有时钟信号输入,让我们最左边黄色的框,是一个选择器,由上面的TASSEL来选择TACLK、ACLK、SMCLK、INCLK的其中一种时钟。上次我们已经学习过ACLK和SMCLK,也知道如何配置这两个时钟了(这也是为什么先学习时钟的原因),另外两个是外部时钟源,其中TACLK可以由P1.0输入。跟在时钟源后面的是一个分频器,由ID来控制,将时钟源的时钟信号1、2、4、8分频后作为定时/计数器的时钟源。TAR右边的蓝色框代表TimerA在计数模式下由MC来控制TAR的四种计数方式。同时我们还注意到TAR的左下方有一个TACLAR连接至TAR的Clear端,显然是清零作用的,数据手册还告诉我们置位TACLAR,不但会清零TAR的计数值还会清除时钟分频信息。TACLAR 一旦置1,会自动归零,所以可以当做是TimerA的复位按钮。

MSP430 定时器A的使用

第四讲定时器A的使用 MSP430F413芯片中含有TimerA3模块,如图1-2所示。其常用的外引线有三条:TACLK、TA1和TA2。 TACLK:定时器_A输入时钟(48脚),与P1.6和ACLK输出共用同一引脚。 TA1:定时器_A的第一通道输入、输出引脚(51脚)。捕获方式:CCI1A输入;比较方式:OUT1输出。 TA2:定时器_A的第二通道输入、输出引脚(45脚)。捕获方式:CCI2A输入;比较方式:OUT2输出。 1.定时器A功能及结构 定时器A基本结构是一个十六位计数器,由时钟信号驱动工作,结构框图如图4-1所示。 图4-1 定时器A结构图 定时器A具有多种功能,其特性如下: (1)输入时钟可以有三种选择,可以是慢时钟(ACLK)、快时钟(SMCLK与单片机主时钟同频)和外部时钟。 (2)能产生的定时中断、定时脉冲和PWM(脉宽调制)信号,没有软件带来的误差。

(3)不仅能捕获外部事件发生的时间,还可选择触发脉冲沿(由上升沿或下降沿触发)。 定时器A功能模块主要包括: (1)计数器部分:输入的时钟源具有4种选择,所选定的时钟源又可以1、2、4或8分频作为计数频率,Timer_A可以通过选择4种工作模式灵活的完成定时/计数功能。 (2)捕获/比较器:用于捕获事件发生的时间或产生时间间隔,捕获比较功能的引入主要是为了提高I/O 端口处理事务的能力和速度。不同的MSP430单片机,Timer_A模块中所含有的捕获/比较器的数量不一样,每个捕获/比较器的结构完全相同,输入和输出都取决于各自所带控制寄存器的控制字,捕获/比较器相互之间完全独立工作。 (3)输出单元:具有可选的8种输出模式,用于产生用户需要的输出信号,支持PWM输出。 2.定时器工作模式 (1)停止模式:停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。例如,停止模式前,Timer_A工作于增/减计数模式并且处于下降计数方向,停止模式后,Timer_仍然工作于增/减计数模式,从暂停前的状态开始继续沿着下降方向开始计数。如果不需这样,则可通过TACTL中的CLR控制位来清除定时器的方向记忆特性。 (2)增计数模式:捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器,因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等(或定时器值大于CCR0的值)时,定时器复位并从0开始重新计数。增计数模式的计数过程如图4-2所示。通过改变CCR0值,可重置计数周期。 图4-2增计数模式示意图 (3)连续计数模式:在需要65536个时钟周期的定时应用场合常用连续计数模式。定时器从当前值计数到单增到0FFFFH后,又从0开始重新计数如图4-3所示。 图4-3 连续计数模式 (4)增/减计数模式

LaunchPad-MSP430入门系列4-定时器模块(定时、计数、捕获)

LaunchPad-MSP430入门系列4-定时器模块 (定时、计数、捕获) Version 1.2 文先,介绍几个英文缩写的意思以及一些注意的地方。 1.Timer0/1 定时器0/1,在User's Guide中用的是TimerA/B,所指的也是Timer0/1 。 G2553Datasheet中用的是Timer0/1 ,本文以G2553Datasheet为准。全文以Timer0 为例,Timer1类同。 2.TAxR(x = 0/1)定时器x对应的计数器,这是一个只读寄存器。硬件自动驱动计数。 3.EQUy(y = 0/1/2)计数事件发生寄存器,当TAxR = TAxCCRy时EQUy置1。 4. 定时器简介 MSPG2553共有两个定时器,Timer0、Timer1,他们都是十六位的定时、计数器,内含三个捕获、比较寄存器。两个定时器均支持多个捕获、PWM输出、间歇性计时,定时器包含多个中断源,可以是计数溢出中断、捕获中断等等。 定时器包含: ●同步十六位定时、计数器运行模式。 ●时钟源可从MCLK、SMCLK、ACLK任意选择。 ●三个比较、捕获寄存器。 ●中断向量寄存器能快速解码的所有定时器中断 本文以Timer0为例详细介绍430的定时器模块,下图是Timer0组成框图

0-1定时器0组成框图 下面简要介绍一下该硬件框图的意思,从左上角看,首先是一个时钟源选择寄存器TASSELx,通过该寄存器选择定时器的时钟源,选择了时钟源后有一个分频器Divider,相应的设置寄存器是IDx,再过来就到一个定时器的核心部分,一个16位的定时器TAR。其右侧有一个定时器的计数模块,MCx寄存器用来设置计数模式。 接下来,TAR正下方有三个横线,右侧标有CCR0、CCR1、CCR2,意思是CCR1、CCR0的框图和下方CCR2的框图是一样的。此处省略不写。在CCR中,左上角为一个捕获源选择寄存器。可以从CCI2A、CCI2B、GND或者VCC选择捕获源,选择捕获源后有一个选择捕获模式寄存器Capture Mode,然后过来有一个捕获溢出状态寄存器COV,SCS同步/异步捕获模式选择位,然后连接到捕获比较寄存器。下方为模式选择寄存器,具体设置可以查看相应的寄存器设置。 这里仅是大概介绍一下Timer0的寄存器,具体的设置使用还看参考相应的寄存器并结合例程慢慢学习理解。 定时器运行方式 下面简要重点介绍定时器计数模块的四种模式以及7种输出模式。 Timer0有一个在不断计数的只读寄存器TA0R。计数器的计数模式共有四种,

MSP430教程10:MSP430单片机WDT看门狗定时器解析

看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。程序中设置看门狗清零指令 WDTCTL=WDTPW+WDTCNTCL,当程序跑飞不能及时清零看门狗,导致看门狗溢出复位,这样程序可以恢复正常运行状态。 一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在上电和系统复位内容全部清零 1.记数单元WDTCNT:WDTCNT是16位增记数器,由MSP430选定的时钟电路产生的固定周期脉冲信号对记数器进行加法记数。WDTCNT不能直接软件存取,必须通过看门狗定时器的控制寄存器WDTCTL来控制。 2.控制寄存器WDTCTL:WDTCTL由两部分组成,高8位用作口令,即5AH(头文件中定义为WDTPW),低8位是对WDT操作的控制命令。写入WDT控制命令时先写入口令WD TPW,口令写错将导致系统复位。读WDTCTL时不需口令,低字节WDTCTL的值,高字节读出始终为69H。 bit 15-8 7 6 5 4 3 2 1 0 口令HOLD NMIES NMI TMSE L CNTCL SSEL IS1 IS0 IS1 SI0 选择看门狗定时器的定时输出,T为WDTCNT的输入时钟源周期。 TMSEL W DT工作模式选择 0 0 T*2的15次 方 0 看门狗模式 0 1 T*2的13次

方 1 定时器模式 1 0 T*2的9次 方 NMI 选择RST/NMI 引脚功能 1 1 T*2的6次 方 RST/NMI为复位端 SSEL 选择WDTCNT的时钟 源 1 RST/NMI为非屏蔽中断输入 0 SMCL K 1 ACLK NMIES 选择NMI中断的边沿触发方 式 HOLD 停止看门狗定时器工作 0 上升沿触发NMI中 断 0 看门狗功能激活 1 下降沿触发NMI中 断 1 时钟禁止输入,记数停止

MSP430定时器A捕捉脉实例

MSP430定时器A捕捉脉实例[调试通过,很好用] 微控论坛原创主贴作者:fangth Microcontrol CODE /***************************************************************** //功能:利用定时器A的捕捉能测量脉冲信号的脉宽 // // // MSP430F449 // ----------------- // /|\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P1.5/ACLK|---+ // | | | // | P2.0/TA2|<--+ // | | // | | //说明:ACLK要进行8分频(4K),并将其作为外部的要捕获的脉冲; //MCLK=SMCLK=8M; *****************************************************************/ #include int pwm_start,pwm_end,pwm_wide=0; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR = 0x20; // P1.5 输出 P1SEL = 0x20; // P1.5输出ACLK P2SEL|=BIT0; //P2.0 CCI2A SCFI0 |= FN_4; SCFQCTL = 121; // (121+1) ×32768 *2= 7.99Mhz FLL_CTL0=DCOPLUS+OSCCAP1; //MCLK=SMCLK=8M FLL_CTL1 |= FLL_DIV_8; //ACLK要进行8分频,ACLK=4K TACCTL2 =CAP+CM_3+CCIS_0+SCS+CCIE; //捕获模式,上升和下降都捕获,选择CCI2A,同步,捕获中断开 //Capture input select: 0 - CCI2A

MSP430定时器A说明

MSP430的定时器A有比较\捕获两种工作模式 比较模式: 这是定时器的默认模式,当在比较模式下的时候,与捕获模式相关的硬件停止工作,如果这个时候开启定时器中断,然后设置定时器终值(将终值写入TACCRx),开启定时器,当TAR的值增到TACCRx的时候,中断标志位CCIFGx置1,同时产生中断。若中断允许未开启则只将中断标志位CCIFGx置1。 例子:比较模式就像51单片机一样,要能够软件设置定时间隔来产生中断处理一些事情,如键盘扫描,也可以结合信号输出产生时序脉冲发生器,PWM信号发生器。如:不断装载TACCRx,启动定时器,TAR和TACCRx比较产生中断,输出时序脉冲。 捕获模式: 利用外部信号的上升沿、下降沿或上升下降沿触发来测量外部或内部事件,也可以由软件停止。捕获源可以由CCISx选择CCIxA,CCIxB,GND,VCC。完成捕获后相应的捕获标志位CCIFGx置1。 捕获模式的应用: 利用捕获源来触发捕获TAR的值,并将每次捕获的值都保存到TACCRx中,可以随时读取TACCRx的值,TACCRx是个16位的寄存器,捕获模式用于事件的精确定位。如测量时间、频率、速度等。 利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量。 本例程用到了定时器A的CCI1A端口(例如MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的start,end,overflow三个变量来计算脉冲宽度。此功能模块在实际产品应用中体现出有较高的应用价值。 具体例程 #include unsigned int start,end; unsigned char overflow; void main (void) { WDTCTL = WDTPW+WDTHOLD; //关闭看门狗定时器 P1DIR = BIT0+BIT4; //设置P1.0和P1.4方向为输出 P1SEL = BIT2; //设置P1.2端口为功能模块使用 TACTL = TASSEL0+TACLR+TAIE+MC1; //定时器A时钟信号选择ACLK,同时 //设置定时器A计数模式为连续增计模式

MSP430--定时器B

MSP430--定时器B (2012-07-20 10:56:37) 转载▼ 分类:单片机专区 标签: 转载 原文地址:MSP430--定时器B作者:wangtangwang2012 MSP43016位定时器B模块是单片机的重要资源。MSP430F13/14/15x系列都有定时器模块B,但是不同单片机系列所带的比较/捕获模块功能有所不同。 1.定时器B模块: TimerB与TimerA大部分相同,不同点在于定时器B的捕获/比较单元增加了锁存器。 二者区别: (1)TimerB计数长度为8位,10位,12位,16位可编程,由TBCTL寄存器的CNTLx两位来配置,而定时器A的计数长度是固定的16位; (2)TimerB没有实现定时器A中的SCCI功能位的功能; (3)TimerB在比较模式下的捕获/比较寄存器功能与TimerA不同,增加了捕获比较锁存器; (4)有些芯片型号当中TimerB输出实现了高阻抗输出; (5)比较模式的原理有所不同:TimerA当中CCRx寄存器当中保存与TAR相比较的数据,而在TimerB 当中CCRx中保存要比较的数据,但并不直接与定时器TBR相比较,而是将CCRx当中的数据锁存到相应的锁存器之后,由锁存器与TBR相比较。从捕获/比较寄存器相比较锁存器传输数据的过程的时间也是可编程的,可以是写入比较捕获寄存器之后立即传输,也可有一个定时器来触发传输。(6)TimerB支持多种同步的定时功能,多重比较捕获功能和多重波形输出功能(PWM波)。而且,通过对比较数据的两级缓冲,可实现多个PWM波同步周期更新。

2.TimerB的逻辑结构图: 定时器B的逻辑结构基本与定时器A相同。

MSP430单片机定时器实验报告

MSP430单片机定时器实验报告 实验四定时器实验 实验目的: MPS430F5529片内集成的定时器A的使用,学习计数器的补捕获比较模块的使用。实验内容: 定时器采用辅助时钟ACLK作为计数脉冲,fACLK=32768Hz,实现以下功能: 1. 定时器TA0延时1s,点亮或熄灭LED6,即灯亮1s灭1s,如此循环,采用中断服务程序实现。 2. 定时器TA0延时1s,点亮或熄灭LED4,采用捕获比较器CCR0的比较模式,设定输出方式,输出方波,不用中断服务程序 3. 采用捕获比较器CCR1的比较模式LED5,设定输出方式,输出PWM波形,使LED亮2s,灭1s。 4. 用定时器实现30s倒计时,在液晶模块上显示,每过一秒显示数字变化一次。 5. 使用TA1的捕获比较器CCR0捕获按键的间隔时间,在液晶模块上显示。程序代码: 程序1: #include void main() {WDTCTL = WDTPW + WDTHOLD; //关看门狗 P1DIR |= BIT3; //设置P1.0口方向为输出。 TA0CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1, //CCR0捕获/比较功能中断为允许。

TA0CCR0 = 32767; //捕获/比较控制寄存器CCR0初值为32767 TA0CTL = TASSEL_1 + MC_1+TACLR; //设置定时器A控制寄存器TACTL,//使时钟源选择为SMCLK辅助时钟。 //进入低功耗模式LPM0和开总中断_BIS_SR(LPM0_bits +GIE); } //定时器A 中断服务程序区 #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) { P1OUT ^= BIT3; //P1.0取反输出 } 实验现象: 实验开始后,实验板上LED6亮灭闪烁,间隔为1s。 程序2: #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关狗 P1DIR |= BIT1; // P1.1 设置为输出 P1SEL |= BIT1; // P1.1 输出使能 TA0CCR0 = 60000; // PWM Period TA0CCTL0 = OUTMOD_4; // CCR1 模式4 TA0CCR1 = 30000; // CCR1 PWM duty cycle TA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, up mode, clear TAR

MSP430定时器输出PWM方波

定时器A输出方波 1、定时器的PWM输出8种模式 输出模式0输出模式:输出信号OUTx由每个捕获/比较模块的控制寄存器CCTLx中的OUTx位定义,并在写入该寄存器后立即更新。最终位OUTx直通。 输出模式1置位模式:输出信号在TAR等于CCRx时置位,并保持置位到定时器复位或选择另一种输出模式为止。 输出模式2 PWM翻转/复位模式:输出在TAR的值等于CCRx时翻转,当TAR的值等于CCR0时复位。 输出模式3 PWM置位/复位模式:输出在TAR的值等于CCRx时置位,当TAR的值等于CCR0时复位。 输出模式4翻转模式:输出电平在TAR的值等于CCRx时翻转,输出周期是定时器周期的2倍。 输出模式5复位模式:输出在TAR的值等于CCRx时复位,并保持低电平直到选择另一种输出模式。 输出模式6 PWM翻转/置位模式:输出电平在TAR的值等于CCRx时翻转,当TAR值等于CCR0时置位。 输出模式7 PWM复位/置位模式:输出电平在TAR的值等于CCRx时复位,当TAR的值等于CCR0时置位。 下图是增计数模式下的输出波形:

2、程序:(TA定时器输出1K的方波) void TAPWM(void) { //引脚设置(暂时使用P1.2输出一路PWM) P1SEL |= BIT2; //TA1从P1.2输出 P1DIR |= BIT2; //TA1从P1.2输出 //P2SEL |= BIT0; //TA2从P1.2输出 //P2DIR |= BIT0; //TA2从P1.2输出 TACTL |= MC_1 +TASSEL_1; //时钟源选择ACLK,增计数模式TA设置 TACCTL1 = OUTMOD_7; //模式7 高电平PWM输出PWM设置 //TACCTL2 = OUTMOD_7; //模式7 高电平PWM输出 TACCR0 = 33-1; //PWM总周期=32个ACLK周期约等于1000Hz 设置PWM的周期 TACCR1 = 16; //TA1 占空比= 16/32=50% 设置占空比 //TACCR2 = 16; //TA2 占空比= 16/32=50% } 软件改变TACCR0即可改变PWM的周期,改变TACCR1或者TACCR2即可改变占空比

MSP430F149的定时器A操作

MSP430F149的定时器A定时操作 1)定时器A的图解 图1 定时器A图解 2)定时器A的四种计数模式。 1.停止模式。 2.增计数模式。(产生两个中断标志) 也就是当计数到跟TACCR0一样的时候,就返回0,重新计数。当计数到TACCR0的同时产生一个中断标志CCIFG,而当计数器溢出返回零的同时又同时产生一个中 断标志TAIFG。如图:

图2 增计数模式的波形图 3.连续计数模式。(产生一个中断标志) 也就是计数器将直接计数到计数器所能计数的最大值0FFFFH之后重新返回零,再次计数。返回零的同时产生一个TAIFG中断标志。如图: 4.增减计数模式。(产生两个中断标志) 也就是当计数器计数到跟TACCR0一样的之后,然后从TACCR0开始又减少,直到为零,然后又开始增。当计数跟TACCT0一样的时候产生一 个中断标志CCIFG,当减到为零的时候又产生一个中断标志TAIFG。如图: 注意:当重新写入TACCR0数值的时候,当新的数据大于原来的数值的时候,计数器将计数到新的数值才重新返回零;当新的数据小于原来的数值的时候,计数器将直接返回零重新计数。 3)定时器A的寄存器。 1.TACTL

●TASSELx:计时器A的时钟来源选择。 ●IDx:计时器A时钟的分频选择。 ●MCx:计时器A四种计数模式选择。 ●TACLR:计数器A的TAR计数清零,同时也可以清楚时钟分频器和计 数方向。 ●TAIE:TAIFG中断标志使能。在捕获模式下可以打开所有CCIFG的中 断使能。 ●TAIFG:中断标志位。 2.TAR 计数器的计数寄存器。 3.TACCTLx ●CMx:捕获模式选择。00:关闭;01:上升沿捕获;10:下降沿 捕获;11:上升下降沿捕获。 ●CCISx:捕获引脚选择。 ●SCS:选择捕获电平方式。0异步时钟;1同步时钟。 ●SCCI:锁存同步时钟输入端。也就是锁存EQUx的值,以供CPU 读取。 ●CAP:捕获模式和比较模式选择。0比较;1捕获。 ●OUTMODx:输出模式选择。 ●CCIE:CCIFG中断标志使能。 ●CCI:捕获当时输入信号的值。以供CPU读取。 ●OUT:当前输出的镜像,以供CPU读取。 ●COV:捕获溢出位,当第一次捕获的时候没有将寄存器里面的数 据读走,就又发生了一次捕获,所有溢出。(必须由软件清零) ●CCIFG:中断标志位。

MSP430单片机中断的定义及原理

MSP430单片机中断的定义及原理 430的中断是按照下图1的优先级顺序定义的,有三种中断:1.系统重置、2.不可屏蔽中断(NMI)、3.可屏蔽中断。 图1.中断优先级 部分具体的中断优先级由高到低为: PORT2_VECTOR (1 * 2u)/* 0xFFE2 Port 2 */ PORT1_VECTOR (4 * 2u)/* 0xFFE8 Port 1 */ TIMERA1_VECTOR (5 * 2u)/* 0xFFEA TImer A CC1-2,TA */ TIMERA0_VECTOR (6 * 2u)/* 0xFFEC TImer A CC0 */ ADC_VECTOR (7 * 2u)/* 0xFFEE ADC */ USART0TX_VECTOR (8 * 2u)/* 0xFFF0 USART 0 Transmit */ USART0RX_VECTOR (9 * 2u)/* 0xFFF2 USART 0 Receive */ WDT_VECTOR (10 * 2u)/* 0xFFF4 Watchdog TImer */ COMPARATORA_VECTOR (11 * 2u)/* 0xFFF6 Comparator A */ TIMERB1_VECTOR (12 * 2u)/* 0xFFF8 Timer B CC1-2,TB */ TIMERB0_VECTOR (13 * 2u)/* 0xFFFA Timer B CC0 */ NMI_VECTOR (14 * 2u)/* 0xFFFC Non-maska××e */ RESET_VECTOR (15 * 2u)/* 0xFFFE Reset [Highest Priority]*/ 其中可屏蔽中断分为系统NMI(SNMI)和用户NMI(UNMI),一般来说,不可屏蔽中断不受GIE标志位的影响。用户不可屏蔽中断的中断源为NMIIE、ACCIE和OFIE,当响应用户不可屏蔽中断后,其他不可屏蔽中断就自动被禁止,以防止同级别的中断发生产生中断嵌套。当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表)。有中断响应以后自动关闭总中断,这个时候即使来更高优先级的中断都不会响应。要中断嵌套的话,就必须在中断中打开总中断。

MSP430 定时器A和B 中断定时 1秒操作

MSP430 定时器A 和B 中断定时1 秒操作 /********************TimerA0 1 秒定时TIMER B 1 秒定时溢出中断: MCLK = 2MHz DCOCLKLFXT1 = 32768Hz ACLK***********************/ #include unsigned int i;unsigned int times,times_b;unsigned int sec; /***** 定时器A 初使化*******/void TimerA_Init(void){TACTL = TASSEL_1 + ID0 + TACLR ; //ACLK=32768Hz ,清除tar ,2 分频CCTL0 = CCIE; //CCR0 = 819; // (1/32768)*819 =20 ms ??TACTL |= MC0; //增计数}/**** 定时器 B 初使化*****/void TimerB_Init (void){TBCTL = TBSSEL_1 + ID0 + TBCLR ; //ID_2 + ID1 +TBCCTL0 = CCIE; // INTERRUPT ENABLETBCCR0 = 819; //TBCTL |= MC0;}/***** 秒测试 1 秒响一下********/void Sec_Beep(void) //beep every second{ if(sec==1){ sec = 0; P5OUT – 0x10;}}void main( void ){times = 20;times_b = 20;WDTCTL = WDTPW + WDTHOLD;// SYstem clockDCOCTL = 0x60;BCSCTL1 = 0x86;//XT20FF ,XTS=0 LOW FREQ , RESEL=6 DCOCLK=2MHz// XT2on, XTS DIVA.1 DIVA.0 XT5V RSEL.2 RSEL.1 RSEL.0// 1 0 0 0 0 1 1 0BCSCTL2 = 0x00; //MCLK = DCOCLK, DIVM=0, SMCLK=CCOCLK ,DIVS =0P1DIR |= 0x02; //p1.2 OUTP5DIR |= 0x10; //P5.4 OUTTimerA_Init(); //定时器初使化TimerB_Init();_EINT(); // interrupt enablefor(;;) { _BIS_SR(LPM3_bits); _NOP();}} /****** 定时器 A 中断处理***********/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){ times--;if(times == 0){ times = 20; sec=1; Sec_Beep();}}/****** 定时器B 中断 处理***********/#pragma vector = TIMERB0_VECTOR__interrupt void Timer_B0 (void){ times_b--; if(times_b == 0) { times_b = 20; P1OUT – 0x02; }}

MSP430定时器A中文超级详解

文章转载自网络-----------------感谢原作者的辛勤奉献 MSP430的定时器中有比较捕获 比较模式: 这是定时器的默认模式,当在比较模式下的时候,与捕获模式相关的硬件停止工作,如果这个时候开启定时器中断,然后设置定时器终值(将终值写入TACCRx),开启定时器,当TAR的值增到TACCRx的时候,中断标志位CCIFGx 置一,同时产生中断。若中断允许未开启则只将中断标志位CCIFGx置一。 例子:比较模式就像51单片机一样,要能够软件设置定时间隔来产生中断处理一些事情,如键盘扫描,也可以结合信号输出产生时序脉冲发生器,PWM信号发生器。如:不断装载TACCRx,启动定时器,TAR和TACCRx比较产生中断处理。 捕获模式: 利用外部信号的上升沿、下降沿或上升下降沿触发来测量外部或内部事件,也可以由软件停止。捕获源可以由CCISx选择CCIxA,CCIxB,GND,VCC。完成捕获后相应的捕获标志位CCIFGx置一 捕获模式的应用: 利用捕获源的来触发捕获TAR的值,并将每次捕获的值都保存到TACCRx 中,可以随时读取TACCRx的值,TACCRx是个16位的寄存器,捕获模式用于事件的精确定位。如测量时间、频率、速度等 例子:利用两次捕获的值来测量脉冲的宽度。或捕获选择任意沿,CCISx=”11“(输入选择VCC),这样即当VCC与GND发生切换时产生捕获条件 结合利用:异步通讯

同时应用比较模式和捕获模式来实现UART异步通信。即利用定时器的比较模式来模拟通讯时序的波特率来发送数据,同时采用捕获模式来接收数据,并及时转换比较模式来选定调整通信的接受波特率,达到几首一个字节的目的 ---------------------------------------- 利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量。 本例程用到了定时器A的CCI1A端口(例如MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的start,end,overflow三个变量来计算脉冲宽度。此功能模块在实际产品应用中体现出有较高的应用价值。 2-例程 #include unsigned int start,end; unsigned char overflow; void main (void) { WDTCTL = WDTPW+WDTHOLD; //关闭看门狗定时器 P1DIR = BIT0+BIT4; //设置P1.0方向为输出 P1SEL = BIT2; //设置P1.2端口为功能模块使用 TACTL = TASSEL0+TACLR+TAIE+MC1; //定时器A时钟信号选择ACLK,同时设置定时器A计数模式为连续增计模式

MSP430F149定时器B讲解

MSP430F149定时器B 1.定时器B模块: TimerB与TimerA大部分相同,不同点在于定时器B的捕获/比较单元增加了锁存器。 二者区别: (1)TimerB计数长度为8位,10位,12位,16位可编程,由TBCTL寄存器的CNTLx两位来配置,而定时器A的计数长度是固定的16位; (2)TimerB没有实现定时器A中的SCCI功能位的功能; (3)TimerB在比较模式下的捕获/比较寄存器功能与TimerA不同,增加了捕获比较锁存器; (4)有些芯片型号当中TimerB输出实现了高阻抗输出; (5)比较模式的原理有所不同:TimerA当中CCRx寄存器当中保存与TAR相比较的数据,而在TimerB 当中CCRx中保存要比较的数据,但并不直接与定时器TBR相比较,而是将CCRx当中的数据锁存到相应的锁存器之后,由锁存器与TBR相比较。从捕获/比较寄存器相比较锁存器传输数据的过程的时间也是可编程的,可以是写入比较捕获寄存器之后立即传输,也可有一个定时器来触发传输。(6)TimerB支持多种同步的定时功能,多重比较捕获功能和多重波形输出功能(PWM波)。而且,通过对比较数据的两级缓冲,可实现多个PWM波同步周期更新。 2.TimerB的逻辑结构图:

定时器B的逻辑结构基本与定时器A相同。 3.定时器B的寄存器: 寄存器相关位的配置过程参考定时器A和数据手册。

4.定时器B的比较功能 当定时器B工作在比较模式时,将数据写入捕获比较锁存器TBCCRx当中,当TBCCTLx当中的CLLDx位决定的装载事件的发生时,TBCCRx中的数据会自动地传输到比较寄存器当中。 5.TI提供的例程: // // // // // MSP430F149 // ----------------- // /|| XIN|- // | | | HF XTAL (455k - 8MHz) // --|RST XOUT|- // | | // | P4.1/TB1|--> CCR1 - 75% PWM // | P4.2/TB2|--> CCR2 - 25% PWM // // M. Buccini // Texas Instruments Inc. // Feb 2005 // Built with IAR Embedded Workbench Version: 3.21A //******************************************************************************

MSP430_定时器A的使用

第四讲定时器A 的使用 MSP430F413芯片中含有TimerA3模块,如图1-2所示。其常用的外引线有三条:TACLK 、 TA1 和 TA2。 TACLK :定时器_A 输入时钟(48脚),与P1.6和ACLK 输出共用同一引脚。 TA1 :定时器_A 的第一通道输入、输出引脚(51脚)。捕获方式:CCI1A 输入;比较方式: OUT1输出。 TA2 :定时器_A 的第二通道输入、输出引脚(45脚)。捕获方式:CCI2A 输入;比较方式: 0UT2输出。 1定时器A 功能及结构 定时器A 基本结构是一个十六位计数器,由时钟信号驱动工作,结构框图如图 4-1所示。 TPSSEL1 TPSSELO C CM 11 CCM 10 CCJ?A ―O CCIZB —0 C4M> —6 VCC "& 图4-1定时器A 结构图 定时器A 具有多种功能,其特性如下: (1) 输入时钟可以有三种选择,可以是慢时钟(ACLK )、快时钟(SMCLK 与单片机主时 钟同频)和外部时钟。 (2) 能产生的定时中断、定时脉冲和 PWM (脉宽调制)信号,没有软件带来的误差。 TACLK ― ACLK ―O >7 MCLK —-O 弄 INCL K ―O X ID1 II KJftCLR Carrjr'Zcr o Timer EquO ---------------- ? 设富TMFC CCISil J CCJ&4 —r CCJOB —c OID —13 Wx —13 CCISOO F —H 比投罟 o 比血 CCMD1 CCMOO CCIS11 CCIS10 CC11A —4 CC11B ―° GHD —0 vcc —° £ 炳捉,比戕餐存辭(riw QF.10? 3MOI m/mo LQUO 捕怩'比牧蒂存幣WIU OMI? OM11 CM10 CCI2 CCM21 CCM20 LUU?

msp430定时器控制led闪烁

第四讲定时器控制LED闪烁 一、定时器简介 定时器,简单的说,就像单片机内的一个闹钟。它以单片机的时钟作为计数基准,根据计数数值不同来改变定时时间,并可以设置使时间满足定时条件时进行一系列操作。 下面是msp430g2553的datasheet对其定时器的介绍: 从这里开始,我们介绍的部件往往会涉及很多寄存器,初学者往往由于配置不全,不能得到想要的效果。因此,学习这一部分,尽量参考用户手册和相关例程进行分析。 二、定时器A配置 我们要实现使用定时器控制LED闪烁,需要使用定时器中断来控制。定时器中断与外部中断的具体原理一样,都是从主程序中断,处理完中断服务函数再返回。区别只在于触发条件,定时器中断的触发条件是定时器计数溢出(计数数值达到设定数值)。 这是用户手册对定时器A的介绍: 16位定时/计数,4种计数模式,可选时钟源,2到3个捕获比较寄存器,异步输入输出锁存,定时中断寄存器。 16位定时/计数,是指计数数值范围是0-65535,与设置好的时钟源来组合成一定的定时时长。如时钟周期为1us,那么要定时1ms,计数数值就需要设置为1000。 上图是定时模式的介绍,一般采用增计数模式即可,即每次定时从0计数到设置的数值。 定时器配置最重要的部分在于TACLR寄存器,其16位所代表的含义如下图,具体配置内容可从用户手册和头文件内查出,这里不做一一介绍,在例程中再进行讲解。

三、实践操作 这里,由于我们的单片机默认时钟为DCO 1MHZ,16位定时器计数数值65536,所以最大定时时长为65.536ms。在这里我们进行0.05s的定时,每隔0.05s触发一次中断函数,使LED亮0.05s,灭0.05s,并交替进行。 为了方便调试,我们先使用延时的方法使LED闪烁,确认单片机以及LED工作正常。顺便复习一下对IO的操作。 下面就到定时器的核心配置了。 我们要设置定时器,核心部分当然是TACTL寄存器,它是定时器工作的关键,涉及到定时器所采用的时钟周期以及计数方式。 接下来设置定时时间,即计数数值TACCR0。 当然为了使用定时中断,要记得打开中断。 具体配置如下图所示,相关定义可从头文件中查出。其中CCIE是指打开定时器中断,最后的_EINT();是打开总中断,两者缺一不可。TASSEL_2可从头文件中查出,指定时器A采用子系统时钟SMCLK,在不做设置时为默认DCO(数控振荡器)的值1MHZ。MC_2指采用增计数模式。而数值50000*时钟周期1us=50ms,为我们的定时时长。

相关文档
相关文档 最新文档