PIC18f2580下TMR0定时器初值设置方法

发布者:二进制游侠最新更新时间:2020-03-11 来源: eefocus关键字:PIC18f2580  TMR0  定时器  初值设置 手机看文章 扫描二维码
随时随地手机看文章

机器频率Fosc:单片机的振荡频率,如果用外置的晶振电路,晶振上会有频率标志,常用的有4MHz、8MHz、20MHz等,本例使用的是4MHz。


机器周期Tosc:机器频率的倒数,本例中Fosc=4MHz,Tosc=1/4=0.25us


指令周期:运行一条指令所需的时间,等于4个机器周期,本例中机器周期为0.25us,则指令周期为1us。


【注】PIC系列大部分为单指令周期,就是说一条指令运行只需要一个指令周期的时间。但有有几条指令,允许需要两个指令周期的时间;如RETURN、GOTO等;而有些指令需要1~2个指令周期,需要具体分析,如DECFSZ,如果无调整只需1指令周期,如果有跳转则需要2个指令周期。


定时时间的计算.假设Timer0用的时钟源是内部的4MHZ,那么每条指令的执行时间就是 1us,设Timer0的预分频系数是1:256,TMR0的初值是6,那么定时时间为: 

256×(256-6)×1us=64ms


256×(256-6)×(1/4M*4)=64ms


即 (4M/4)/256/250=16HZ。    


参见: bit 5 T0CS:Timer0 Clock Source Select bit


1 = Transition on T0CKI pin input edge

0 = Internal clock (F OSC /4)


源程序:

#include

 

void initPORTB(void);

void initTMR0(void);

void interrupt TMR0INT(void);

int coun=0;

bit abc=0b0;

 

void main(){

initPORTB();

initTMR0();

while(1){}

}

 

void initPORTB(){

TRISB=0x00;

PORTB=0x00;

}

 

void initTMR0(){

//T0CON=0x89; //10001001 89

T0CON=0xc7; //11000111 c7  8位定时器方式 256分频

TMR0IF=0;

TMR0IE=1;

GIE=1;

// TMR0H=0x00;

TMR0L=0x06;

}

 

void interrupt TMR0INT(void){

//if(TMR0IF==1)

//{

GIE=0;

 

// TMR0H=0x00;

TMR0L=0x06;

TMR0IF=0;

// PORTB=coun&0x0f;

// if(coun==10)

// {

coun=0;

RB0=abc;

abc=!abc;

// }

coun++;

GIE=1;

//}

}

 

例如:10ms延时


#include   

  

void initPORTB(void);  

void initTMR0(void);  

void interrupt TMR0INT(void);  

int coun=0;  

bit abc=0b0;  

  

void main(){  

    initPORTB();  

    initTMR0();  

    while(1){}  

}  

  

void initPORTB(){  

    TRISB=0x00;  

    PORTB=0x00;  

}  

  

void initTMR0(){      

    T0CON=0x89; //10001001 89 使能TMR0,工作于16位定时器方式,使用内部时钟,不分频  

    TMR0IF=0;  

    TMR0IE=1;  

    GIE=1;  

    TMR0H=0xd9;  

    TMR0L=0x00;  

}  

  

void interrupt TMR0INT(void){  

//if(TMR0IF==1)  

//{  

    GIE=0;  

  

        TMR0H=0xd9;//FFFF-D900=9983 采用4M晶振。指令周期1us,  

        TMR0L=0x00;//故对TMR0写入10ms(即9983*1us)定时调整值9983  

      

        TMR0IF=0;  

//  PORTB=coun&0x0f;  

//  if(coun==10)  

//  {  

        coun=0;  

        RB0=abc;  

        abc=!abc;  

//  }  

    coun++;       

    GIE=1;  

//}  

}

关键字:PIC18f2580  TMR0  定时器  初值设置 引用地址:PIC18f2580下TMR0定时器初值设置方法

上一篇:PIC 1508 TIM2的定时器使用
下一篇:PIC16F877A第一个程序

推荐阅读最新更新时间:2024-11-16 22:33

