基本信息
文件名称:NXP 系列:LPC1100 系列_(10).LPC1100系列的定时器和计数器.docx
文件大小:23.93 KB
总页数:26 页
更新时间:2025-06-20
总字数:约1.16万字
文档摘要

PAGE1

PAGE1

LPC1100系列的定时器和计数器

定时器和计数器概述

定时器和计数器是单片机中非常重要的外设,广泛应用于各种嵌入式系统中。LPC1100系列单片机集成了多个定时器和计数器,这些外设可以用于生成精确的时间间隔、测量时间、产生脉冲信号等。本节将详细介绍LPC1100系列定时器和计数器的原理和使用方法。

定时器和计数器的基本原理

1.定时器的工作原理

定时器通过内部或外部时钟源进行计数,当计数值达到预设的值时,产生中断或触发其他事件。LPC1100系列单片机的定时器可以配置为多种模式,包括自由运行模式、周期模式和单次模式。

自由运行模式:计数器从0开始计数,达到最大值后溢出,然后重新从0开始计数。

周期模式:计数器从0开始计数,达到预设值后产生中断,并重新从0开始计数。

单次模式:计数器从0开始计数,达到预设值后产生中断,然后停止计数。

2.计数器的工作原理

计数器通常用于测量外部事件的频率或数量。LPC1100系列单片机的计数器可以配置为上升沿计数、下降沿计数或双沿计数。计数器的时钟源可以是内部时钟或外部输入信号。

3.定时器和计数器的寄存器

LPC1100系列单片机的定时器和计数器通过一组寄存器进行配置和控制。主要寄存器包括:

控制寄存器(CTCR):用于配置定时器的工作模式。

匹配寄存器(MATx):用于设置定时器产生中断或事件的匹配值。

计数寄存器(TCR):用于控制定时器的启动和停止。

计数器寄存器(TC):存储当前的计数值。

预分频寄存器(PR):用于设置计数器的预分频值。

定时器的配置和使用

1.定时器的初始化

在使用定时器之前,需要进行初始化配置。以下是一个简单的定时器初始化代码示例,配置定时器0为周期模式,并设置中断时间为1秒。

#includeLPC11xx.h

voidTimer0_Init(void){

//使能定时器0时钟

LPC_SCU-SYSAHBCLKCTRL|=(17);

//重置定时器0

LPC_SCU-PRESETCTRL|=(17);

LPC_SCU-PRESETCTRL=~(17);

//设置定时器0为周期模式

LPC_TMR32B0-CTCR=0x01;

//设置预分频值,假设系统时钟为12MHz,预分频值为11999,计数频率为1kHz

LPC_TMR32B0-PR=11999;

//设置匹配寄存器,匹配值为10000,即1秒

LPC_TMR32B0-MR0=10000;

//使能匹配中断

LPC_TMR32B0-MCR=0x03;//在匹配0时产生中断并复位计数器

//使能定时器0中断

NVIC_EnableIRQ(TIMER32_0_IRQn);

//启动定时器0

LPC_TMR32B0-TCR=0x01;

}

//定时器0中断处理函数

voidTIMER32_0_IRQHandler(void){

//清除中断标志

LPC_TMR32B0-IR=0x01;

//中断处理代码

//例如:LED切换状态

LPC_GPIO0-FIOSET=(118);//设置LED高电平

LPC_GPIO0-FIOCLR=(118);//清除LED高电平

}

2.定时器的中断处理

定时器中断处理函数需要在中断发生时执行相应的操作。在上述示例中,TIMER32_0_IRQHandler函数用于处理定时器0的中断,清除中断标志并切换LED状态。

3.定时器的其他模式

自由运行模式

自由运行模式下,计数器从0开始计数,达到最大值后溢出,然后重新从0开始计数。以下是一个配置定时器0为自由运行模式的示例代码:

voidTimer0_FreeRun_Init(void){

//使能定时器0时钟

LPC_SCU-SYSAHBCLKCTRL|=(17);

//重置定时器0

LPC_SCU-PRESETCTRL|=(17);

LPC_SCU-PRESETCTRL=~(17);

//设置定时器0为自由运行模式

LPC_TMR32B0-CTCR=0x00;

//设置预分频值,假设系统时钟为12MHz,预分频值为11999,计数频率为1kHz