单片机原理及接口技术(C51编程)定时器计数器的工作原理及应用

合集下载

单片机定时器工作原理

单片机定时器工作原理

单片机定时器工作原理
单片机定时器是一种用于产生精确的时间延迟的功能模块,它的工作原理是通过使用计数器、时钟源以及相关的配置寄存器来实现。

首先,定时器通过计数器来执行计数操作。

计数器可以根据配置的时钟源不断地递增计数值,通常使用系统时钟作为输入时钟源。

其次,定时器会根据用户设置的计数值来确定定时器运行的时间。

当计数值达到设定的值时,定时器就会产生一个中断信号,这个中断信号可以被单片机的中断系统响应并执行相应的中断服务程序。

定时器中的配置寄存器用于存储用户设置的计数值以及其他一些定时器的工作参数。

通过对配置寄存器的设置,用户可以灵活地调整定时器的工作方式,从而满足不同的应用需求。

定时器在单片机中广泛应用于各种场景,比如时间测量、周期性任务的执行等。

通过定时器,单片机可以实现精确的时间控制和事件触发,并能够提高系统的实时性和可靠性。

80c51单片机定时器计数器工作原理

80c51单片机定时器计数器工作原理

80c51单片机定时器计数器工作原理80C51单片机是一种常用的微控制器,其定时器/计数器(Timer/Counter)是实现定时和计数功能的重要组件。

以下简要介绍80C51单片机定时器/计数器的工作原理:1. 结构:定时器/计数器由一个16位的加法器构成,可以自动加0xFFFF(即65535)。

定时器/计数器的输入时钟可以来自系统时钟或外部时钟源。

2. 工作模式:定时模式:当定时器/计数器的输入时钟源驱动加法器不断计数时,可以在达到一定时间后产生中断或产生其他操作。

计数模式:当外部事件(如电平变化)发生时,定时器/计数器的输入引脚可以接收信号,使加法器产生一个增量,从而计数外部事件发生的次数。

3. 定时常数:在定时模式下,定时常数(即定时时间)由预分频器和定时器/计数器的初值共同决定。

例如,如果预分频器设置为1,定时器/计数器的初值为X,那么实际的定时时间 = (65535 - X) 预分频系数输入时钟周期。

在计数模式下,定时常数由外部事件发生的时间间隔决定。

4. 溢出和中断:当加法器达到65535(即0xFFFF)时,会产生溢出,并触发中断或其他操作。

中断处理程序可以用于执行特定的任务或重置定时器/计数器的值。

5. 控制寄存器:定时器/计数器的操作可以通过设置相关的控制寄存器来控制,如启动/停止定时器、设置预分频系数等。

6. 应用:定时器/计数器在许多应用中都很有用,如时间延迟、频率测量、事件计数等。

为了充分利用80C51单片机的定时器/计数器功能,通常需要根据实际应用需求配置和控制相应的寄存器,并编写适当的软件来处理定时器和计数器的操作。

C51单片机定时计数器应用编程归纳总结

C51单片机定时计数器应用编程归纳总结

C51 T and C● 80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。

● 对外部事件脉冲(下降沿)计数,是计数器;对片内机周脉冲计数,是定时器。

● 计数器由二个8位计数器组成。

● 定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。

调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。

● 定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚Tx(P3.4、P3.5)输入。

且外部脉冲的最高频率不能超过时钟频率的1/24一、定时/计数器的结构定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。

TMOD 是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON 是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

二、定时/计数器的工作原理加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。

每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON 中TF0或TF1置1,向CPU 发出中断请求(定时/计数器中断允许时)。

如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。

可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。

设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。

计数值N 乘以机器周期Tcy 就是定时时间t 。

设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。

在每个机器周期的S5P2期间采样T0、T1引脚电平。

当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。

由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。

单片机中的定时器与计数器的原理与应用

单片机中的定时器与计数器的原理与应用

单片机中的定时器与计数器的原理与应用在单片机中,定时器和计数器是两种常见的功能模块,它们在各种应用中都扮演着非常重要的角色。

本文将对单片机中定时器与计数器的原理和应用进行详细的介绍。

一、定时器的原理与应用定时器是单片机中的一种计时功能模块,它可以在一定的时间间隔内产生一个中断信号,用于控制各种时间相关的任务。

定时器一般由一个计数器和一个控制逻辑组成,计数器用于计数,控制逻辑用于设置计数器的初值、控制计数器的计数方式以及处理定时器中断等功能。

