基本信息
文件名称:Microchip 系列:PIC18 系列_(6).定时器和计数器.docx
文件大小:24.38 KB
总页数:24 页
更新时间:2025-06-23
总字数:约1.14万字
文档摘要

PAGE1

PAGE1

定时器和计数器

定时器和计数器是PIC18系列单片机中非常重要的外设,它们在许多应用中扮演着关键角色。定时器和计数器可以用来生成精确的时间延迟、测量输入信号的时间间隔、实现脉宽调制(PWM)、计数外部事件等。PIC18系列单片机通常配备多个定时器和计数器模块,包括Timer0、Timer1、Timer2、Timer3和CCP(Capture,Compare,PWM)模块。本节将详细介绍这些定时器和计数器的原理和使用方法,并提供具体的代码示例。

Timer0模块

原理

Timer0是一个8位定时器/计数器模块,可以通过外部时钟或内部时钟进行计数。它具有以下特点:

8位计数器/定时器

可选择内部或外部时钟源

可选择预分频器

可配置为定时器或计数器模式

溢出中断功能

配置

Timer0的配置主要通过三个寄存器:T0CON、TMR0和INTCON来完成。

T0CON寄存器:控制Timer0的工作模式和时钟源。

T0PS[2:0]:预分频器设置

T0CS:时钟源选择

T0SE:计数器模式选择

PSA:预分频器分配选择

T08BIT:8位/16位模式选择

TMR0ON:定时器开启/关闭

TMR0寄存器:存储计数器值。

INTCON寄存器:控制中断使能和中断标志。

TMR0IF:定时器溢出中断标志位

TMR0IE:定时器溢出中断使能位

代码示例

以下是一个使用Timer0生成1秒时间延迟的示例代码。假设主频为20MHz,内部时钟源,预分频器为256。

#includexc.h

#includepic18f4520.h

#define_XTAL_FREQ//定义主频

voidTimer0_Init(){

//设置Timer0为内部时钟源,预分频器为256

T0CON=0

//使能TMR0溢出中断

INTCONbits.TMR0IE=1;

//清除TMR0溢出中断标志

INTCONbits.TMR0IF=0;

//启动Timer0

T0CONbits.TMR0ON=1;

}

void__interrupt()Timer0_ISR(){

//清除TMR0溢出中断标志

INTCONbits.TMR0IF=0;

//重新加载TMR0初始值

TMR0=116;//256-116=140,140*256*4us=140us*256*4us=1s

}

voidmain(){

//配置Timer0

Timer0_Init();

//使能全局中断

INTCONbits.GIE=1;

//主循环

while(1){

//等待中断

}

}

说明

T0CON设置:

T0CON寄存器的T0CS位设置为0,表示使用内部时钟源。

T0PS[2:0]位设置为100,表示预分频器为256。

TMR0ON位设置为1,启动Timer0。

中断配置:

INTCONbits.TMR0IE设置为1,使能TMR0溢出中断。

INTCONbits.TMR0IF设置为0,清除TMR0溢出中断标志。

中断服务例程(ISR):

在ISR中,清除TMR0溢出中断标志TMR0IF。

重新加载TMR0初始值116,以生成1秒的时间延迟。

Timer1模块

原理

Timer1是一个16位定时器/计数器模块,通常用于需要更长计数时间的应用。它具有以下特点:

16位计数器/定时器

可选择内部或外部时钟源

可选择预分频器

可配置为定时器或计数器模式

溢出中断功能

配置

Timer1的配置主要通过四个寄存器:T1CON、TMR1H、TMR1L和PIR1来完成。

T1CON寄存器:控制Timer1的工作模式和时钟源。

T1CKPS[1:0]:预分频器设置

T1OSCEN:振荡器使能

T1SYNC:同步控制

T1SS:时钟源选择

T1RUN:运行模式选择

TMR1ON:定时器开启/关闭

TMR1H和TMR1L寄存器:存储计数器值的高8位和低8位。

PIR1寄存器:控制中断使能和中断标志。

TMR1IF:定时器溢出中断标志位

TMR1IE:定时器溢出中断使能位

代码示例

以下是一个使用Timer1生