PIC单片机定时器相关用法

发布者:beup001最新更新时间:2015-06-17 来源: 51hei关键字:PIC单片机  定时器 手机看文章 扫描二维码
随时随地手机看文章
什么是定时器?

定时器顾名思义就是用来定时的。在单片机应用中常常用于各种各样的定时。比如让LED灯每隔 1S 亮一次。 这个1S 就是由定时器做到的。

指令周期

指令周期就是单片机执行一个指令所花费的时间。这也是定时器定时的最小时间单位。时钟频率/4=指令频率。1/指令频率=指令周期。

假设现在的时钟是4MHZ ,4MHz的时钟经过4分频后变成了 1MHz 其周期为0.0000001s也就是1us,这个1us就是指令周期,这1us也就是定时器定时的最小单位。

定时器与预分频器

假设在没有预分频器情况下。开启定时器 每隔一个指令周期定时器就加一。假设时钟是4MHz 也就是每隔 1us 定时器加一。

如果有了预分频器假设预分频器设置成2分频,定时器就 每隔2个指令周期定时器加一。如果预分频器设置成4分频,定时器就 每隔4个指令周期定时器加一,以此类推。

定时器中断标志位

如: TMR0 这个是8位的定时器,也就是8位的寄存器。8位的寄存器能代表的数值为0~255.也就是说定时器可以从0开始加一直加到255.到255后再加一就又变成0。此时TMR0定时器中断标志位 (TMR0IF)变成 1.(如果中断没有开启,并不执行中断程序。)

到底从时钟频率一直到定时器中断溢出之间是什么关系呢?

下面我画了一个流程图我们用频率的方式来理解这一切。假设时钟频率是4MHz ,定时器预分频值为2,定时器初始值为0.

1。首先4MHz 的时钟 4分频后变成 1MHz的指令频率;

2。然后预分频器 2 分频后变成 0.5MHz的频率供给定时器;

3。定时器经过256分频后变成约1952Hz的频率溢出中断;

 

 

然后我们再用周期的方式来理解这一切。

1。首先0.25us时钟周期4分频后变成 1us指令周期;

2。然后预分频器 2 分频后变成 2us周期 供给定时器;

3。定时器每隔2us加一 ,加到256次 256X2us=512us溢出中断 ;

 

 

希望上面的流程图能帮你梳理一下概念。

实例说明:

假设时钟周期为4MHZ,每隔50MS点亮LED,每隔50MS灭掉LED。这样的程序要如何做到呢。

这50ms如何做到.

1,得到指令周期

4MHz/4=1MHz

1/1MHz=0.0000001s=1us

2,得到预分频

定时器定时的最大时间要超过这50mS,所以预分频器要选择256

预分频X256=最大的定时时间。256X256=65536us=65.536ms 大于50ms

3, 计算定时器初始值

(定时器最大值+1)- (定时时间/预分频)=定时器的初始值。

255+1=256

50000/256=195.3125

256-195.3125=60.6875 四舍五入 定时器初始值为61.

设置相关的寄存器。

OPTION_REG寄存器中我们一般需要设置三处。

PS<2:0>设置用来设置预分频预分频范围从2 ~256

PSA设置成0 讲预分频器分配给Timer0模块

TMR0CS设置成0 内部指令周期时钟。
 

 

实例程序:

/*开发环境 MPLAB X IDE 型号PIC16LF1823*/

#include

__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON&CLKOUTEN_OFF&IESO_ON&FCMEN_ON);

__CONFIG(PLLEN_OFF&LVP_OFF) ;

#define LED LATA5/*也可用 #define LED RA5,只是PIC16LF1823 输出电平的时候,直接控制LATA5执行速度更快,因为传给RA5的数据最终也是传给LATA5才执行的*/

void init_fosc(void)

{

OSCCON= 0x68;//时钟设置为4MHz

}

void init_gpio(void)

{

PORTA = 0;

LATA = 0;

ANSELA = 0;

TRISAbits.TRISA5=0; //RA5口设置成输出 用来控制LED

}

void init_timer0(void)

{

OPTION_REG=0x87; //预分频为256

}

int main(int argc, char** argv)

{

init_fosc();

init_gpio();

init_timer0();

TMR0IF=0;//清除TMR0中断标志位

TMR0=61;//设置中断初始值61

while(1)

{

if(TMR0IF==1)//定时时间到了吗??

{

LED = ~LED;//改变LED的状态

TMR0IF=0;//清除TMR0中断标志位

TMR0=61;//设置中断初始值61为下次50ms定时做准备

}

}

}

关键字:PIC单片机  定时器 引用地址:PIC单片机定时器相关用法

上一篇:PIC单片机广告灯程序
下一篇:DS18B20+PIC测温用1602显示温度C程序

推荐阅读最新更新时间:2024-03-16 14:04