STM32 定时器时钟配置技巧
众所周知 STM32 的时钟配置比较复杂,而定时器的时钟配置更是 ‘奇葩‘。 如下图(截图自STM32F4编程手册)APB的预分频器分频系数如果不为1,则定时器的时钟就倍频了反而。 配置技巧 下面以STM32F4为例, 这里配置定时器8的计数频率为 10Khz,从时钟树中可知TIM8挂在APB2总线 获取当前 APB2(PLCK2) 的时钟频率 获取 APB2 预分频器的分频值 根据上述参数判断,如果分频值不为1,则定时器时钟 x2 .Prescaler = xxx 这是一个推荐的写法 int hw_timer_init(TIM_HandleTypeDef *htim) { uint32_t FLatency, t8
[单片机]
STM32 <font color='red'>定时器</font>时钟配置技巧
LPC210X定时器查询方式及如何初始化
定时器查询方式定时器初始化: 1、设置定时器分频数,为(x+1)分频 2、匹配通道X中断并复位TxTC 3、比较值(1S定时值) 4、启动并复位TxTC 如: T1PR = 99; // 设置定时器0分频为100分频,得110592Hz T1MCR = 0x03; // 匹配通道0匹配中断并复位T0TC T1MR0 = 110592/2; // 比较值(1S定时值) T1TCR = 0x03; // 启动并复位T0TC T1TCR = 0x01; 研究了好长一段时间,LPC210X的定时器,查询方式定时很简单如上面,但中断方式要操作好多寄存器,太麻烦,一直是一头雾水。好不容易理出了思路,现将一段例程粘贴备忘。 #inclu
[单片机]
STM8S定时器基本中断定时
STM8S的定时器分三类; 高级定时器TIM1 通用定时器TIM2,TIM3,TIM5 基本定时器TIM4,TIM6 其中除TIM4和TIM6是8位定时器外,其他的定时器都是16位计数的。 每个定时器都具有自动重装载功能 每个定时器的时钟都可以由系统时钟独立分频而来,其中高级定时器TIM1可以选择65536种分频,分频系数为1-65536.通用定时器可以选择16种分频,基本定时器只能选择8种分频。 除了TIM1可以选择计数方向外,其他的定时器都是向下计数的,而技术手册上说的向上计数是错误的。 基本中断定时用到的寄存器; 一、自动装载寄存器高位(TIMx_ARRH) 和 自动装载寄存器低位(TIMx_
[单片机]
一文读懂定时器实现技术
1. 定时器介绍 程序里的定时器主要实现的功能是在未来的某个时间点执行相应的逻辑。在定时器模型中,一般有如下几个定义。 interval:间隔时间,即定时器需要在interval时间后执行 StartTimer:添加一个定时器任务 StopTimer:结束一个定时器任务 PerTickBookkeeping: 检查定时器系统中,是否有定时器实例已经到期,相当于定义了最小时间粒度。 常见的实现方法有如下几种: 链表 排序链表 最小堆 时间轮 接下来我们一起看下这些方法的具体实现原理。 2. 定时器实现方法 2.1 链表实现 链表的实现方法比较粗糙。链表用于存储所有的定时器,每个定时器都含有interval 和 elaps
[嵌入式]
一文读懂<font color='red'>定时器</font>实现技术
MSP430学习笔记——定时器(续)
同时定时器A还有3个捕获/比较寄存器CCRx,3个捕获/比较控制寄存器CCTLx。 在捕获比较模块中,可读可写。其中CCR0经常用作周期寄存器,其他CCRx相同。 CCTLx捕获/比较寄存器 CMx:选择捕获模式 CCISx:捕获/比较的输入选择 SCS:1,捕获输入信号与定时器时钟信号同步;0,异步捕获 SCCI:被所存的CCI输入信号和EQUx锁存,通过SCCI读出来。 CAP:0,比较模式;1,捕获模式 OUTMODx:选择输出模式 CCI:捕获/比较的输入信号。选择的输入信号通过该位来读出 CCIFGx :捕获比较中断标志。 捕获模式:寄存器CCRx捕获了定时器TAR值时置位 比较模式:定时器TAR值等于寄存器
[单片机]
MSP430学习笔记——<font color='red'>定时器</font>(续)
关于定时器A的官方例子解读
//****************************************************************************** // MSP-FET430P140 Demo - Timer_A, Toggle P1.0, CCR0 Cont. Mode ISR, DCO SMCLK // // Description: Toggle P1.0 using software and TA_0 ISR. Toggles every // 50000 SMCLK cycles. SMCLK provides clock source for TACLK. // During the TA_0 ISR,
[单片机]
Systick定时器延时原理与HAL_Delay()延时函数的使用
代码的书写过程中经常用到延时,这里主要讲述一下HAl延时,HAL库之HAL_Delay()函数在72M主频,STM32CUBEMX自动生成情况下,默认为延时1ms单位,即HAL_Delay(500)表示500ms延时,这是因为在默认状态下,SysTick()默认设置为1ms中断,下面就原理进行叙述。 Systick 定时器延时原理 Systick(滴答时钟)是一个24位,向下计数的定时器,当倒计时完成后,定时器可以产生一个中断,所以,当频率一定,计数个数一定时,这个中断就会以一定的时间间隔发生,如果每个中断发送后调用的中断函数中给一个变量累加,这样我们就可以获得一个与时间相关的变量。 HAL_Delay()延时函数的
[单片机]
STM32F10x 学习笔记 2 (SysTick 定时器
SysTick 定时器被集成在NVIC中。因此,只要是Cortex-M3 内核的单片机,就都有它。这个学习笔记就用SysTick 定时器来实现走马灯的功能。 SysTick 定时器非常简答,只有四个寄存器。这四个寄存器的含义在《Cortex-M3权威指南》那本书中讲的非常的清楚,这里不复述了,下面只讲讲在STM32上SysTick有什么特殊之处。按照CMSIS 标准,用C语言访问这四个寄存器时使用的寄存器名称分别如下: SysTick- CTRL SysTick- LOAD SysTick- VAL SysTick- CALIB SysTick- CALIB 的值固定为9000,因此,只有当系统嘀嗒时钟设定为9MHz(H
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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