定时器在单片机中有各种不同的应用,例如用于控制LED的闪烁频率、控制蜂鸣器的鸣叫时间、测量外部信号的脉冲宽度等。

通过合理地设置定时器的初值和工作模式,可以实现各种复杂的定时功能。

二、计数器的原理与应用计数器是单片机中另一种常见的功能模块,它可以实现对外部信号的计数和测频等功能。

计数器一般由一个计数寄存器和一个控制逻辑组成,计数寄存器用于记录计数值,控制逻辑用于设置计数器的计数方式、清零计数器以及处理计数器溢出等功能。

计数器在单片机中也有广泛的应用,例如用于计算外部脉冲的频率、测量两个信号之间的时间间隔、实现车辆流量统计等。

通过合理地设置计数器的工作模式和计数方式,可以实现各种计数功能。

三、定时器与计数器的联合应用定时器和计数器在单片机中经常会联合应用,以实现更加复杂和精密的定时计数功能。

例如,可以使用定时器来生成一个固定时间间隔的中断信号,然后在中断服务程序中通过计数器来计数外部脉冲的个数,从而实现对外部脉冲的精确计数。

通过合理地运用定时器和计数器,可以实现各种高级的时间计数功能,使单片机在实际应用中发挥更大的作用。

综上所述,定时器和计数器是单片机中非常重要的功能模块,它们在各种应用中都有着广泛的应用。

合理地掌握定时器和计数器的原理和应用,可以为单片机的开发和应用带来极大的便利。

希望通过本文的介绍,读者能够更加深入地了解单片机中定时器与计数器的原理与应用。

单片机原理及接口技术

单片机原理及接口技术

单片机原理及接口技术单片机(Microcontroller)是一种集成了微处理器核心、存储器、输入/输出端口和定时器等功能于一体的计算机系统。

它具有成本低廉、体积小巧、功耗低等优点,广泛应用于各个领域。

本文将介绍单片机的原理及接口技术。

一、单片机原理1. 单片机的组成结构单片机通常由CPU、存储器、输入/输出口、定时/计数器、中断系统等组成。

其中,CPU是单片机的核心,负责执行程序指令;存储器用于存储程序和数据;输入/输出口用于与外部设备进行数据交互;定时/计数器用于计时和计数;中断系统可以处理外部事件。

2. 单片机的工作原理单片机工作时,先从存储器中加载程序指令到CPU的指令寄存器中,然后CPU执行指令并根据需要从存储器中读取数据进行计算和操作,最后将结果写回存储器或输出到外部设备。

3. 单片机的编程语言单片机的程序可以使用汇编语言或高级语言编写。

汇编语言是一种低级语言,直接使用机器码进行编程,对硬件的控制更加精细,但编写和调试难度较大。

而高级语言(如C语言)可以将复杂的操作用简单的语句描述,易于编写和阅读,但对硬件的控制相对较弱。

二、单片机的接口技术1. 数字输入/输出接口(GPIO)GPIO是单片机与外部设备进行数字信号交互的通道。

通过配置GPIO的输入或输出状态,可以读取外部设备的状态或者输出控制信号。

GPIO的配置包括引脚的模式、电平状态和中断功能等。

应根据具体需求合理配置GPIO,以实现与外部设备的稳定通信。

2. 模拟输入/输出接口单片机通常具有模数转换器(ADC)和数模转换器(DAC),用于模拟信号的输入和输出。

ADC将模拟信号转换为数字信号,以便单片机进行处理。

而DAC则将数字信号转换为模拟信号,用于驱动模拟设备。

模拟输入/输出接口的配置需要考虑转换精度、采样率和信噪比等因素。

3. 串行通信接口串行通信接口允许单片机与其他设备进行数据交换。

常见的接口包括UART(通用异步收发器)、SPI(串行外设接口)和I2C(串行外设接口),它们具有不同的通信速率和传输协议。

单片机计数器,定时器工作原理_

