lpc1114通用定时器-定时功能

发布者:悠闲自在最新更新时间:2016-12-10 来源: eefocus关键字:lpc1114  通用定时器  定时功能 手机看文章 扫描二维码
随时随地手机看文章

下面我们以LED流水灯为例演示定时功能,流水的时间间隔由定时器精确控制。(看了上面的这句话就绕道的童鞋,请不要急着走,接下来讲的不是怎么实现流水灯,而是怎么样定时。)

下面我们以16位定时器0来演示。

新建一个工程,如下图所示:

新建工程

在timer.h文件中,输入以下代码:

  1. #ifndef __NXPLPC11xx_TIME_H__

  2. #define __NXPLPC11xx_TIME_H__

  1. extern void T16B0_init(void);

  2. extern void T16B0_delay_ms(uint16_t ms);

  3. extern void T16B0_delay_us(uint16_t us);

  1. #endif

在timer.c文件中,输入以下代码:

  1. #include “lpc11xx.h”

  2. #include “timer.h”

  1. void T16B0_init(void)

  2. {

  3.    LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7);    //使能TIM16B0时钟

  4.    LPC_TMR16B0->IR  = 0x01;           //MR0中断复位,即清中断

  5.    LPC_TMR16B0->MCR = 0x04;  //MR0中断产生时停止TC和PC,并停止定时器工作

  6. }

  1. void T16B0_delay_ms(uint16_t ms)

  2. {

  3.    LPC_TMR16B0->TCR = 0x02;          //复位定时器(bit1:写1复位)

  4.    LPC_TMR16B0->PR  = SystemCoreClock/1000-1;        // 1毫秒TC+1

  5.    LPC_TMR16B0->MR0 = ms;     // 注意:MR0是16位寄存器,值不要超过65535

  6.    LPC_TMR16B0->TCR = 0x01;          //启动定时器:TCR[0]=1;

  7.    while (LPC_TMR16B0->TCR & 0x01);//等待定时器计时时间到

  8. }

  1. void T16B0_delay_us(uint16_t us)

  2. {

  3.    LPC_TMR16B0->TCR = 0x02;          //复位定时器(bit1:写1复位)

  4.    LPC_TMR16B0->PR  = SystemCoreClock/1000000-1;          // 1微秒TC+1

  5.    LPC_TMR16B0->MR0 = us;      // 注意:MR0是16位寄存器,值不要超过65535

  6.    LPC_TMR16B0->TCR = 0x01;          //启动定时器:TCR[0]=1;

  7.    while (LPC_TMR16B0->TCR & 0x01);//等待定时器计时时间到

  8. }

在timer.c文件中,一共定义了3个函数,分别是定时器初始化函数、毫秒级定时函数和微秒级定时函数。

第3~8行为定时器初始化函数,一共配置了4个寄存器。

第5行,给SYSAHBCLKCTRL寄存器的bit7写1,开启CT16B0时钟。关于SYSAHBCLKCTRL寄存器的定义,详见第一章。

第6行,给IR寄存器bit0写1,清MR0中断位。

第7行,给MCR寄存器bit2写1,设置当MR0匹配产生时,停止PC和TC停止递增,并使定时器停止工作。

PR是预分频值寄存器,PC是预分频计数器,TC是定时器计数器。单片机每个PCLK,PC都会加1,当PC的值等于PR的值,TC的值就会+1,PC的值就会变为0,再次随着PCLK递增。所以PR的值决定了定时器TC的间隔时间,当PR=0的时候,PC+1,即TC+1,如果这时候工作在50MHz,TC递增的时间间隔即1/50000000=0.02微秒。

这个函数完全是在为定时做准备。

第9~16行,毫秒级延时函数

第11行,给TCR寄存器bit1写1,复位定时器,复位定时器后,PC=0,TC=0。

第12行,给PR写值,确定预分频值。SystemCoreClock是主时钟,主时钟是以标准单位s来说的,因为s = 1/Hz,主频除以1000,单位及毫秒,再减1,即为我们需要的数。

例如:当主频为50MHz时,PR值就是50000000/1000-1=49999,上面讲到,TC的值每PR+1递增,即50000个PCLK,TC递增,那TC递增的间隔时间即为50000*0.02微秒=1毫秒。

第13行,写入匹配值。刚才把PR值写入,结果是TC每1毫秒递增,所以这里直接把需要的毫秒数写入即可。当TC值从0数到MR0值时,将执行MCR配置好的动作。

第14行,给TCR寄存器bit0写1,启动定时器。

第15行,观察TCR寄存器的bit0,当bit0为变为0时,定时时间到。之所以可以观察这一位的值,是因为我们在MCR寄存器里面配置当定时器时间到后,使TCR bit0为0.

第17~24行,微秒级延时函数

该函数大部分与前面所讲的毫秒级延时函数类似,只有PR值不一样,在这里,PR=49,即TC递增的时间间隔是50*0.02微秒=1微秒

