基本信息
文件名称:Microchip 系列:PIC18F 系列_(13).PIC18F系列的定时器与计数器.docx
文件大小:21.72 KB
总页数:17 页
更新时间:2025-06-19
总字数:约8.48千字
文档摘要

PAGE1

PAGE1

PIC18F系列的定时器与计数器

定时器概述

定时器在嵌入式系统中是非常重要的组件,它们用于各种时间相关的任务,如延时、定时中断、脉宽调制(PWM)等。PIC18F系列单片机提供了多个定时器模块,每个模块都有不同的功能和特点。本节将详细介绍PIC18F系列单片机中的定时器与计数器模块,包括定时器的基本配置、中断处理、和实际应用。

PIC18F系列单片机中的定时器模块主要有:

Timer0

Timer1

Timer2

Timer3

Timer4/5

每个定时器模块都有不同的寄存器和配置选项,可以实现不同的功能。下面我们将分别详细介绍这些定时器模块。

Timer0

基本配置

Timer0是一个8位定时器/计数器模块,可以通过软件配置为定时器或外部计数器。Timer0的主要寄存器包括:

TMR0:8位定时器/计数器寄存器

T0CON:定时器0控制寄存器

INTCON:中断控制寄存器

T0CON寄存器的配置如下:

T0CS:选择定时器/计数器的时钟源(0=内部时钟,1=外部时钟)

T0SE:选择定时器/计数器的计数方式(0=低电平到高电平,1=高电平到低电平)

PSA:预分频器分配(0=预分频器分配给T0,1=预分频器分配给WDT)

T0PS:预分频器设置(000=1:2,001=1:4,…,111=1:256)

T08BIT:选择8位或16位模式(0=16位模式,1=8位模式)

T0GO/DONE:定时器开始/停止(1=开始,0=停止)

中断处理

Timer0可以通过配置INTCON寄存器中的TMR0IE和TMR0IF位来启用和处理中断。下面是一个简单的中断配置示例:

//配置Timer0为定时器模式,内部时钟源,预分频1:256

T0CON=0//T0CS=0,T0PS=111,T08BIT=1,T0GO/DONE=1

//使能全局中断和TMR0中断

INTCON=0//GIE=1,TMR0IE=1,TMR0IF=0

//设置TMR0中断服务例程

voidinterrupthigh_priorityISR(){

if(INTCONbits.TMR0IF){//检查TMR0中断标志

TMR0=0;//重置TMR0寄存器

INTCONbits.TMR0IF=0;//清除中断标志

//在这里添加中断处理代码

}

}

//主程序

voidmain(){

//初始化定时器

TMR0=0;//初始化TMR0寄存器

PIE1=0;//关闭其他外设中断

PIR1=0;//清除其他外设中断标志

T0CON=0//配置Timer0

INTCON=0//使能全局中断和TMR0中断

while(1){

//主程序循环

}

}

实际应用

Timer0可以用于生成精确的延时。下面是一个使用Timer0生成1秒延时的示例:

#includepic18f4520.h

voiddelay_1s(){

TMR0=0;//重置TMR0寄存器

T0CON=0//配置Timer0为内部时钟源,预分频1:256

INTCONbits.TMR0IF=0;//清除中断标志

//计算延时时间

unsignedintcount=0;

while(count256){

while(!INTCONbits.TMR0IF);//等待TMR0中断

TMR0=0;//重置TMR0寄存器

INTCONbits.TMR0IF=0;//清除中断标志

count++;

}

}

voidmain(){

//初始化定时器

T0CON=0//配置Timer0

INTCON=0//使能全局中断和TMR0中断

while(1){

delay_1s();//生成1秒延时

//在这里添加1秒延时后的处理代码

}

}

Timer1

基本配置