单片机计数器,定时器工作原理_
TH0高8位
模= 1FFFH+1
=2 13
TL0低5位
1
1
1
1
1
1
0
0
X X X 1
1
1
0
0
用指令装入初值: MOV TH0,#0FCH; MOV TL0,#1CH;(xxx用‘0’填入) 方式1 (16位方式): 初值=(-64H)=10000H-64H=FF9CH 用指令装入计数初值: MOV TH0,#0FFH MOV TL0,#9CH
5-24
中断方式 ORG 0000H AJMP MAIN ;单片机复位后从0000H开始执行 ORG 001BH ;T1中断入口 AJMP TIME1 ;转到T1 中断服务程序
ORG 0030H ;主程序 MAIN:MOV A,#01H MOV P1,A ;置初值,第一个LED亮 MOV TMOD,#10H ;T1工作于定时方式1 MOV TH1,#3CH MOV TL1,#0B0H ;定时100ms SETB EA SETB TR1 SETB ET1 WAIT:SJMP WAIT ;中断总允许 ;启动T1工作 ;允许T1中断 ;等待中断
这种情况下,T1仍可工作于方式0、1、2,但不能使用中 断方式。 只有将T1用做串行口的波特率发生器时,T0才工作在方式 3,以便增加一个定时器。
5-16
4、方式3 M1M0=11
1/12fosc
K °
仅适用于T0
定时/计数器0(方式3):2个8位计数器。
振荡源 ÷ 12 C/ T=0 ° S ° C/ T=1 ≥1 °
5-22
分析 : 利用T1完成100ms的定时,当P1口线输出‘1’时, 发光二极管亮,每隔100ms,‘1’左移一次。

51单片机的定时器_计数器的C51编程

51单片机的定时器_计数器的C51编程

51单片机的定时器_计数器的C51编程相关知识点:1、单片机的定时器/计数器,实质是按一定时间间隔、自动在系统后台进行计数的。

2、当被设定工作在定时器方式时,自动计数的间隔是机器周期(12个晶振振荡周期),即计数频率是晶振振荡频率的1/12;3、当定时器被启动时,系统自动在后台,从初始值开始进行计数,计数到某个终点值时(方式1时是65535),产生溢出中断,自动去运行定时中断服务程序;注意,整个计数、溢出后去执行中断服务程序,都是单片机系统在后台自动完成的,不需要人工干预!4、定时器的定时时间,应该是(终点值-初始值)x机器周期。

对于工作在方式1和12MHz时钟的单片机,最大的计时时间是(65535-0)x1uS=65.535ms。

这个时间也是一般的51单片机定时器能够定时的最大定时时间,如果需要更长的定时时间,则一般可累加多定时几次得到,比如需要1秒的定时时间,则可让系统定时50ms,循环20次定时就可以得到1s的定时时间。

5、定时器定时得到的时间,由于是系统后台自动进行计数得到的,不受主程序中运行其他程序的影响,所以相当精确;6、使用定时器,必须先用TMOD寄存器设定T0/T1的工作方式,一般设定在方式1的情况比较多,所以可以这样设定:TMOD=0x01(仅设T0为方式1,即16位)、TMOD=0x10(仅设T1为方式1,即16位)、TMOD=0x11(设T0和T1为方式1,即都为16位)。

