原创 【TI博客大赛】MSP430单片机定时器A

2012-11-8 13:47 2062 6 7 分类: MCU/ 嵌入式

定时器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值,可重置计数周期。

20121108134522148001.jpg

图4-2增计数模式示意图

(3)连续计数模式:在需要65536个时钟周期的定时应用场合常用连续计数模式。定时器从当前值计数到单增到0FFFFH后,又从0开始重新计数如图4-3所示。

20121108134527978002.jpg

图4-3 连续计数模式

(4)增/减计数模式

需要对称波形的情况经常可以使用增/减计数模式,该模式下,定时器先增计数到CCR0的值,然后反向减计数到0。计数周期仍由CCR0定义,它是CCR0计数器数值的2倍。计数器的计数过程如图4-4所示。

20121108134534944003.jpg

图4-4增/减计数模式

3.增计数模式应用举例

增计数最大值存储器在CCR0,该值计算方法如下:选用辅助时钟时,ACLK频率f=32768Hz,周期T=1/32768,若选用250ms中断,则CCR0值应为:

20121108134541474004.gif

转换成十六进制数后N=2000(H)

MSP430F413单片机定时器A构成的时钟小系统程序清单如下:

/***************************************************

*  文件名称:MSP413C语言定时程序

*  文件说明:用MSP430F413定时器A作为定时中断源。

***************************************************/

#include

#define LCD_IN_USE 10

/******************************************************

*   数据定义七段译码表

*****************************************************/

const unsigned char NUM_LCD[17]={

0xd7, 0x06, 0xe3, 0xa7, 0x36,  //'0'~ '4'

0xb5, 0xf5, 0x07, 0xf7, 0xb7,  //'5' ~ '9'

0x77, 0xf4, 0xd1, 0xe6, 0xf1,  // 'A'~ 'E'

0x71, 0x00};               // 'F','全熄'

unsigned char lcd_Buf[LCD_IN_USE];  // 自定义显示缓冲区,用于要显示的数据

unsigned int cont,y0,y1,y2;                    //秒、时、分存储变量

/*******************************************************

*    LCD模块初始化

*******************************************************/

void init_LCD(void)

{

char tmpv;

BTCTL  = BT_fLCD_DIV32;                // set LCD 时钟

P5SEL  = 0xfc;                            // 置为外围模块

LCDCTL = LCDON+LCD4MUX+LCDP1;          // 4Mux 模式

for (tmpv = 0;tmpv<10;tmpv++)

{

LCDMEM[tmpv] = 0x00;               //clear LCD

}

}

/*******************************************************

*    LCD清零模块

*******************************************************/

void cl_LCD(void)

{

char tmpv;

for (tmpv = 0;tmpv<10;tmpv++)

{

LCDMEM[tmpv] = 0x00;               //clear LCD

}

}

/****************************************************

*   更新LCD缓冲区的内容,把数据显示到LCD

****************************************************/

void lcd_Display(void)

{

char tmpv;

lcd_Buf[0]=y2/10;    lcd_Buf[1]=y2%10;

lcd_Buf[2]=16;

lcd_Buf[3]=y1/10;    lcd_Buf[4]=y1%10;

lcd_Buf[5]=16;

lcd_Buf[6]=y0/10;    lcd_Buf[7]=y0%10;

lcd_Buf[8]=16;    lcd_Buf[9]=16;

for(tmpv=0;tmpv

{

LCDMEM[tmpv] = NUM_LCD[lcd_Buf[tmpv]]; //更新LCDMEM中的内容

}

}

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户593939 2012-11-9 22:45

参考了,学习了
相关推荐阅读
wxg1988 2014-04-22 17:50
全球创客马拉松武汉站已经开始报名啦
星星之火,可以燎原! 全球创客马拉松在深圳、上海、北京、南京、成都等地相继点燃中国的创客之火,下一站:武汉! 改变世界,抑或改变自己,全球创客马拉松也许可以是梦想启航的地方。 英雄不问...
wxg1988 2013-10-24 13:15
液晶显示器原理LCD驱动基础
LCD显示器概述   ——》液晶显示器,LCD为英文 Liquid Crystal Display的缩写,它是一种数字显示技术,可以通过液晶和彩色过滤光源,并在平面面板上产生图像。  ...
wxg1988 2013-08-13 10:20
Arduino mini 亲手打造
Arduino,满足您创新创意的需要! Arduino 是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。它适用于艺术家、设计...
wxg1988 2013-07-30 20:44
【博客大赛】STM32中断小结
  STM32中断EXTI STM32中断支持15个异常中断和240个外部中断,有256个中断优先级,其中I/O可配置为EXTI中断,捕捉外部信号,可配置为上升沿,下降沿,上升下降沿三种中...
wxg1988 2013-07-16 21:09
关注创客与开源电子,可以订阅
   http://list.qq.com/cgi-bin/qf_invite?id=04a0d177cb5a2dd6a4da786f024011139e353139950c4411 关注创客...
EE直播间
更多
我要评论
1
6
关闭 站长推荐上一条 /3 下一条