当前位置:文档之家› MSP430_定时器A的使用

MSP430_定时器A的使用

MSP430_定时器A的使用
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?

(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个时钟周期的定时应用场合常用连续计数模式。定时器

(4)增/减计数模式

需要对称波形的情况经常可以使用增/减计数模式,该模式下,定时器先增计数到值,

然后反向减计数到0。计数周期仍由CCRO定义,它是CCRO计数器数值的2倍计数过程如图4-

4所示。

图4-4增/减计数模式

3?增计数模式应用举例

增计数最大值存储器在CCR0,该值计算方法如下:选用辅助时钟时,ACLK频率周期

T=1/32768,若选用250ms中断,贝U CCR0值应为:

0.25

N 0.25 32768 =8192

T

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

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

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

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

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

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

#i nclude

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

*文件说明:LCD模块

*****************************************************]

#defi ne LCD_IN_USE 10

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

* 数据定义七段译码表

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

const un sig ned 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 cd_Buf[LCD_IN_USE]; //自定义显示缓冲区,用于要显示的数据

un sig ned int con t,y0,y1,y2;

CCR0 的

计数器的

f=32768Hz,

//秒、时、分存储变量

LCD 模块初始化

***************************************************** void init_LCD(void)

{

char tmpv;

BTCTL = BT_fLCD_DIV32;

P5SEL = 0xfc;

LCDCTL = LCDON+LCD4MUX+LCDP1;

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

{

LCDMEM[tmpv] = 0x00;

}

}

/******************************************************* * LCD 清零模块

*******************************************************/ void cl_LCD(void)

{

char tmpv;

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

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

}// set LCD 时钟

// 置为外围模块

// 4Mux 模式

//clear LCD

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

**************************************************

void lcd_Display(void) {

char tmpv;

lcd_Buf[0]=y2/10;

lcd_Buf[2]=16;

lcd_Buf[3]=y1/10; lcd_Buf[5]=16; lcd_Buf[1]=y2%10; lcd_Buf[4]=y1%10;

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[l cd_Buf[tmpv]]; // 更新 }

}

/*********************************************************** *定时器 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 秒为 if(y1==60)

{

y1=0; y2=y2+1; //60 分为 if(y2==24)

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

}

}

}

cl_LCD(); lcd_Display();

_NOP();

LCDMEM 中的内容

1 分 ,分加 1

1 小时 , 小时加 1

相关主题
文本预览
相关文档 最新文档