7、使用定时器,必须根据需要的定时时间,装载相应的初始值,而且在中断服务程序中,很多情况下得重新装载初始值,否则系统会从零开始计数而引起定时失败;8、要使用定时器前,还必须打开总中断和相应的定时中断,并启动之:EA=1(开总中断)、ET0=1(开定时器0中断)、TR0=1(启动定时器0)、ET1=1(开定时器1中断)、TR1=1(启动定时器1);9、注意中断服务程序尽可能短小精干,不要让它完成太多任务,尤其尽量避免出现长延时,以提高系统对其他事件的响应灵敏度.//定时器基本例程-1(未使用定时器,一个灯每隔500ms亮灭一次)//这是个特意安排的例程,以便与下面的例程2进行对比#include <reg52.h>sbit led=P2^7;void delay_ms(unsigned int xms); //ms级延时子程序//=================================================void main(){led=1; //上电初始化,led灯不亮while(1){led=!led;delay_ms(500);}}//=================================================void delay_ms(unsigned int xms) //ms级延时子程序{ unsigned int x,y;for(x=xms;x>0;x--)for(y=130;y>0;y--);}//-------------------------------------------------//定时器基本例程-2(使用定时器,一个灯每隔500ms亮灭一次)#include <reg52.h>sbit led=P2^7;unsigned char num;void delay_ms(unsigned int xms); //ms级延时子程序//=================================================void main(){led=1; //上电初始化,led灯不亮TMOD=0x01; //设定定时器0为工作方式1TH0=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256; //EA=1; //开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器0while(1){delay_ms(8000);}}//=================================================void delay_ms(unsigned int xms) //ms级延时子程序{ unsigned int x,y;for(x=xms;x>0;x--)for(y=130;y>0;y--);}//-------------------------------------------------void led_flash() interrupt 1 //使用了定时中断0的led闪烁子函数{ TH0=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000 TL0=(65536-50000)%256; //num++;if(num==10){num=0;led=!led;}}////定时器基本例程-3//(使用定时器T1,单片机整个口接的8个灯每隔500ms亮灭一次)#include <reg52.h>#define led_port P0 //宏定义,具体的端口尽量不要出现在主函数和主函数中unsigned char num;void delay_ms(unsigned int xms); //ms级延时子程序//=================================================void main(){led_port=0xff; //上电初始化,所有led灯不亮TMOD=0x10; //设定定时器1为工作方式1(16位方式)TH1=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; //EA=1; //开总中断ET1=1; //开定时器1中断TR1=1; //启动定时器1while(1){delay_ms(8000); //这句表明定时中断的运行是在系统后台自动运行的,不需要主函数“操心”}}//=================================================void delay_ms(unsigned int xms) //ms级延时子程序{ unsigned int x,y;for(x=xms;x>0;x--)for(y=130;y>0;y--);}//-------------------------------------------------void led_flash() interrupt 3 //使用了定时中断1的8灯闪烁子函数{ TH1=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; //num++; //计数if(num==10) //计够10次,时间就是10x50ms=500ms{num=0; //清零,以便进行下一次500ms的10次计数led_port=~led_port; //整个口接的led灯亮灭状态翻转}}//-------------------------------------------------//定时器基本例程-4//(同时使用定时器T0和定时器T1,单片机某个口的灯和某个口接的8个灯每隔500ms亮灭一次)#include <reg52.h>sbit led=P2^7;#define led_port P0 //宏定义,具体的端口尽量不要出现在主函数和主函数中unsigned char num_0,num_1;void delay_ms(unsigned int xms); //ms级延时子程序//=================================================void main(){led=1; //上电初始化,led灯不亮led_port=0xff; //上电初始化,该口所有led灯不亮TMOD=0x11; //设定定时器0和定时器1都为工作方式1(16位方式)TH0=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256; //TH1=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; //EA=1; //开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器0ET1=1; //开定时器1中断TR1=1; //启动定时器1while(1){delay_ms(8000); //这句表明定时中断的运行是在系统后台自动运行的,不需要主函数“操心”}}//=================================================void delay_ms(unsigned int xms) //ms级延时子程序{ unsigned int x,y;for(x=xms;x>0;x--)for(y=130;y>0;y--);}//-------------------------------------------------void led_flash() interrupt 1 //使用了定时中断0的led闪烁子函数{ TH0=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256; //num_0++; //计数if(num_0==10) //计够10次,时间就是10x50ms=500ms{num_0=0; //清零,以便进行下一次500ms的10次计数led=!led; //led灯亮灭状态翻转}}//-------------------------------------------------void led_all_flash() interrupt 3 //使用了定时中断1的8灯闪烁子函数{ TH1=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; //num_1++; //计数if(num_1==10) //计够10次,时间就是10x50ms=500ms{num_1=0; //清零,以便进行下一次500ms的10次计数led_port=~led_port; //整个口接的led灯亮灭状态翻转}}//-------------------------------------------------//定时器基本例程-5//设定定时器T0工作在方式1的计数应用状态,//单片机T0口(P3.4)接一个按键充当外部脉冲源,//系统对进来的脉冲(每按一次键得一脉冲)进行计数,//计数的结果用接在单片机P0口的8个LED灯表示出来//(大家也可以改成用1602LCD来显示,这样更直观)//广西民大物电学院李映超2010年4月14日#include <reg52.h>#define led_port P0 //宏定义,具体的端口尽量不要出现在主函数和主函数中//=================================================void main(){TMOD=0x05; //设定定时器0为工作方式1、计数器TH0=0; //清零TL0=250; //TR0=1; //启动定时器0进行计数while(1){led_port=TL0; //将计数结果送去显示(用8个LED灯显示),//这里仅显示16位计数器的低8位}}定时器0仍旧工作在计数器状态,增加定时器1工作在定时状态,得到1s的定时时间,定时时间到后,将定时器0计数得到的脉冲数去显示,则这个脉冲数就是所输入的外部信号的频率,从而构成一个简单而准确的频率计!!不过,这个简单的“频率计”能够计量的信号频率(脉冲数),受单片机中断响应速度的影响,一般只能达到单片机系统时钟晶振的1/24,所以要能够测量更高的频率,必须使用前置分频器,对更高频率的待测输入信号进行预分频!。

