77范文网 - 专业文章范例文档资料分享平台

MSP430_定时器A的使用(含OUTMOD模式详解及运用)

来源:网络收集 时间:2019-01-26 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

第四讲

第四讲第四讲 第四讲 定时器 定时器定时器 定时器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)增/减计数模式 需要对称波形的情况经常可以使用增/减计数模式,该模式下,定时器先增计数到CCR0的

值,然后反向减计数到0。计数周期仍由CCR0定义,它是CCR0计数器数值的2倍。计数器的

计数过程如图4-4所示。

图4-4增/减计数模式 3.

..

.增计数模式应用举例

增计数模式应用举例增计数模式应用举例 增计数模式应用举例

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

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

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

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

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

/***************************************************** * 文件说明:LCD 模块

*****************************************************/ #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; lcd_Buf[2]=16;

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

lcd_Buf[5]=16; lcd_Buf[6]=y0/10; lcd_Buf[7]=y0; lcd_Buf[8]=16; lcd_Buf[9]=16; for(tmpv=0;tmpv

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

/*********************************************************** *定时器A中断服务程序

************************************************************/ #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A(void)

//interrupt[TIMERA0_VECTOR] void Timer_A (void) {

cont=cont+1; if(cont==4) {

cont=0;

y0=y0+1; //秒加1 if(y0==60)

{

y0=0; y1=y1+1; //60秒为1分,分加1 if(y1==60)

{

y1=0; y2=y2+1; //60分为1小时,小时加1 if(y2==24)

{y2=0 ; //24小时再清零 } } }

cl_LCD();

lcd_Display(); _NOP(); } }

void init_TA(void) //初始化定时器A {

TACCR0 = 0x2000;

TACTL = TASSEL0 + TACLR; // ACLK, 清零Tar TACCTL0 = CCIE; // 中断使能CCR0

TACTL |= MC0; // 设置增模式启动定时器A }

/*********************************************************** *主程序

************************************************************/ void main(void) {

WDTCTL = WDTPW +WDTHOLD; // 关WDT

SCFQCTL |= SCFQ_4M; // 设定主时钟为4MHz init_LCD();

init_TA() ;

_EINT(); // 使能中断 cont=0; y0=0; y1=0; y2=0; for (;;)

{

_BIS_SR(CPUOFF); //关CPU

_NOP(); // 调试程序使用 } }

4. ..

.输出单元

输出单元输出单元

输出单元

定时器A的输出单元输出模式有8种,增计数模式下输出模式如图4-5所示。 图4-5输出模式示意图 各模式说明如下:

(1)输出模式0—输出模式:输出信号OUTx由每个捕获/比较模块的控制寄存器CCTLx 中的OUTx位定义,并在写入该寄存器后立即更新。最终位OUTx直通。

(2)输出模式1—置位模式:输出信号在TAR等于CCRx时置位,并保持置位到定时器复 位或选择另一种输出模式为止。

(3)输出模式2—PWM翻转/复位模式:输出在TAR的值等于CCRx时翻转,当TAR的 值等于CCR0时复位。

(4)输出模式3—PWM置位/复位模式:输出在TAR的值等于CCRx时置位,当TAR的 值等于CCR0时复位。

(5)输出模式4—翻转模式:输出电平在TAR的值等于CCRx时翻转,输出周期是定时器 周期的2倍。

(6)输出模式5—复位模式:输出在TAR的值等于CCRx时复位,并保持低电平直到选择 另一种输出模式。

(7)输出模式6—PWM翻转/置位模式:输出电平在TAR的值等于CCRx时翻转,当TAR 值等于CCR0时置位。

(8)输出模式7—PWM复位/置位模式:输出电平在TAR的值等于CCRx时复位,当TAR

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库MSP430_定时器A的使用(含OUTMOD模式详解及运用)在线全文阅读。

MSP430_定时器A的使用(含OUTMOD模式详解及运用).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/445567.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: