首页 理论教育 定时/计数器T2的应用-单片机原理与接口技术

定时/计数器T2的应用-单片机原理与接口技术

时间:2023-11-16 理论教育 版权反馈
【摘要】:例5-14:自动重装方式设单片机系统时钟频率fOSC为12MHz,使用定时器/计数器T2工作方式于自动重装方式,请编写程序使得在P1.6引脚上输出周期为2ms,占空比为50%的方波信号。确定定时/计数器T2中断服务子程序入口地址确定定时/计数器T2中断服务子程序入口地址为002BH。

定时/计数器T2的应用-单片机原理与接口技术

例5-14:自动重装方式

单片机系统时钟频率fOSC为12MHz,使用定时器/计数器T2工作方式于自动重装方式,请编写程序使得在P1.6引脚上输出周期为2ms,占空比为50%的方波信号

解:设计步骤如下。

(1)求定时初值

设置定时/计数器T2为16位自动重装载方式,工作模式为定时,选择向上计数,即DCEN=0,取EXEN2=0,定时器T2为向上计数至0FFFFH溢出,置位TF2激活中断,TF2需软件清0。

(x)补=216-1ms/1μs=65536-1000=64536=FC18H

(2)确定特殊功能寄存器T2CON、T2MOD值

T2CON=04H(自动重新装入CP/RL2=0、定时C/T2=0,启动T2工作TR2=1),T2MOD=00H(向上计数DCEN=0,T2时钟输出不使能,即T2OE=0)。

(3)确定定时/计数器T2中断服务子程序入口地址

确定定时/计数器T2中断服务子程序入口地址为002BH。

(4)编写主程序和中断服务子程序

T2CON EQU 0C8H;定义T2CON寄存器字节地址为C8H

T2MOD EQU 0C9H;定义T2MOD寄存器地址为C9H

TF2 EQU T2CON.7;定义定时/计数器2计数溢出标志位

ET2 EQU IE.5;定义定时/计数器2中断允许标志位

RCAP2L EQU 0CAH;定义RCAP2L寄存器字节地址为CAH

RCAP2H EQU 0CBH;定义RCAP2H寄存器字节地址为CBH

TL2 EQU 0CCH;定义TL2寄存器字节地址为CCH

TH2 EQU 0CDH;定义TH2寄存器字节地址为CDH

IPH EQU 0B7H;定义IPH寄存器字节地址为B7H

ORG 0000H

AJMP MAIN

ORG 002BH;定时/计数器2中断入口地址

LJMP PT2INT

ORG 0100H

MAIN:MOV SP,#60H;设置堆栈

MOV T2MOD,#00H;置T2向上计数且时钟输出不使能

MOV T2CON,#04H;置T2自动重装载定时且启动T2

MOV TH2,#0FCH;装载定时器2的定时初值

MOV TL2,#18H

MOV RCAP2L,#18H

MOV RCAP2H,#0FCH

MOV IE,#0A0H;允许T2中断,EA允许

MOV IP,#20H;置T2为第4级中断优先级

MOV IPH,#20H

SETB P1.6;预置P1.6=1

HERE:SJMP HERE;踏步等待中断

PT2INT:CLR TF2;清计数溢出标志

CPL P1.6;P1.6输出求反

RETI

END

例5-15:捕获方式

设单片机系统时钟频率为12MHz,T2工作方式为捕获方式,将捕获的计数值低8位送P3口,高8位送P2口,用频率仪和示波器观察P1.1引脚捕获脉冲频率值和波形。

设计步骤:据题意知T2工作方式为捕获方式,T2CON中EXEN2选择两种选项,此处选择EXEN2=1,即外部捕获,选定时模式,选择向上计数,即DCEN=0。

捕获脉冲:利用T0定时工作方式1,使P1.5输出周期为2ms的方波,该方波接入到P1.1引脚作为捕获脉冲。

解:(1)求定时初值

为了捕获P1.1引脚脉冲频率值,利用P1.1引脚负跳变触发定时器T2外部中断,第一次中断时,启动定时器T2开始计数。此时定时器T2的最初计数值为0,即TH2=00H,TL2=00H,而此时捕获值RCAP2L=00H,RCAP2H=00H、到第二次中断时,禁止定时器T2计数,此时捕获寄存器内容就是记录机器周期个数,可求出输出脉冲频率值。

T0选择定时工作方式1,输出周期为2ms方波,则定时器0的初值为TH0=0FCH,TL0=18H。

T2采用外部捕获,则T2CON=09H,T2选择的是向上计数,则T2MOD=00H。允许T2中断请求,允许总中断,则IE=A0H;T0工作方式1、定时、门控GATE0=0,则TMOD=01H。

(2)程序清单

程序由4部分组成:主程序、显示子程序、定时器0中断服务子程序和定时器2中断服务子程序。具体如下:

T2CON EQU 0C8H

T2MOD EQU 0C9H

CP EQU T2CON.0

TR2 EQU T2CON.2

EXEN2 EQU T2CON.3

EXF2 EQU T2CON.6

TF2 EQU T2CON.7

ET2 EQU IE.5

RCAP2L EQU 0CAH(www.xing528.com)

RCAP2H EQU 0CBH

TL2 EQU 0CCH

TH2 EQU 0CDH

IPH EQU 0B7H

ORG 0000H

AJMP MAIN

ORG 000BH

LJMP PT0INT

ORG 002BH

LJMP PT2INT

ORG 0100H

MAIN:MOV SP,#60H

MOV TMOD,#01H;T0定时,工作方式1

MOV TH0,#0FCH;T0定时初值

MOV TL0,#18H

SETB TR0;启动定时器0

MOV T2MOD,#00H;定时/计数器2加法计数

MOV T2CON,#09H;T2捕获方式定时允许外部信号触发

MOV TH2,#00H;定时器2计数寄存器初值

MOV TL2,#00H

MOV RCAP2L,#00H;设置捕获寄存器计数初值

MOV RCAP2H,#00H

MOV IE,#0A2H;T0、T2中断允许,总允许

CLR 20H.0;设置中断次数标志

CLR 20H.1;设置捕获值大于量程标志

LOOP:ACALL DISP

AJMP LOOP

/**********显示子程序**********/

DISP:MOV C,20H.1

JC NEQUT;查询捕获值是否大于量程?

MOV P2,RCAP2H;捕获值小于量程,显示捕获值

MOV P3,RCAP2L

RET

NEQUT:MOV P2,#0FFH;捕获值大于量程,则显示FFFFH

MOV P0,#0FFH

RET

/**********定时器0中断服务子程序**********/

PT0INT:MOV TH0,#0FCH;定时器0重装计数初值

MOV TL0,#18H

CPL P1.5;P1.5求反,使P1.5输出方波

RETI

/**********定时器2中断服务子程序**********/

PT2INT:CLR P1.7;点亮P1.7,表明进入T2中断服务程序

JBC TF2,PTF2;定时溢出引起中断?

JBC EXF2,PEXF2;P1.1负跳变引发中断吗?

RETI

PEXF2:MOV C,20H.0;P1.1引脚负跳变引起中断,中断标志位送C

JC TT2;判断第一中断吗?Cy=0?

SETB TR2;第一次中断,启动定时器2计数

SETB 20H.0;中断次数标志置1

RETI

TT2:CLR TR2;第二次中断,定时器2停止计数

CLR 20H.0;中断次数标志清0

CLR EXEN2;T2的外部使能位清0

ESC:RETI

PTF2:MOV TH2,RCAP2H;溢出中断,重装计数初值

MOV TL2,RCAP2L

SETB 20H.1;置捕获脉冲宽度大于量程标志位

RETI

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