单片机原理及接口技术(C51编程)(第2版)-习题答案 - 第7章习题解答

单片机原理及接口技术(C51编程)(第2版)-习题答案 - 第7章习题解答

第7章思考题及习题7参考答案一、填空1.如果采用晶振的频率为3MHz,定时器/计数器T x(x=0,1)工作在方式0、1、2下,其方式0的最大定时时间为,方式1的最大定时时间为,方式2的最大定时时间为。

答:32.768ms,262.144ms,1024µs2.定时器/计数器用作计数器模式时,外部输入的计数脉冲的最高频率为系统时钟频率的。

答:1/243.定时器/计数器用作定时器模式时,其计数脉冲由提供,定时时间与有关。

答:系统时钟信号12分频后,定时器初值4.定时器/计数器T1测量某正单脉冲的宽度,采用方式可得到最大量程?若时钟频率为6MHz,求允许测量的最大脉冲宽度为。

答:方式1定时,131.072ms。

5. 定时器T2 有3种工作方式:、和,可通过对寄存器中的相关位进行软件设置来选择。

答:捕捉,重新装载(增计数或减计数),波特率发生器,T2CON6. AT89S52单片机的晶振为6MHz,若利用定时器T1的方式1定时2ms,则(TH1)= ,(TL1)= 。

答:FCH,18H。

二、单选1.定时器T0工作在方式3时,定时器T1有种工作方式。

A.1种B.2种 C.3种D.4种答:C2. 定时器T0、T1工作于方式1时,其计数器为位。

A.8位B.16位C.14位D.13位答:B3. 定时器T0、T1的GATE x=1时,其计数器是否计数的条件。

A. 仅取决于TR x状态B. 仅取决于GATE位状态C. 是由TR x和INT x两个条件来共同控制D. 仅取决于INT x的状态答:C4. 定时器T2工作在自动重装载方式时,其计数器为位。

A.8位B. 13位C.14位D. 16位答:D5. 要想测量INT0引脚上的正单脉冲的宽度,特殊功能寄存器TMOD的内容应为。

A.87HB. 09HC.80HD. 00H答:B三、判断对错1.下列关于T0、T1的哪些说法是正确的。

