MSP430定时器A中文超级详解.doc

上传人:scccc 文档编号:12512170 上传时间:2021-12-04 格式:DOC 页数:18 大小:114.50KB
返回 下载 相关 举报
MSP430定时器A中文超级详解.doc_第1页
第1页 / 共18页
MSP430定时器A中文超级详解.doc_第2页
第2页 / 共18页
MSP430定时器A中文超级详解.doc_第3页
第3页 / 共18页
MSP430定时器A中文超级详解.doc_第4页
第4页 / 共18页
MSP430定时器A中文超级详解.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《MSP430定时器A中文超级详解.doc》由会员分享,可在线阅读,更多相关《MSP430定时器A中文超级详解.doc(18页珍藏版)》请在三一文库上搜索。

1、文章转载自网络感谢原作者的辛勤奉献MSP430的定时器中有比较捕获比较模式:这是定时器的默认模式,当在比较模式下的时候,与捕获模式相关的硬件 停止工作,如果这个时候开启定时器中断,然后设置定时器终值(将终值写入TACCRx),开启定时器,当TAR的值增到TACCRx的时候,中断标志位CClFGx 置一,同时产生中断。若中断允许未开启则只将中断标志位CClFGx置一。例子:比较模式就像51单片机一样,要能够软件设置定时间隔来产生中断处理 一些事情,如键盘扫描,也可以结合信号输出产生时序脉冲发生器,PWM信号发生器。如:不断装载TACCRx,启动定时器,TAR和TACCRx比较产生中断 处理。捕获

2、模式:禾I用外部信号的上升沿、下降沿或上升下降沿触发来测量外部或内部事件,也可以由软件停止。捕获源可以由CCISx选择CCIxA,CCIxB,GND,VCC。完成 捕获后相应的捕获标志位CClFGx置一捕获模式的应用:利用捕获源的来触发捕获TAR的值,并将每次捕获的值都保存到TACCRx 中,可以随时读取TACCRx的值,TACCRx是个16位的寄存器,捕获模式用于 事件的精确定位。如测量时间、频率、速度等例子:利用两次捕获的值来测量脉冲的宽度。 或捕获选择任意沿,CCISx= 11 “输 入选择VCC),这样即当VCC与GND发生切换时产生捕获条件结合利用:异步通讯同时应用比较模式和捕获模式

3、来实现 UART异步通信。即利用定时器的比较模式来模拟通讯时序的波特率来发送数据,同时采用捕获模式来接收数据,并及时转换比较模式来选定调整通信的接受波特率,达到几首一个字节的目的利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的 测量。本例程用到了定时器 A的CCI1A端口(例如 MSP430F14X的P1.2引脚)作捕获 外部输入的脉冲电平跳变,同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的start,end,oveflow三个变量来计算脉冲宽度。此功能模块在实际产品应用 中体现出有较高的应用价值。2-例程#in elude <msp4

4、30x14x.h>un sig ned int start,e nd;un sig ned char overflow;void main (void)/关闭看门狗定时器/设置P1.0方向为输出/设置P1.2端口为功能模块使用/定时器A时钟信号选择ACLK,WDTCTL = WDTPW+WDTHOLD;P1DIR = BIT0+BIT4;P1SEL = BIT2;TACTL = TASSEL0+TACLR+TAIE+MC1;同时设置定时器A计数模式为连续增计模式CCTL1 = MCO+SCS+CAP+CCIE;信号源_EINT();while(1);#pragma vector=TIME

