第6章 AT89C51的定时器计数器

合集下载

第6章AT89C51定时器计数器

第6章AT89C51定时器计数器
用12MHz频率的晶体 ,则可输入500KHz的外部脉冲。 输入信号的高 、低电平至少要保持一个机器周期 。如图6- 12
所示 , 图中Tcy为机器周期。
图6- 12
6.4 定时器/计数器的编程和应用 4种工作方式中 ,方式0与方式1基本相同 , 由于方式0是为兼容
MCS-48而设 ,初值计算复杂 ,在实际应用中 ,一般不用方式 0 ,而采用方式1。 6.4. 1 方式1应用 例6- 1 假设系统时钟频率采用6MHz ,要在P1.0上输出一个周期 为2ms 的方波 ,如图6- 13所示。
M1 、M0=01 , 16位的计数器。
图6-5 6.2.3 方式2 计数满后自动装入计数初值。
M1 、M0= 10 ,等效框图如下:
图6-6
TLX作为常数缓冲器 , 当TLX计数溢出时 ,在置“ 1 ”溢出标志 TFX的同时 ,还自动的将THX中的初值送至TLX ,使TLX从初 值开始重新计数。
定时器/计数器的方式2工作过程如图6-7 (X=0, 1) 。
图6-7 省去用户软件中重装初值的程序 ,来精确定时。
6.2.4 方式3 增加一个附加的8位定时器/计数器 , 从而具有3个定时器/计数
器。
只适用于定时器/计数器T0 。T1不能工作在方式3 。 T1方式3时相当于TR1=0 ,停止计数(此时T1可用来作串行口
图6-8( a)
图6-8(b)
2. T0工作在方式3下T1的各种工作方式 当T1用作串行口的波特率发生器时 , T0才工作在方式3 。 T0为方式3时 , T1可定为方式0 、方式1和方式2 ,用来作为串
行口的波特率发生器 , 或不需要中断的场合。 ( 1)T1工作在方式0
图6-9
(2) T1工作在方式1

基于AT89C51单片机的计数器设计

基于AT89C51单片机的计数器设计

基于AT89C51单片机的计数器设计
计数器是一种常见的电子设备,用于实现对输入信号的计数。

基于AT89C51单片机的计数器设计,可以实现对输入信号的计数,并且可以将计数结果显示出来。

我们需要准备以下器件和材料:
1. AT89C51单片机:这是一款8位微控制器,具有丰富的输入输出功能。

2. 数码管:用于显示计数结果。

3. 按钮开关:用于输入计数信号。

接下来,我们可以按照以下步骤进行计数器的设计。

1. 连接电路:将数码管和按钮开关分别与AT89C51单片机的IO口相连。

数码管的引脚与单片机的IO口相连,按钮开关一个端接地,另一个端接单片机的IO口。

2. 编写程序:使用汇编语言或C语言编写单片机的程序。

可以使用单片机的计时器中断来实现计数功能。

在程序中,首先需要初始化单片机,并将IO口设置为输入或输出。

3. 实现计数功能:在程序中,通过判断按钮开关的状态,来决定是否对计数器进行加一或减一操作。

当按钮开关按下时,将计数器加一或减一,并将计数结果显示在数码管上。

4. 程序调试:将程序下载到单片机上,并连接电源。

通过按下按钮开关,观察数码管上计数结果的变化,可以判断程序的正确性。

如果发现计数结果不正确,可以通过调试程序来解决问题。

5. 优化设计:根据实际需求,可以对计数器的功能进行优化。

可以增加清零按钮,用于将计数器清零;可以增加计数范围限制,当计数器达到上限或下限时,禁止继续计数。

AT89C51定时计数器T0作定时应用技术

AT89C51定时计数器T0作定时应用技术

15.定时计数器T0作定时应用技术(一)1.实验任务用A T89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。

硬件电路如下图所示2.电路原理图图4.15.13.系统板上硬件连线(1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。

(2.把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。

4.程序设计内容A T89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。

只要通过设置特殊功能寄存器TMOD,即可完成。

定时/计数器何时工作也是通过软件来设定TCON 特殊功能寄存器来完成的。

现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。

对于这20次我们就可以采用软件的方法来统计了。

因此,我们设定TMOD=00000001B,即TMOD=01H下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出TH0=(216-50000)/256TL0=(216-50000)MOD256当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF0=1表示定时时间已到。

89C51定时器和计数器精编版

89C51定时器和计数器精编版

AT89C51定时器/计数器1.定时和计数功能:AT89C51有两个可编程的定时器和计数器:T0和T1。

它们可以工作在定时状态也可以工作在计数状态。

做定时器时不能用作计数,反之亦然。

2.计数器:当定时器/计数器作“计数器”用时,可对接到14引脚(T0/P3.4)或15引脚(T1/P3.5)的脉冲信号数进行计数,每当引脚发生从“1”到“0”的负跳变时,计数器加1.3.定时器:当定时器/计数器作“定时器”用时,定时信号来自内部的时钟发生电路,每个机器周期等于十二个震荡周期,每过一个机器周期,计数器加1.当晶振频率为12MHz时,则机器周期为1微秒;在此情况下,若计数器为100,则所定时的时间为:100 x 1 =100微秒。

14.与定时器/计数器有关的特殊功能寄存器5.定时器/计数器的控制AT89C51单片机定时器/计数器的工作由两个特殊的寄存器TMOD和TCON的相关位来控制,TMOD用于设置它的工作方式,TCON用于控制其启动和中断的请求。

1).TMOD用于设置定时器/计数器的工作方式,其字节地址为89H。

低四位用于T0,高四位用于T1。

虽有位名称,2但无位地址,不可进行位操作。

TMOD中的结构和各位名称○1M1,M0:工作方式选择位。

M1、M0为两位二进制数,可表示四种工作方式,见下表:○2C/T:计数/定时方式选择位。

C/T = 1,为计数工作方式,对输入到单片机T0、T1引用的外部信号脉冲计数,负跳变脉冲有效,用作计数器。

C/T = 0,为定时工作方式,对片内机器周期(1个机器周期等于12晶振周期)信号计数,用作定时器。

3○3GATE:门控位。

GATE = 0,定时器/计数器的运行只受TCON中的运行控制位TR0/TR1的控制。

GATE = 1,定时器/计数器的运行同时受TR0/TR1和外中断输入信号(INT0和INT1)的双重控制。

GATE对TR0/TR1的制约2).控制寄存器TCONTCON是可位寻址的特殊功能寄存器,其字节地址为88H,位地址由低到高顺序分别为88H~8FH,4TCON的低四位只与外中断有关,其高四位与定时器/计数器有关。

基于AT89C51单片机的计数器设计

基于AT89C51单片机的计数器设计

基于AT89C51单片机的计数器设计AT89C51单片机是一种常用的8位单片机,具有计数器功能。

本文将介绍基于AT89C51单片机的计数器设计。

计数器是一种常用的电子设备,用于统计某个事件发生的次数。

在数字电子技术中,计数器可以通过使用触发器和逻辑门来实现。

在AT89C51单片机中,可以通过编程控制来实现计数器功能。

我们需要通过编程配置AT89C51单片机的IO口,使其能够作为计数器的输入和输出端口。

我们可以使用P1口作为计数器的输入端口,通过外部信号来触发计数器的计数动作。

我们可以使用P2口作为计数器的输出端口,将计数结果显示出来。

接下来,我们需要编写程序来实现计数器的功能。

程序的基本思路是通过中断来实现计数器的自动计数。

当接收到外部信号时,中断服务程序会自动执行,对计数器的计数值进行更新,并将结果输出到P2口。

我们可以通过按键来控制计数器的启动和暂停。

具体编程步骤如下:1. 配置P1口和P2口为输入和输出模式,分别作为计数器的输入和输出端口。

2. 初始化计数器的计数值为0。

3. 配置中断,并编写中断服务程序。

中断服务程序在接收到外部信号时,会自动执行,对计数器的计数值进行更新,并将结果输出到P2口。

4. 编写按键处理程序。

按键处理程序会检测按键的状态,如果按下则启动计数器,再次按下则暂停计数器。

5. 主程序中,循环检测按键状态,并根据按键状态调用相应的处理程序。

通过以上步骤,我们可以实现基于AT89C51单片机的计数器设计。

这个设计可以广泛应用于各种计数需求的场合,如物料计数、人员计数等。

基于AT89C51单片机的计数器设计具有成本低、可靠性高等优点,适合在工业控制和自动化领域进行应用。

基于AT89C51单片机的计数器设计是一项有趣且实用的工程,通过合理的硬件配置和编程设计,可以实现各种计数需求的应用。

基于AT89C51单片机的计数器设计

基于AT89C51单片机的计数器设计

基于AT89C51单片机的计数器设计AT89C51是一种8位单片机,它具有中央处理器、存储器和输入/输出功能,适用于各种应用。

在本设计中,我们将基于AT89C51单片机来设计一个计数器。

我们需要连接AT89C51单片机和外部硬件电路。

计数器通常需要一个外部计时源来提供脉冲输入,并且需要一个数码管显示结果。

我们需要连接一个计时源(例如晶体振荡器)到单片机的外部时钟引脚,并连接一个共阳数码管到单片机的输出引脚。

我们还需要连接一些按钮到单片机的输入引脚,用于开始、暂停和复位计数器。

接下来,我们需要编写单片机的程序代码。

程序代码将实现计数器的功能,包括计数、显示和控制操作。

我们需要定义一些变量来记录计数器的状态。

我们可以定义一个变量来存储当前计数的值,一个变量来存储计数是否正在进行中的标志,以及一个变量来存储计数方向(递增或递减)的标志。

然后,我们可以在主程序循环中开始实现计数器的功能。

主程序循环可以使用一个无限循环来保持计数器一直运行,并且可以通过检测按钮的状态来控制计数器的操作。

如果开始按钮按下,则设置计数进行中的标志,并且根据计数方向的标志进行递增或递减操作。

如果暂停按钮按下,则清除计数进行中的标志,停止计数操作。

如果复位按钮按下,则将计数器的值重置为初始值,并且清除计数进行中的标志。

在每次计数操作后,我们需要将计数器的值显示在数码管上。

可以使用数码管的显示函数来将计数器的值转换为对应的数字,并将其输出到数码管的引脚上,从而实现数字的显示。

为了保证计数器的精确性,我们需要添加一些延时函数来控制计数的速度。

可以使用单片机的定时/计数器功能来实现延时功能。

定时/计数器可以设置为特定的计时频率,并且可以通过定时器中断来控制延时的时间。

基于AT89C51单片机的计数器设计需要连接外部硬件电路,并编写相应的程序代码来实现计数、显示和控制操作。

通过合理的硬件连接和程序设计,可以实现一个功能完善的计数器。

制作AT89C51制作的简单计数器

制作AT89C51制作的简单计数器时间:2013-01-13 18:25来源:网络作者:网络整理点击: 132 次免费提供各种电子制作文章、资料、图纸图中可以看到本制作的首要焦点电路是用AT89C51构成的按键取值电路,S3S4别离节制计数值的加减。

数码管行使的是共阳极通过3906节制。

这个计数器首要用于对键的按键次数计数,用于鼠标中的微按钮或其余按钮做QC测试用。

以是在软件顶用了取两次按时刻断的键值做较量以到达简朴防发抖和取健值的目标。

读者伴侣可以自行修改措施以得当本身的电路。

本计数器的计数范畴为0-999999,最大的频率为50Hz,虽然这些参数都可以按照必要调解。

措施行使的是汇编延时措施,可以改用C写,没有任何关系只是我偷懒从旧的措施中拷过来用。

道理图:实物图:措施如下:#include <AT89X51.H>#define Key_UP P3_6 //上调#define Key_DOWN P3_7 //下调#define LED P0#define LED1 P2_2 //LED节制#define LED2 P2_3 //LED节制#define LED3 P2_4 //LED节制#define LED4 P2_5 //LED节制#define LED5 P2_6 //LED节制#define LED6 P2_7 //LED节制unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳0-9的LED笔划static unsigned char bdata Key; //可位寻址的状态寄存器sbit NewKeyUP = Key ^ 0;sbit NewKeyDOWN = Key ^ 1;sbit OldKeyUP = Key ^ 2;sbit OldKeyDOWN = Key ^ 3;static unsigned long data Count;static unsigned char LEDN[6];void main(void){void Delay_510(void);Count = 0; //初始化变量Key = 0;EA = 1; //应承CPU间断ET0 = 1; //按时器0间断打开TMOD = 0x1; //设按时器0为模式1,16位模式TH0=0xB1;TL0=0xDF; //设按时值为20000us(20ms)TR0 = 1; //开始按时while(1);}//按时器0间断外理中键扫描和表现void KeyAndDis_Time0(void) interrupt 1 using 2{TH0=0xB1;TL0=0xDF; //设按时值为20000us(20ms)NewKeyUP = Key_UP; //取新的键值NewKeyDOWN = Key_DOWN;if (!OldKeyUP && NewKeyUP) //键铺开时,这里的间断为20ms阁下(按时值非自动装载以是多于20ms)Count++;if (!OldKeyDOWN && NewKeyDOWN)Count--; //这里Conut为int 没有做负数等处理赏罚,有必要自行加上if (Count>999999)Count = 999999;LEDN[5]=Count/100000;LEDN[4] = (Count-100000*(long)LEDN[5])/10000;LEDN[3] = (Count-100000*(long)LEDN[5]-10000*(long)LEDN[4])/1000;LEDN[2] = (Count-100000*(long)LEDN[5]-10000*(long)LEDN[4]-1000*(long)LEDN[3])/100;LEDN[1] = (Count-100000*(long)LEDN[5]-10000*(long)LEDN[4]-1000*(long)LEDN[3]-100*(long)LEDN[2])/10;LEDN[0] = (Count-100000*(long)LEDN[5]-10000*(long)LEDN[4]-1000*(long)LEDN[3]-100*(long)LEDN[2]-10*(long)LEDN[1]);LED=LEDDis[LEDN[5]];LED6 = 0;Delay_510();LED6 = 1;LED=LEDDis[LEDN[4]];LED5 = 0;Delay_510();LED5 = 1;LED=LEDDis[LEDN[3]];LED4 = 0;Delay_510();LED4 = 1;LED=LEDDis[LEDN[2]];LED3 = 0;Delay_510();LED3 = 1;LED=LEDDis[LEDN[1]];LED2 = 0;Delay_510();LED2 = 1;LED=LEDDis[LEDN[0]];LED1 = 0;Delay_510();LED1 = 1;OldKeyUP = NewKeyUP; OldKeyDOWN = NewKeyDOWN; }void Delay_510(void) //延时510微秒{#pragma asmMOV R0,#7DHMOV R1,#02HTSR1:DJNZ R0,TSR1MOV R0,#7DHDJNZ R1,TSR1#pragma endasm}(责任编辑:admin)。

基于AT89C51单片机的计数器设计

基于AT89C51单片机的计数器设计一、引言计数器是数字电路中常见的一种组合逻辑电路,用于对输入脉冲信号进行计数和累加操作,常用于计数、测频、分频等场合。

AT89C51单片机是一种常用的8位微控制器,具有丰富的外设和功能,能够灵活应用于各种数字电路设计中。

本文将基于AT89C51单片机,设计一个简单的计数器,并介绍其原理和实现方法。

二、设计原理AT89C51单片机具有丰富的外设资源,包括多种定时器、计数器和串行通信接口等,适合用于计数器设计。

在本设计中,我们将使用AT89C51的定时器/计数器功能,通过编程控制实现一个简单的计数器。

具体设计原理如下:1. 硬件设计:基于AT89C51单片机的计数器由单片机、数码管、脉冲输入端和其他外围电路组成。

其中脉冲输入端接收外部脉冲信号作为计数输入,数码管用于显示计数结果。

2. 软件设计:利用AT89C51的定时器/计数器功能,编程设计实现计数器的逻辑功能。

通过中断控制和计数器清零等操作,实现对脉冲输入信号的计数和累加,并将结果通过数码管显示出来。

三、设计实现1. 硬件连接:首先进行硬件连接,将AT89C51单片机与数码管、外部脉冲信号输入端等进行连接。

通常可以通过引脚连接或者扩展模块等方式进行连接。

2. 软件编程:接下来进行软件编程,通过C语言或汇编语言等进行编程设计。

其中需要实现对定时器/计数器的初始化、中断服务函数的编写、脉冲输入的捕获和计数功能的实现等操作。

3. 调试验证:编程完成后,进行调试验证,对设计的计数器进行功能测试和性能评估。

通过输入不同的脉冲信号进行测试,验证计数器的计数和显示功能是否正常。

四、设计优化在设计过程中,可以对基于AT89C51单片机的计数器进行优化,以提高其性能和稳定性。

具体优化方法如下:1. 硬件优化:在硬件设计中,可以采用更稳定和精密的外部时钟源、优化数码管驱动电路、加入防抖电路等,以提高计数器的稳定性和抗干扰能力。

2. 程序优化:在软件编程中,可以优化计数算法和显示方式,减少计数误差和提高显示效果。

基于AT89C51单片机的计数器设计

基于AT89C51单片机的计数器设计计数器是一种电子电路,能够在不需要外部干扰的情况下,在其输入端接收脉冲信号,并进行计数操作。

基于AT89C51单片机的计数器设计,是一种常用的计数器电路,该设计具有简单、可靠、灵活性高等优点。

设计原理:AT89C51单片机是一种8位微控制器,具有大容量的程序存储器和数据存储器。

其具有高度集成的特点,使得它成为一种非常适合计数器设计的芯片。

本设计把AT89C51单片机作为核心器件,利用其内部计时器的计数功能,实现脉冲计数操作。

设计步骤:1. 硬件设计:硬件包括AT89C51单片机芯片、LCD1602液晶显示屏、按键、发光二极管等。

该电路中,AT89C51单片机通过引脚接收外部脉冲信号,从而实现计数功能。

液晶显示屏用于显示计数结果。

按键用于清零计数器。

发光二极管是用来指示计数器是否工作的状态。

2. 软件设计:软件设计采用汇编语言。

主要包括两个部分,一是初始化程序,二是计数程序。

初始化程序用于初始化AT89C51单片机和液晶显示屏,包括设置计数器、串口等参数。

计数程序用于计算脉冲信号的个数,并将结果显示到液晶屏上。

同时,还需要加入按键扫描程序,用于清零计数器。

设计实现:AT89C51单片机的计数器设计中,先通过初始化程序,对AT89C51单片机和液晶显示屏进行初始化设置。

然后在计数程序中,通过中断方式去检测外部脉冲信号,并将计数器值累加。

同时,加入按键扫描程序,用于清零计数器。

当按下清零按键时,程序将计数器清零,并将结果重新显示到液晶屏上。

如果设计一个自动清零计数器的功能,可以在程序中加入一个预设值,到达该预设值时自动清零计数器。

总结:。

89C51的定时器、计数器

二定时计数器结构和工作原理定时器方式寄存器主要用亍设定定时器的工作方式定时器控制寄存器主要用亍控制定时器的启劢不停止并保存t0t1的溢出和中断标志定时器0定时器1定时计数器的结构框图16位的定时器计数器实质上是一个加l计数器可实现定时和计数两种功能其功能由软件控制和切换
定时/计数器
1
定时方法概述 定时计数器结构和工作原理 定时计数器的控制寄存器 定时器的四种工作方式
GATE0=0时: TR1=1
启动计数 启动计数
GATE0=1时: TR1=1且INT1=1
14
计数工作方式: 最大的计数值为8192(213) 预置的初值:X= 213-N 定时工作方式:定时时间的计算公式为:
T=(213—计数初值)×晶振周期×12 机器周期
预置的初值: X 213
27
例:假设某MCS-51应用系统的两个外中断源已被占用,设置T1 工作在方式2,作波特率发生器用。现要求增加一个外部中断源, 并控制P1.0引脚输出一个5kHz的方波。设系统时钟为12MHz。
28
(1)选择工作方式 TL0为方式3计数,把T0引脚(P3.4)作附加的外中断输入端, TL0初值设为0FFH,当检测到T0引脚电平出现负跳变时,TL0 溢出,申请中断,这相当于跳沿触发的外部中断源。 TH0为8位方式3定时,控制P1.0输出5kHz的方波信号。
х
ET2
ES
中断允许总控制位 0:允许中断 1:禁止中断响应
定时/计数器1中 断允许控制位
定时/计数器0中 断允许控制位
11
4、中断优先级寄存器IP(字节地址B8H)
12
四、定时计数器的四种工作方式
定时器T0、T1的工作方式
13
1、工作方式0(13位计数器)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

X=28-100=156=9CH
因此,TL1的初值为9CH,重装初值寄存器TH1=9CH (3)程序设计 ORG LJMP 0000H MAIN
ORG
001BH ;T1中断服务程序入口
CPL RETI ORG MAIN: MOV
P1.0 0100H TMOD,#60H
;P1.0位取反
;设T1为方式2计数
SETB
EA
;CPU开放中断
HERE: SJMP
ITOP: MOV MOV DJNZ CLR
HERE
;等待中断
TL0,#0B0H ;T0中断子程序,重装初值 TH0,#3CH B,LOOP TR0 ;1s定时时间到,停止T0工作 ;
LOOP: RETI
6.4.2 方式2的应用
省去程序中重装初值的指令,并可产生相当精确的定时时间。 例6-3 当T0(P3.4)引脚上发生负跳变时,从P1.0引脚上输出一 个周期为1ms的方波,如图6-13所示。(假设时钟为6MHz)
6.3
计数器模式对输入信号的要求
外部计数脉冲的最高频率为系统振荡器频率的1/24,例如选 用12MHz频率的晶体,则可输入500KHz的外部脉冲。
输入信号的高、低电平至少要保持一个机器周期。如图6-12
所示,图中Tcy为机器周期。
图6-12
6.4 定时器/计数器的编程和应用
4种工作方式中,方式0与方式1基本相同,由于方式0是为兼容
6.2 定时器/计数器的4种工作方式 6.2.1 方式0 M1、M0为00 ,定时器/计数器的框图:
图6-4
为13位的计数器 ,C/T* 位决定工作模式: 0:开关打在上面,为定时器工作模式; 1:开关打在下面,为计数器工作模式,计数脉冲为P3.4、 P3.5引脚上的外部输入脉冲,当引脚上发生负跳变时,计数 器加1。 GATE位:决定定时器/计数器的运行取决于TRx一个条件还是 TRx和INTx*引脚两个条件。 (1)0:A点(见图6-2)是否计数,仅取决于TRx的状态。
图6-14 (1)工作方式选择
T0为方式1计数,初值 0FFFFH,即外部计数输入端T0(P3.4)
发生一次负跳变时,T0加1且溢出,溢出标志TF0置“1”, 发中断请求。在进入T0中断程序后,把F0标志置“1”,说 明T0脚已接收了负跳变信号。
T1定义为方式2定时。在T0脚发生一次负跳变后,启动T1每
图6-9
(2) T1工作在方式1
图6-10 (3) T1工作在方式2
图6-11
(4)T1工作在方式3。
T1的控制字中M1、M0 = 11时,T1停止计数。 在T0为方式3时,T1运行的控制条件只有两个,即C/T*和M1、M0。 C/T*选择定时器模式或计数器模式,M1、M0选择T1运行的工 作方式。
;调用子程序PT0M0 ;自身跳转 ;T0中断服务程序,T0重新置初值
;启动T0 ;允许T0中断 ;CPU开中断
;T0中断服务子程序,T0置初值
;P1.0的状态取反
;设置T0为方式1
SETB LOOP: MOV MOV LOOP1:JNB CLR CPL SJMP
TR0 TH0,#0FEH TL0,# 0CH TF0,LOOP1 TR0 P1.0 LOOP
图6-7 省去用户软件中重装初值的程序,来精确定时。
6.2.4 器。
方式3
增加一个附加的8位定时器/计数器,从而具有3个定时器/计数
只适用于定时器/计数器T0。T1不能工作在方式3。 T1方式3时相当于TR1=0,停止计数(此时T1可用来作串行口 波特率产生器)。
1.工作方式3下的T0 T0分为两个独立的8位计数器:TL0和TH0 。TL0使用T0的状态 控制位C/T*、GATE、TR0、,而TH0被固定为一个8位定时器 (不能作外部计数模式),并使用定时器T1的状态控制位
MOV
MOV SETB
TL0,#9CH
TH0,#9CH TR1
;T0置初值
;启动T1
HERE:
6.4.3
AJMP
HERE
方式3的应用
T0 方式3时,TL0和TH0被分成两个独立的8位定时器/计数器。 其中, TL0:8位定时器/计数器;
TH0:8位定时器。
当T1作串行口波特率发生器时,T0才设置为方式3。 例6-5 假设某89C51应用系统的两个外中断源已被占用,设置 T1工作在方式2,作波特率发生器用。现要求增加一个外部中 断源,并控制P1.0引脚输出一个5kHz的方波。设系统时钟为 6MHz。
TR0 ET0
MOV
MOV CLR SETB RET IT0P: CLR
TL1,#06H
TH1,#06H F0 EA TR0
;T1置初值
;把T0已发生中断标志F0清0
;T0中断服务程序,停止T0计数
SETB RETI IT1P: CPL
F0
;建立产生中断标志
P1.0
;T1中断服务,P1.0位取反
RETI
MCS-48而设,初值计算复杂,在实际应用中,一般不用方式 0,而采用方式1。
6.4.1
方式1应用
例6-1 假设系统时钟频率采用6MHz,要在P1.0上输出一个周期 为2ms的方波,如图6-13所示。
图6-13
方波的周期用T0来确定,让T0每隔1ms计数溢出1次(每1ms产
生一次中断),CPU响应中断后,在中断服务程序中对P1.0 取反。
LJMP
ORG MAIN: MOV
IT0P
1000H SP,#60H
;转T0中断处理程序IT0P
;设堆栈指针
MOV
MOV MOV MOV SETB SETB
B,#0AH
TMOD,#01H TL0,#0B0H TH0,#3CH TR0 ET0
;设循环次数10次
;设T0工作在方式1 ;给T0设初值 ;启动T0 ;允许T0中断
TR1和TF1,同时占用定时器T1的中断请求源TF1。
各引脚与T0的逻辑关系如图6-8所示:
图6-8(a)
图6-8(b)
2.T0工作在方式3下T1的各种工作方式
当T1用作串行口的波特率发生器时, T0才工作在方式3。 T0为方式3时, T1可定为方式0、方式1和方式2,用来作为串 行口的波特率发生器,或不需要中断的场合。 (1)T1工作在方式0
图6-1 单片机复位时,两个寄存器都清0。 6.1.1 工作方式控制寄存器TMOD
图6-2
8位分为两组,高4位控制T1,低4位控制T0。 (1)GATE——门控位 0:仅以TRX(X=0,1)来启动定时器/计数器运行。 1:用引脚INT0* (或INT1*)上的高电平和TRX两个条 件来控制定时器/计数器的运行。 (2)M1、M0——工作方式选择位 表6-1 M1、M0工作方式选择 M1 M0 工 作 方 式 0 0 方式0,13位定时器/计数器。 0 1 方式1,16位定时器/计数器。 1 0 方式2,8位常数自动重新装载 1 1 方式3,仅适用于T0,T0分成两个8 位计数器,T1停止计数。 (3) C/T*——计数器模式和定时器模式选择位
(2)1:B点电位由INTX* 的输入电平和TRX的状态这两个条件
来确定。是否计数是由TRx和INTx*二个条件来控制的。
6.2.2 方式1 M1、M0=01,16位的计数器。
图6-5 6.2.3 方式2 计数满后自动装入计数初值。 M1、M0=10 ,等效框图如下:
图6-6 TLX作为常数缓冲器,当TLX计数溢出时,在置“1”溢出标志 TFX的同时,还自动的将THX中的初值送至TLX,使TLX从初值 开始重新计数。 定时器/计数器的方式2工作过程如图6-7 (X=0,1)。
0:定时器模式。 1:计数器模式。 6.1.2 定时器/计数器控制寄存器TCON
字节地址为88H,可位寻址,位地址为88H~8FH。TCON的格式
如图6-3所示。
图6-3
低4位与外部中断有关,已介绍。高4位的功能如下:
(1) TF1、TF0——计数溢出标志位 (2) TR1、TR0——计数运行控制位 1:启动定时器/计数器工作的必要条件。 0:停止定时器/计数器工作
图6-15
(1)选择工作方式
;接通T0 ;T0置初值 ;查询TF0标志 ;T0溢出,关闭T0 ;P1.0的状态求反
例6-2 假设系统时钟为6MHz,编写定时器T0产生1秒定时的程 序。 (1)T0工作方式的确定 定时时间较长,采用哪一种工作方式? 由各种工作方式的特性,可计算出: 方式0最长可定时16.384ms;
方式1最长可定时131.072ms; 方式2最长可定时512s。 选方式1,每隔100ms中断一次,中断10次为1s。 (2)计算计数初值
第6章
6.1
AT89C51的定时器/计数器
定时器/计数器的结构
两个可编程的定时器/计数器T1、T0。结构如图6-1所示 2种工作模式: (1)计数器工作模式
(2)定时器工作模式
4种工作方式(方式0-方式3)。 TMOD:选择定时器/计数器T0、T1的工作模式和工作 方式。 TCON:控制T0、T1的启动和停止计数,同时包含了 T0、T1的状态。
在T1定时中断服务程序IT1P中,省去了T1中断服务程序中重新 装入初值06H的指令。 例6-4 利用T1的方式2对外部信号计数,要求每计满100个数, 将P1.0取反。
本例是方式2计数模式的应用。
(1)选择工作方式
外部信号由T1(P3.5) 脚输入,每发生一次负跳变计数器加1, 每输入100个脉冲,计数器产生溢出中断,在中断服务程序 中将P1.0取反一次。 T1 方式2的控制字为TMOD=60H。不使用T0时,TMOD的低4位可 任取,但不能使T0进入方式3,这里取全0。 (2)计算T1的初值
500s产生一次中断,在中断服务程序中对P1.0求反,使P1.0 产生周期1ms的方波。
相关文档
最新文档