PIC单片机硬件死锁问题
使用 PIC 单片机 去设计工控电路,最头痛的问题,就是 PIC 单片机在受干扰后经常硬件死锁,大部份人归咎于 “CMOS的可控硅效应” 因而产生死锁现象,一般都认为 ‘死锁后硬件复位都是无效的.只有断电。’ 但是一个成熟的商品,那须要你去断电呢? 就好像一台电冰箱,压缩机一启动,产生干扰, CPU 受干扰 因而 ‘硬件死锁’,死机在那儿,假如发现了,可以马上拔掉电源插头,隔几秒再插回,如此的动作 可以接受吗? 假如死机时没发现,死机几十天,你猜它会如何呢? -- 应该是 供给 CPU 电源的稳压 IC 烧毁了。 PIC 单片机为什么会硬件死锁,PIC 单片机在受干扰后经常硬件死锁,那么 PIC 要‘看门狗’ 有何用,有没有人深
[单片机]
PIC单片机中重要指令介绍
PIC的指令系统 PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。 PIC汇编语言指令格式   PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:   标号 操作码助记符 操作数1,操作数2;注释 指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令
[单片机]
PIC单片机的中断讨论
******************** 中断服务代码 btfss INTCON,T0IE ; 判断是否为 T0中断 goto other_int btfss INTCON,T0IF ; it s the time of T0 int goto other_int bcf INTCON,T0IF ; 是T0中断,清除中断标 志 movlw 0x10 ; 微秒的高位字节加上定时时间 256x16分频=4096=0x1000的高位 (0x10) addwf us+1 goto end_int other_int ; 可 添加其他
[单片机]
[HAL库学习之路]7.定时器中断
一、Pinout 二、Clock Configuration 三、Configuration 定时器溢出时间 Tout=((arr+1)∗(psc+1))/TclkTout=((arr+1)∗(psc+1))/Tclk 四、Generate Code 代码 定时器溢出时间为500ms,500ms翻转一次LED状态 int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration-------------------------------------------------------
[单片机]
24C02在PIC单片机系统中的应用
MICROCHIP公司的PIC16系列单片机以其精简的指令和较强的端口驱动能力在各个领域得到广泛的应用。在需要储存较大数量数据的控制领域,24C02可以解决PIC16C8 系列单片机片内EEPROM不足的问题,用以保存诸如用户设置参数、采集到的数据等。 由于部分PIC单片机不具备I2C总线接口,在应用时必须用软件法加以解决。 在软件编制时应当严格遵循I2C总线规则,并注意24C02的片内读写周期时间,调整好程序流程,以避免写不进、读不出的问题。 下面将笔者在实际工作中遇到的问题和解决的方法进行简单的介绍,希望可以给同行一些帮助。 首先约定,数据由微处理器发送到24C02称 写 、 发 ,反之称 读 、
[单片机]
s3c2410的时钟和定时器
外接晶振,然后通过内部电路产生时钟源 直接使用外部提供的时钟源 通过引脚的设置来选择 FCLK cpu HCLK AHB PCLK APB PLL 通过时钟控制逻辑PLL来提高系统的时钟 UPLL USB MPLL FCLK HCLK PCLK 没有启动PLL FCLK=Fin(晶振频率) s3c2410有五个16位的定时器 其中前面的四个定时器有PWM功能 即有一个输出引脚 可以通过定时器来控制输出引脚周期性的高、低电平。定时器的时钟源是PCLK @**********************************************************
[单片机]
STM32-基本定时器TIM6-TIM7基本定时功能
  1. STM32的Timer简介   STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。 定时器 计数器分辨率 计数器类型 预分频系数 产生DMA请求 捕获/比较通道 互补输出 TIM1 TIM8 16位 向上,向下,向上/向下 1-65536之间的任意数 可以 4 有 TIM2 TIM3 TIM4 TIM5 16位 向上,向下,向上/向下 1-65536之间的任意数 可以 4 没有 TIM6 TIM7 16位 向上 1-6553
[单片机]
STM32-基本<font color='red'>定时器</font>TIM6-TIM7基本定时功能
单片机定时器的应用与误差纠正
1 前言    定时器是MCS-51单片机非常重要的组成部分,由于其应用与单片机的其他硬件相关,存在着一定的复杂性 。而定时器是单片机应用中解决某类复杂问题的最有为效的方法,应用非常广泛。随着定时要求的提高,在定时处理过程中所带来的误差需要校正 ,本文就MCS-51单片机的使用方法与误差校正方法进行了讨论,并给出通用算法与程序。 2 定时器工作方式与方式设置    MCS-51单片机有两路独立的定时器,每路定时器有4种工作方式(0~3),方式0是13位计数结构,计数器由TH全部8位与TL的低5位构成;方式1是16位计数结构,计数器由TH与TL全部8位共16位组成;方式2是8位计数结构方式,计数器由TL8位组成,与其他方式不同
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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