A.特殊功能寄存器SCON,与定时器/计数器的控制无关。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计数器模式是对加在T0(P3.4)和T1(P3.5)两个引 脚上的外部脉冲进行计数(见图7-1);
定时器模式是对系统时钟信号经12分频后的内部脉冲信 号(机器周期)计数。由于系统时钟频率是定值,可根据计 数值计算出定时时间。两个定时器/计数器属于增1计数器, 即每计一个脉冲,计数器增1。
7.1 定时器/计数器的结构
C/T*=0,定时器模式,对系统时钟12分频后的脉冲 进行计数。
C/T*=1,计数器模式,计数器对外部输入引脚T0 (P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。
7.1.2 定时器/计数器控制寄存器TCON
TCON字节地址88H,位地址为88H~8FH。格式见 图7-3。
图7-3 TCON格式
图7-2中,C/T*位控制电子开关决定2种工作模式。
C/T*=0,电子开关打在上面,T1(或T0)为定时器 工作模式,系统时钟12分频后的脉冲作为计数信号。
C/T*=1,电子开关打在下面,T1(或T0)为计数器工 作模式,对P3.5(或P3.4)引脚上的外部输入脉冲计 数,当引脚上发生负跳变时,计数器加1。
GATE=1,定时器是否计数,由外中断引脚INTx* 上 的电平与运行控制位TRx共同控制。
7.1.1 工作方式控制寄存器TMOD
(2)M1、M0—工作方式选择位 M1、M0 4种编码,对应于4种工作方式的选择,见表7-1。
表7-1 M1、M0工作方式选择
7.1.1 工作方式控制寄存器TMOD
(3)C/T* —计数器模式和定时器模式选择位
图7-5 方式1的逻辑结构框图
7.2.2 方式1
方式1和方式0差别仅仅 在于计数器的位数不同,方 式1为16位计数器,由THx高 8位和TLx低8位构成(x = 0, 1),方式0则为13位计数器, 有关控制状态位含义(GATE、 C/T* 、TFx、TRx)与方式0 相同。
7.2.3 方式2
方式0和方式1最大特点是计数溢出后,计数器为全0。 因此在循环定时或循环计数应用时就存在用指令反复装入计 数初值的问题,这会影响定时精度,方式2就是为解决此问 题而设置的。
7.5 AT89S52新增定时器/计数器T2简介
7.2.1 方式0
当M1、M0=00,设置为方式0,定时器/计数器等效 逻辑结构见图7-4(以T1为例,TMOD.5、TMOD.4 = 00)。
图7-4 定时器/计数器方式0的逻辑结构框图
7.2.1 方式0
方式0为13位计数器,由TLx(x = 0,1)的低5位和THx 的高8位构成。TLx低5位溢出则向THx进位,THx计数溢出则 把TCON中的溢出标志位TFx置“1”。
第7章
定时器/计数器的工作原理及应用
单片机原理及接口技术(C51编程)
7.1 定时器/计数器的结构
ቤተ መጻሕፍቲ ባይዱ
7.2 定时器/计数器的4种工作方式
CONTENTS

7.3 对外部输入的计数信号的要求

7.4 定时器/计数器的编程和应用
7.5 AT89S52新增定时器/计数器T2简介
7.1 定时器/计数器的结构
7.1.2 定时器/计数器控制寄存器TCON
第6章已介绍与外中断有关的低4位。这里仅介绍高4位 功能。
(1)TF1、TF0—计数溢出标志位
当计数器计数溢出时,该位置“1”。使用查询方式时, 此位可供CPU查询,但应注意查询后,用软件及时将该位 清“0”。使用中断方式时,作为中断请求标志位,进入中 断服务程序后由硬件自动清“0”。
7.2.1 方式0
GATE位状态决定定时器/计数器运行控制取决于TRx一 个条件,还是取决于TRx和INTx*引脚状态两个条件。
GATE=0时,A点(见图7-4)电位恒为1,B点电位仅 取决于TRx状态。TRx=1,B点为高电平,控制端控制 电子开关闭合,允许T1(或T0)对脉冲计数。TRx=0, B点为低电平,电子开关断开,禁止T1(或T0)计数。
T0、T1具有4种工作方式(方式0、1、2和3)。 图 7-1特殊功能寄存器TMOD用于选择定时器/计数器 T0、T1的工作模式和工作方式。特殊功能寄存器TCON用于 控制T0、T1的启动和停止计数,同时包含了T0、T1状态。 计数器起始计数从初值开始。单片机复位时计数器初值 为0,也可给计数器装入1个新的初值。
AT89S51定时器/计数器结构见图 7-1,定时器/计数器T0 由特殊功能寄存器TH0、TL0构成,T1由特殊功能寄存器 TH1、TL1构成。
图7-1 定时器/计数器结构框图
7.1 定时器/计数器的结构
T0、T1都有定时器和计数器两种工作模式,两种模式 实质都是对脉冲信号进行计数,只不过计数信号来源不同。
7.1.1 工作方式控制寄存器TMOD
TMOD用于选择定时器/计数器的工作模式和工作方式, 字节地址为89H,不能位寻址,格式见图7-2。
图7-2 寄存器TMOD格式
8位分两组,高4位控制T1,低4位控制T0。 TMOD各位说明如下。
7.1.1 工作方式控制寄存器TMOD
(1)GATE—门控位
GATE=0,定时器是否计数,由控制位TRx(x = 0, 1)来控制。
GATE=1时,B点电位由INTx*(x = 0,1)的电平和TRx的 状态两个条件来确定。当TRx=1,且INTx* =1时,B点才为 1,电子开关闭合,允许T1(或T0)计数。故这种情况下计 数器是否计数是由TRx和INTx*两个条件来共同控制的。
7.2.2 方式1
当M1、M0=01时,工作于方式1,等效电路逻辑结构 见图7-5。
当M1、M0=10时,工作方式2,等效逻辑结构见图76(以T1为例,x=1)。
7.2.3 方式2
图7-6 方式2逻辑结构框图
7.2.3 方式2
工作方式2为自动恢复 初值(初值自动装入)的8 位定时器/计数器,TLx (x=0,1)作为常数缓冲 器,当TLx计数溢出时,在 溢出标志TFx置“1”的同 时,还自动将THx中的初值 送至TLx,使TLx从初值开 始重新计数。定时器/计数 器方式2工作过程见图7-7。
(2)TR1、TR0—计数运行控制位
TR1位(或TR0)=1,启动计数器计数的必要条件。 TR1位(或TR0)=0,停止计数器计数。 该位可由软件置“1”或清“0”。
7.1 定时器/计数器的结构
7.2 定时器/计数器的4种工作方式
CONTENTS

7.3 对外部输入的计数信号的要求

7.4 定时器/计数器的编程和应用
相关文档
最新文档