在main.c文件中,输入以下代码:

  1. #include “lpc11xx.h”

  2. #include “timer.h”

  1. #define LED1_ON  LPC_GPIO1->DATA &= ~(1<<0)

  2. #define LED1_OFF LPC_GPIO1->DATA |= (1<<0)

  3. #define LED2_ON  LPC_GPIO1->DATA &= ~(1<<1)

  4. #define LED2_OFF LPC_GPIO1->DATA |= (1<<1)

  1. void led_init()

  2. {

  3.    LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟

  4.    LPC_IOCON->R_PIO1_0 &= ~0x07;

  5.    LPC_IOCON->R_PIO1_0 |= 0x01; //把P1.0脚设置为GPIO

  6.    LPC_IOCON->R_PIO1_1 &= ~0x07;

  7.    LPC_IOCON->R_PIO1_1 |= 0x01; //把P1.1脚设置为GPIO

  8.    LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟

  1.    LPC_GPIO1->DIR |= (1<<0); // 把P1.0设置为输出引脚

  2.    LPC_GPIO1->DATA |= (1<<0); // 把P1.0设置为高电平

  3.    LPC_GPIO1->DIR |= (1<<1); // 把P1.1设置为输出引脚

  4.    LPC_GPIO1->DATA |= (1<<1); // 把P1.1设置为高电平

  5. }

  1. int main()

  2. {

  3.    led_init();

  4.    T16B0_init();

  1.    while(1)

  2.    {

  3.       T16B0_delay_ms(1000);

  4.       LED1_ON;

  5.       LED2_OFF;

  6.       T16B0_delay_ms(1000);

  7.       LED1_OFF;

  8.       LED2_ON;

  9.    }

  10. }


关键字:lpc1114  通用定时器  定时功能 引用地址:lpc1114通用定时器-定时功能

上一篇:cortex m0 lpc1114程序下载失败
下一篇:lpc1114通用定时器

推荐阅读最新更新时间:2024-03-16 15:24

stm32cube通用定时器输入捕获
用定时器输入捕获做红外线接收实验。(此次试验以通道2为例) ①stm32cube配置 ② ③ ④程序中主要用到的输入捕获相关寄存器 uint16_t tim_sr,tim_ccer,tim_ccr; tim_sr=htim- Instance- SR;//状态寄存器 tim_ccer=htim- Instance- CCER;//捕获、比较使能寄存器 tim_ccr=htim- Instance- CCR2;//捕获比较寄存器2(即用来保存通道2发生中断时的CNT寄存器的值) htim- Instance- CNT //计数寄存器 SR用来判断是不是输入捕获中断; CCER寄存器用来判断当前是下降
[单片机]
stm32cube<font color='red'>通用</font><font color='red'>定时器</font>输入捕获
STM32 通用T2、T3、T4、T5定时器详解
下定时器初始化配置 1 void TIM3_Configuration(void)//1MS 2 { 3 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 4 5 TIM_DeInit(TIM3);//开一下时钟再关闭 6 /* 设置TIM2CLK 为 72MHZ */ 7 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE); 8 9 10 /* 自动重装载寄存器周期的值(计数值) */ 11 TIM_TimeBaseStructure.TIM_Period=10
[单片机]
STM32单定时器四通道捕获功能实现
输入捕获作为定时器的一个功能,在工业测速上有很大的应用。STM32的一些定时器具有四个外部通道,可利用一个定时器采集外部四路脉冲频率,节约硬件资源和软件代码 如需要测量一个或多个外部方波脉冲频率,频率低于单片机运行频率,可如下操作:(以TIM4为例) 初始化:(省略GPIO配置,将TIM4的四个通道引脚配置为上拉或浮空输入,省略定时器RCC配置,省略中断NVIC配置) void TIM_Configuration(void) { TIM_ICInitTypeDef TIM_ICInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // TIM4 时基 TIM_D
[单片机]
LPC1114外部中断
外部中断作为处理器响应外部事件的通道,在控制系统中起着非常重要的作用。下面就来讨论一下LPC1114外部中断的使用情况。 LPC1114的每一个引脚都可以响应一个外部中断,所以有多少个引脚就有多少个外部中断。但LPC1114的中断系统非常强大,外部中断只是它其中的一小部分。因此,要用好外部中断,就必须先来了解LPC1114的整个中断系统。下面就来看一下它的中断系统。 在LPC11xx系列处理器中,有一个部分被称为 私有外设总线 (Private peripheral bus),它位于Memory map中地址为0xE0000000~0xE0100000的地方,包含有下表中的几个核心外设。 其中的Nested Vectored
[单片机]
<font color='red'>LPC1114</font>外部中断
STM32通用定时器基本用法DVI倍频系数
STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。从系统框架图下看,名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在APB1总线上。其中TIM1&TIM8称为高级控制定时器(advanced control timer).他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。 关于倍频系数 由上图可知,当APB1 的预分频系数为1 时,这个倍频器不起作用,定时器的时钟频率等于APB1 的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8
[单片机]
STM32<font color='red'>通用</font><font color='red'>定时器</font>基本用法DVI倍频系数
如何采用STM32中的控制定时器Tim1实现计数器功能
STM32中的高级控制定时器(Tim1)是由一个16位的自动装载计数器组成,它由一个可编程预分频器驱动。 用途在于:测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较,PWM,嵌入死区时间的互补PWM等)。 使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。 具体如下: 16位上下,自动装载计数器。 16位可编程预分频器,计数器时钟频率的分频率的分频系数为1-65535之间任意数值,4个独立通道: 输入捕获 输出比较 PWM生成 单脉冲模式输出 死区时间可编程的互补输出 使用外部信号控制定时器和定时器互连的同步电路 在指定数目的计数器周期之后更新定时器寄存器
[单片机]
LPC1114_外部中断程序_MDK编译环境
main.c #include LPC11XX.h #include gpio.h #include timer16.h #include main.h #include Key.h #include LCD.h void Delay_Sec(unsigned char Time) //1s*Time延时函数 { u16 i; while(Time) { for(i=0;i 3000000;i++); Time--; } } void Delay_Ms(unsigned int Time) //1Ms*Time延时函数 { u16 i; whil
[单片机]
内装定时器通用电机控制电路图
内装定时器的通用电机控制电路图
[模拟电子]
内装<font color='red'>定时器</font>的<font color='red'>通用</font>电机控制电路图
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved