×
嵌入式 > 嵌入式开发 > 详情

MSP430F5438学习笔记1-定时器

发布时间:2020-08-04 发布时间:
|
比较模式:

这是定时器的默认模式,当在比较模式下的时候,与捕获模式相关的硬件停止工作,如果这个时候开启定时器中断,然后设置定时器终值(将终值写入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 <msp430x14x.h>

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计数模式为连续增计模式

CCTL1 = MC0+SCS+CAP+CCIE;//输入上升沿捕获,CCI0A为捕获信号源

_EINT();//中断允许

while(1);//LOOP

}

#pragma vector=TIMERA1_VECTOR//定时器A中断处理

__interrupt void timer_a(void)

{

switch(TAIV)//向量查询

{case2://捕获中断

if(CCTL1&CM0)//上升沿

{

CCTL1=(CCTL1&(~CM0))|CM1;//更变设置为下降沿触发

start=TAR;//记录初始时间

overflow=0;//溢出计数变量复位

}

else if (CCTL1&CM1)//下降沿

{

CCTL1=(CCTL1&(~CM1))|CM0;//更变设置为上升沿触发

end=TAR;//用start,end,overflow计算脉冲宽度

}

break;

case 10://定时器溢出中断

overflow++;

break;//溢出计数加1

default:break;

}

}

//例程结束



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
mini 2440 test 的Delay函数分析