5、RA1_VECTOR_in terrupt void timer_a(void)switch(TAIV) case 2:if(CCTL1 &CM0)CCTL1=(CCTL1 &( CM0)|CM1;start=TAR;overflow=0;else if (CCTL1 &CM1)/输入上升沿捕获,CCI0A为捕获中断允许/LOOP/定时器A中断处理/向量查询/捕获中断/上升沿/更变设置为下降沿触发/记录初始时间溢出计数变量复位下降沿/更变设置为上升沿触发CCTL1=(CCTL1 &( CM1)|CM0;en d=TAR;/用start,end,overflow计

6、算脉冲宽度break;case 10:overflow+; break; default:break;II例程结束II定时器溢出中断/溢出计数加1msp430单片机定时器Timer_ATimer_A定时器:注:msp430有两个16位定时器 Timer_A 和Timer_.二者基本相同主要有 TACTL,TAR,CCTL0,CCR0,CCTL1,CCR1,CCTL2,CCR2,TAIV几个寄存器。其中最主要的是TACTL寄存器,它决定Timer_A的输入时钟信号,Timer_A的工作模式,Timer_A的开启与停止, 中断的申请等。定时器A大致可分为四个功能模块:计数器、比较/捕获寄存器0、比

7、较/捕获寄存器1比较/捕获寄存器2。计数器是主体它是一个开启和关闭的定时器,如果开启它就是一直在循环计数,只会有一个溢岀中断,也就是当计数由Oxffff到0时会产生一个中断。那怎么实现定时功能呢?这就要靠三个比较/捕获寄存器了以后用CCRx表示。CCR0比较特殊,通过他可以改变计数器的最大计数值,也就是当计数器计数到CCR0的值时自动会将计数器清零。但这需要设置相应的工作模式,模式列表如下:0停止模式,用于定时器的暂停1增计数模式,计数器计数到CCR0,再清零计数2连续计数模式,计数器增计数到0xffff,再清零计数3 增/减计数模式,增计数到CCR0,再减计数到0当计数器计数到 CCR0时,

8、CCR0单元会产生一个中断。同样当计数器计数到CCR1和CCR2时,两个单元也都会个产生一个中断。这样我们可以通过定时器A得到三个定时时间了。看程序中的定时器初始化模块。 CCTLx是相应比较/捕获寄存器的控制寄存器。它可对比较 /捕获 寄存器进行设置, 在这里只用到比较功能,也就是当计数到CCRx时产生中断,由于CCTLx默认的是比较功能,所以一般也就只用到 CCIE这个控制字,就是开启相应比较器的中断。 CCRx就是 相应比较器的值。下面介绍几个Timer_A的重要寄存器:TACTL寄存器:15109876543210未用SSEL1SSEL0ID1ID0MC1MC0未用CLRTAIETAL

9、FGSSEL_1 SSEL_O是时钟源的选择0 TACLK,使用外部引脚信号作为输入1 ACLK,辅助时钟2 SMCLK,子系统主时钟3 INCLK,外部输入时钟对TACTL进行模式设置的同时也开启了定时器,要停止只需把MC_O赋值给TACTL就可以ID1 IDO是时钟源的分频选择00不分频01 2分频10 4分频11 8分频MC1 MC0 是模式选择0停止模式,用于定时器的暂停1增计数模式,计数器计数到CCR0,再清零计数2连续计数模式,计数器增计数到Oxffff,再清零计数3 增/减计数模式,增计数到CCR0,再减计数到0CLR定时器清楚位TAIE定时器中断允许位TAIFG定时器溢岀标志位

10、TAR寄存器:16位计数器,是执行计数的单元,是计数器的主体。我的理解:即存储你的计数值,0 >CCR0CCTLx寄存器:捕获比较控制寄存器:15/1413/121110987/6/543210CAPTMOD10CCISSCSSCCIxCAPOUTMODxCCIExCCIxOUTCOVCCIFGx10CAPTM0D10 :选择捕获模式CCIS10:捕获事件输入源0 0选择 CCIxA0 1选择 CCIxB1 0选择GND1 1选择VccSCS选择捕获信号与定时器时钟同步、异步关系0:异步捕获1:同步捕获(实际中经常使用同步模式,捕获总是有效的)SCCIx 比较相等信号 EQUx将选中的捕

11、获/比较输入信号 CCIx( CCIxA,CCIxB,Vcc和GND)进行锁存,然后可由SCCIx读岀。CAP 选择捕获模式还是比较模式。0:比较模式1 :捕获模式CCIEx 捕获/比较模块中断允许位0:禁止中断1 :允许中断CCIx 捕获/比较模块的输入信号捕获模式:由CCIS0和CCIS1选择的输入信号可通过该位读岀比较模式:CCIx复位OUT 输岀信号(如果 OUTMODx选择输岀模式0,则该位对应于输入状态)0:输岀低电平1:输出高电平COV捕获溢岀标志0:没有捕获溢岀1:发生捕获溢岀当CAP=0时,选择比较模式。捕获信号发生复位。没有使COV置位的捕获事件当CAP=1时,选择捕获模式

12、。如果捕获寄存器的值被读岀前再次发生捕获事件,则COV置位。程序检测COV来判断原值读岀前是否又发生捕获事件。读捕获寄存器时不会使溢岀标志复位,须用软件复位。CCIFGx 捕获比较中断标志捕获模式:寄存器 CCRx捕获了定时器TAR值时置位比较模式:定时器 TAR值等于寄存器 CCRx值时置位*/ Date: 2009.8.4/ Author: xurafreedom/ Email: freedomxura / mxh20999/ Blog: http:/xurafreedom.cublog.c n/ Descripti on: Toggle P3.4 using software and T

13、A_0 ISR. Toggles every/ 50000 SMCLK cycles. SMCLK provides clock source for TACLK./ During the TA_0 ISR, P3.4 is toggled and 50000 clock cycles are added to/ CCR0. TA_0 ISR is triggered every 50000 cycles. CPU is normally off and/ used only during TA_ISR./ ACLK = n/a, MCLK = SMCLK = TACLK = default

14、DCO 800kHz/ Software release:IAR Assembler for MSP430 V4.09A/W32 (4.9.1.9)*#include <msp430x14x.h>*函数声明 *void InitClock ();*主函*void mai n( void)WDTCTL = WDTPW + WDTHOLD ; / Stop WDTInitClock (); /Initialize the clockP3DIR |= BIT4 ; / P3.4 outputCCTLO = CCIE; / CCRO interrupt enabledCCRO = 500;

15、TACTL = TASSEL_2 + MC_1 ; / SMCLK, Up to CCR0 mode_BIS_SR(LPM0_bits + GIE); / Enter LPM0 w/ interrupt/*函数名称:Ini tClock功能:初始化时钟函数参数:无返回值:无*/void InitClock ()unsigned int oscdly;BCSCTL1 &= XT2OFF ; /清OSCOFF/XT2,使XT2振荡器有效doIFG1 &=OFIFG;清 OFIFGoscdly=255;while (oscdly-); /延时等待while (IFG1 & O

16、FIFG);/直到 OFIFG=0 为止/DCOCTL |= DCOO + DCO1 + DCO2 ; / Max DCOBCSCTL1 |= RSEL0 + RSEL1 + RSEL2 ; / XT2on, max RSEL这两句设置 DCOCTL和BCSCTL1,设置DCO的频率一般来说,PUC复位之后,如果没有特定设置系统时钟MCLK,MCU将默认DCO振荡器产生的频率为系统时钟,不过如果设置BCSCTL2来选定/MCLK的时钟源的话(如:BCSCTL2 |= SELM_2+SELS;)系统时钟就是由/XT2振荡而来./BCSCTL2 |= SELM_2 +SELS; /SMCLK and MCLK uses XT2这一句设置 BCSCTL2,选定 MCLK和SMCLK的时钟源注意:ACLK只能来源于LFXT1.可以在BCSCTL1里设置ACLK的分频。/*函数名称:Timer_A功能:定时器A中断服务子函数,当参数:无返回值:无*刘/ Timer AO in terrupt service rout ine#pragma vector=TIMERA0_VECTOR _interrupt void Timer_A (void)P3OUT A = BIT4 ; / Toggle P3.4其实捕获相当于51的外部中断?只不过,MSP430里,把捕获和定时器做在了一起。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1