定时计数器
定时计数器详解

mcs-51单片机计数器定时器详解【1】80C51单片机内部设有两个16位的可编程定时器/计数器。
可编程的意思是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变。
在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。
:从上面定时器/计数器的结构图中我们可以看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1构成。
其访问地址依次为8AH-8DH。
每个寄存器均可单独访问。
这些寄存器是用于存放定时或计数初值的。
此外,其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。
这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。
TMOD主要是用于选定定时器的工作方式;TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。
当定时器工作在计数方式时,外部事件通过引脚T0(P3.4)和T1(P3.5)输入。
定时计数器的原理:16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。
当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。
显然,定时器的定时时间与系统的振荡频率有关。
因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。
如果晶振为12MHz,则计数周期为:T=1/(12×106)Hz×1/12=1μs这是最短的定时周期。
若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如8位、13位、16位等)。
当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。
计数器在每个机器周期的S5P2期间采样引脚输入电平。
若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。
计数器定时查询的工作原理

计数器定时查询的工作原理一、引言计数器定时查询是一种常见的计时方式,常用于嵌入式系统中。
其工作原理是利用计数器进行计数,并在特定的时间间隔内查询计数器的值,从而实现定时功能。
本文将详细介绍计数器定时查询的工作原理。
二、计数器计数器是一种数字电路,主要用于对信号进行计数。
它可以通过输入一个时钟信号来进行计数,并将结果输出。
在嵌入式系统中,常用的计数器有基于硬件的定时器和基于软件的延时函数。
三、定时器定时器是一种特殊类型的计数器,它可以在特定时间间隔内自动进行计数,并触发相应的中断或事件。
在嵌入式系统中,常用的定时器有基于硬件的定时器和基于软件的延时函数。
四、硬件定时器硬件定时器是通过外部晶体振荡电路提供稳定的时间基准来实现精确计时。
其工作原理是通过预设寄存器设置一个初始值,并从外部晶体振荡电路接收一个固定频率(通常为1MHz)的脉冲信号作为输入信号。
每当接收到一个脉冲信号,就会将初始值减1,直到计数器的值为0时触发中断或事件。
通过调整初始值和输入信号的频率,可以实现不同的定时功能。
五、软件延时函数软件延时函数是通过程序控制来实现计时的一种方式。
其工作原理是利用CPU的执行速度和延时循环来实现定时功能。
在嵌入式系统中,常用的软件延时函数有基于循环计数和基于定时器中断两种方式。
六、基于循环计数的软件延时函数基于循环计数的软件延时函数是通过程序循环执行一定次数来实现计时功能。
其工作原理是设置一个计数器,每执行一次循环就将计数器减1,直到计数器减为0后退出循环。
通过调整计数器初值和每次减1的时间间隔,可以实现不同的定时功能。
七、基于定时器中断的软件延时函数基于定时器中断的软件延时函数是通过在程序中设置一个定时器,在特定时间间隔内触发一个中断来实现计时功能。
其工作原理是设置一个预设寄存器作为中断触发阈值,并在程序中开启相应的中断服务程序(ISR)。
当预设寄存器减为0后触发中断,执行ISR中的延时函数,并重新设置预设寄存器的值。
定时器和计数器 的思政育人目标

定时器和计数器的思政育人目标一、概述1.1 背景介绍随着社会的不断发展,人们的生活节奏越来越快,人们需要更多的工具来帮助他们更好地管理时间和计划任务。
在这样的背景下,定时器和计数器这两种工具成为了人们生活中必不可少的辅助工具。
1.2 研究目的定时器和计数器不仅仅是简单的工具,它们也具有一定的思政育人功能。
本文旨在探讨定时器和计数器的思政育人目标,为相关工作者和爱好者提供参考。
二、定时器的思政育人目标2.1 提高时间管理能力定时器可以帮助人们合理安排时间,提高时间管理能力。
通过设定定时器的工作时间和休息时间,可以帮助人们养成良好的工作习惯,避免长时间连续工作带来的身体和心理疲劳。
2.2 增强责任心和执行力定时器可以帮助人们在规定的时间内完成任务,从而增强责任心和执行力。
当人们设定一个任务完成的时间和目标,定时器会成为他们心理上的一种压力和催促,促使他们全力以赴完成任务。
2.3 培养耐心和恒心定时器在定时提醒的也需要人们保持耐心和恒心。
当任务没有按时完成或遇到困难时,人们需要坚持下去,直至任务完成。
这个过程可以培养人们的耐心和恒心,让他们更加坚定地去追求目标。
三、计数器的思政育人目标3.1 培养自律和执行力计数器可以帮助人们规划和记录自己的任务和目标,从而培养自律和执行力。
通过设定计数器的目标和计数标准,人们可以时刻关注自己的任务完成情况,对自己进行监督和激励,从而坚持不懈地去完成任务。
3.2 提高效率和专注力计数器可以帮助人们更好地控制自己的行为和思维,提高效率和专注力。
通过设定计数器的计数目标和时间节点,人们可以更加有针对性地进行学习和工作,提高自己的学习和工作效率,提高专注力。
3.3 增强自信和成就感计数器会记录人们每一次完成的任务和达成的目标,从而增强自信和成就感。
当人们看到自己每一次完成的计数标准,会感到满足和自豪,增强自信心,更有动力去迎接下一个挑战和目标。
四、结语定时器和计数器作为人们生活中的常用辅助工具,除了可以帮助人们更好地管理时间和计划任务外,还具有一定的思政育人功能。
定时器计数器常用编程方法

定时器计数器常用编程方法定时器和计数器是嵌入式系统中常用的功能模块,用于实现时间测量、任务调度、PWM生成等功能。
在嵌入式系统的开发中,了解和掌握常用的定时器计数器编程方法至关重要。
本文将介绍几种常用的定时器计数器编程方法,以帮助开发者更好地运用定时器计数器。
一、基本概念在进行定时器计数器编程之前,我们首先需要了解一些基本概念。
1. 定时器:定时器是一种能够按照一定时间周期自动计数,并产生相应中断或触发事件的硬件模块。
2. 计数器:计数器是一种能够按照外部信号或者内部时钟信号进行计数,并提供计数结果的硬件模块。
3. 溢出中断:当定时器或计数器的计数值达到最大值后,会发生溢出,并触发溢出中断,用于实现周期性的定时或计数功能。
4. 输入捕获:定时器计数器可以通过输入捕获功能,实时记录外部事件信号的时间戳,用于时间测量等应用。
二、定时器计数器编程方法在嵌入式系统中,常用的定时器编程方法包括常规模式、CTC模式、PWM模式等。
下面分别介绍这些方法的基本原理及编程实现。
1. 常规模式常规模式是定时器最简单的工作模式,通过设置计数器的初值和溢出中断来实现定时功能。
其编程步骤如下:(1)设置定时器计数器的初值,决定计数器的起点。
(2)使能定时器的溢出中断,当计数器溢出时触发中断。
(3)启动定时器计数。
下面是一个使用常规模式实现定时功能的示例代码:```C#include <avr/io.h>#include <avr/interrupt.h>void Timer_Init(){// 设置计数器初值TCNT1 = 0;// 使能溢出中断TIMSK |= (1 << TOIE1);// 启动定时器计数,使用外部时钟源TCCR1B |= (1 << CS12) | (0 << CS11) | (0 << CS10);}// 定时器溢出中断处理函数ISR(TIMER1_OVF_vect){// 处理定时事件}int main(){Timer_Init();// 主循环while (1){// 其他任务处理}return 0;}```2. CTC模式CTC模式(Clear Timer on Compare Match)是一种定时器工作模式,可以实现在指定时间后产生中断或触发事件。
Atmega128定时计数器

128有两个8位计数器T/C0和T/C2,两个16位计数器T/C1和T/C3.一.定时/计数器的工作的开始与结束是由TCCR0(8位T/C0)中的最后三位0-2工作时钟的选择决定的,工作时钟选定以后则定时器开始工作.同理.16位的是由TCCR1B中的后三位决定的.二.定时/计数器有三种工作方式:1.普通模式.2.CTC模式(比较匹配时清楚定时器).3.快速PWM模式.4.相位修正PWM模式. 其中1,2是经常用到的.在普通模式下没有什么需要特殊考虑的,用户可以随时写入新的计数器值,输出比较单元可以用来产生中断,即在普通模式下,也可对TCNT0和OCR0置数(同CTC模式).但不推荐在普通模式下利用输出比较产生波形,因为会占用太多的CPU时间.三.对于16位计数器中的16位寄存器的读写操作顺序是不同的.在写的时候,是先写高字节,再写低字节.而在读的时候则反过来,先读低字节,再读高字节.四.16位计数器的输入捕获功能.可以用于周期和频率的精确测量.eg:记下某一管脚两次变化的时间.viod init_timer1_icp(viod){TCCR1B|=(1<<CS11)|(1<<CS10);//设置预分频为64,同时启动计数器TIFR |=(1<<ICF1);//清除该标志位(清|除没有执行的中断)TIMSK |=1<<TICIE1;//允许计数器1的输入捕捉中断DDRD &=~(1<<PD6);//设置PD6为需要捕捉的输入}每当捕捉到引脚的变化后,则ICF1置位,产生中断.同时将计数寄存器TCNT1中的数值存放到ICR1中.五.定时器的CTC工作模式可以用来对定时器进行连续定时.例如 T1,CTC模式,8MHz定时时间 T= 0.125uS*N*(1+TOP) 其中N为分频系数,1,8,64,128...分频系数定时步距最长定时时间1(无分频) 0.125uS 8192us 8毫秒8 1uS 65536us 65毫秒64 8uS 524ms 0.5秒256 32uS 2097ms 3秒1024 128uS 8388ms 超8秒了根据要定时的时间比较上表中的最长定时时间选择分频系数,然后根据公示TOP=8*1000000/N-1 可计算出TOP值,即为要设定的OCR值. 注意,定时器与程序是独立的,与该定时器的中断程序也是独立的,中断程序执行时,定时器也一直在工作.所以要设定的OCR的值很小的话,那么中断返回后的 TCNT的值有可能比OCR的值大,这样则丢失一次匹配成功的条件,这样计数器会一直累加到最大值0xFF,然后再次到OCR的值时才产生中断.六. 定时器应用初始化总结最简单的用法:eg 工作在普通模式viod timer0_init(viod){TCCR0=0x00; //关闭计数器TIFR|= 1<<OCF0; //清除该标志位(清|除没有执行的中断)TIMSK |=1<<OCIE0; //允许计数器的比较匹配中断 TCNT0= ;//设置计数初值OCR0= ;//设置比较匹配值TCCR0= ; 设置工作模式,预分频,计数器开始计数}。
单片机中的定时器与计数器有何不同,二者的区别是什么

单片机中的定时器与计数器有何不同,二者的区别是
什么
定时器实际上也是计数器,只是计数的是固定周期的脉冲
定时/计数器很容易理解的啊
定时器实际上也是工作在计数方式下,只是计数的是固定周期的脉冲,由于脉冲周期固定,由计数值可以计算时间,有定时功能。
定时和计数只是触发来源不同(时钟信号和外部脉冲)其他方面是一样的。
单片机里的寄存器可以看成一个个电子开关,用来切换不同的功能、信号。
51里通过TMOD里的T/C 位切换计数信号的来源。
中断定时计数器课件

例 5 编写一段程序,功能要求为:当P1.0引脚的电平正跳变时,对P1.1的输入脉冲 进行计数;当P1.2引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位 存R1,低位存R0)。 解答:将P1.1的输入脉冲接入INT0,即使用T0计数器完成对P1.1口的脉冲计数。编写程 序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: JNB P1.0,MAIN MOV TMOD,#05H ;定 时器/计数器T0为计数方式1 SETB TR0 ;启动T0,开 始计数 SETB ET0 ;允许T0中断 SETB EA ;CPU开中断 WAIT: JB CLR CLR MOV MOV AJMP INC RETI P1.2,WAIT EA TR0 R1,TH0 R0,TL0 $ R2
ORG 000BH CPL P1.0 MOV TL0, #9CH RETI ORG 001BH CPL P1.1 MOV TH0, #38H RETI ;TL0 中断服务程序 ;P1.0 取反 ;重新装入计数初值 ;中断返回 ;TH0 中断服务程序 ;P1.1取反 ;重新装入计数初值 ;中断返回
AJMP DEL REP:CPL P1.0 AJMP DEL ; ;若计数溢出,则输出取反
TINT0: JNB 20H.0,NEXT MOV TL0,#0B5H MOV TH0,#0FFH CLR P1.1 CPL 20H.0 SJMP LAST NEXT: MOV TL0,#0CEH MOV TH0,#0FFH SETB P1.1 CPL 20H.0 LAST:RETI
方法二: 采用方式2 定时器中断 加延时程序
ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: MOV TMOD,#02H;定时器/ 计数器T0为定时方式2 IT0P:CLR EA MOV TL0,#4AH;定时 CLR P1.0 ;关中断 364μs初值赋值 MOV R0,#9 ;延时26μs SETB TR0;启动T0,开始 DLY:DJNZ R0,DLY MOV TL0,#4AH ;定时364μs 计数 初值赋值 SETB ET0;允许T0中断 SETB P1.0 SETB EA;CPU开中断 SETB EA RETI SETB P1.0 WAIT: AJMP WAIT
PLC程序中定时器和计数器的配合应用

PLC程序中定时器和计数器的配合使用实际使用中,定时器和计数器,常常有“强强联合”形式的搭配性使用。
一、定时器1、定时器是位/字复合元件,可以有三个属性:1)有线圈/触点元件,当满足线圈的驱动(时间)条件时,触点动作;2)具有时间控制条件,当线圈被驱动时,触点并不是实时做出动作反应,而是当线圈被驱动时间达到预置时间后,触点才做出动作;3)具有数值/数据处理功能,同时又是“字元件”。
2、可以用两种方法对定时时间进行设置:1)直接用数字指定。
FX编程器用10进制数据指定,如K50,对于100ms 定时器来讲,延时5秒动作。
为5秒定时器。
对LS编程器,可用10制数或16进制数设定,如50(或h32),对于100ms定时器来讲,延时5秒动作;2)以数据寄存器D设定定时时间,即定时器的动作时间为D内的寄存数值。
3、由定时器构成的时间控制程序电路:LS编程器中的定时器有多种类型,但FX编程器中的定时器只有“得电延时输出”定时器一种,可以通过编写相应程序电路来实现“另一类型”的定时功能。
图1程序电路中,利用M0和T1配合,实现了单稳态输出——断开延时定时器功能,X1接通后,Y0输出;X1断开后,Y0延时10秒才断开;T2、T3、Y2电路则构成了双延时定时器,X4接通时,Y2延时2秒输出;X4断开时,Y2延时3秒断开;Y3延时输出的定时时间,是由T4定时器决定的,T4的定时时间是同D1数据寄存器间接指定的。
当X2接通时,T4定时值被设定为10秒;当X3接通时,T4定时值则被设定为20秒。
XO提供定时值的清零/复位操作。
单个定时器的定时值由最大设定值所限定(0.1∽3276.7s),换言之,其延时动作时间不能超过1小时。
如欲延长定时时间,可以如常规继电控制线路一样,将多只定时器“级联”,总定时值系多只定时器的定时值相加,以扩展定时时间。
更好的办法,是常将定时器和计数器配合使用,其定时时间,即变为定时器的定时器和计数器的计数值相乘,更大大拓展了定时范围,甚至可以以月或年为单位进行定时控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这一讲我们了解定时/计数器的作用和原理我先讲一下什么是定时器单片机就是"放在一个芯片里的计算机" ,所以光有CPU还不算单片机,还需要有内存,外存,输入输出接口和外部设备,这个芯片里就有一台完整的小电脑了.所以叫"单个芯片的计算机" 简称单片机内存,外存,输入输出我们都好理解,外部设备有哪些呢?主要就是串行通信控制器(串口)和定时/计数器今天这课就是讲定时/计数器定时/计数器是即能定时,又能计数的器件单片机不能完全靠人来控制比如你按什么键它就执行什么事,那么你不按呢?它就傻等着,这可不行,那么我们给单片机制定了工作日程表,总不能一直用人盯着提醒它做什么吧。
这样我们给它提供了一个闹钟,就是这个定时器,我们把要做的时安排好时间,然后定时器到了时间就提醒CPU做该做的事,这样就自动化了再说计数器如果用单片机来计数,一般可以通过用CPU来计算,可是这样一来,CPU就不能集中精力做事了比如它想知道生产线上一共传送了多少个产品,那么有一个办法就是让它一直等,有一个产品它就计数加1,可是它也不知道下一个产品什么时候来,所以只好一直等,那它就没办法专心做别的事了,开发人员想了,干脆给它派个助手吧,专门在那等着计数,然后CPU 也不管它计了多少,什么时候想知道了就到计数器那里去问一下。
定时器和计数器其实是一回事!!!只不过定时器是对系统的时钟信号进行计数。
我们通常用用电是200V 50HZ 我想前面那个我不用解释了吧。
后面那个的意思就是一秒钟有50次的频率。
也就是50HZ。
那么6M也就是6MHZ也就是600万次的频率。
也就是说一秒钟600万次。
比如我们用6M的晶振,那么12个时钟周期执行一条指令。
就是一个指令周期。
我们用计数器对指令周期计数。
6M=600万600万/12=500K (k是指千)就是一秒钟有500K个指令周期。
一个指令周期就是1秒/500K=2微秒那么我们想定时1毫秒500*2微秒=1000微秒=1毫秒就设定计数器记录500个时钟周期就行了那么要得到1秒呢?就是1000个1毫秒,无非就是改变计数的值现在我们来总结一下这个定时/计数器,其实就是个计数器。
只不过用来对内部的指令周期计数的时候就相当于定时器。
对外部输入信号计数的时候就是计数器了那么这个定时器是不是可以无限的计数呢?不能。
为什么呢????因为8位单片机只能表示0~255。
这当然远远不够。
开发人员把两个8位的空间连了起来成了一个16位的,这样一来就能计数0~65535了。
再多点行不?也行,只是没必要。
因为可以用程序做个变量,当作软计数。
而在计数65535这么多个指令周期的过程中,CPU可以执行65535条指令。
这么多指令足够完成任何复杂的操作了!!!比如我们要计数1秒,那么我们用定时器产生1毫秒的定时周期。
然后每个周期让i 加1,那么当i=1000的时候,就是1秒了。
如果我们做个j,当i =1000的时候j+1,那么j就是一秒变一次,再做个k,当j每次到60的时候k加1那么j归0再做个L,当k到60的时候L +1就一小时了,再做个M,L到24的时候M+1,再做N当M到365,N+1,再做个O,M到100,O+1。
好回忆一下,定时器是怎么工作的。
定时器是靠晶振周期工作的。
比如,我们用12MHz的晶振,它一秒钟有多少个周期呢???12M=12个100万就是1千200万(M就是100万)12M表示每秒1200万个周期,12M/12=100万也就是说12MHZ的晶振它一秒钟有100万个指令周期。
为什么呢。
因为一个晶振周期是12,当1200万除以12(一个指令周期)时那么就是100万,那么它一秒钟就有100万个指令周期。
定时器每个机器周期加1那么一个机器周期是多少秒?1M个指令周期/秒表示每个指令周期是1/1M 秒。
1/1M=1/100万就是100万分之一秒就是1微秒说明每1微秒定时器加1那么从0 加到65535一共需要65535 *1微秒=65535微秒= 65.535毫秒所以我们要设计程序的时候,要算好这个时间,也就是说算出定时器的最大定时间隔,不然容易出错。
12M晶振的最大定时间隔是65.535毫秒,用定时器定时的时候,不要超过这个数,要不就不准了。
如果换成6M的,最大定时时间也会加倍。
如果想得到1秒。
那么600W/12=50万,那么也就是1秒钟得到50万个指令周期。
那么1/0.5M=0.000002秒,0.000002秒=0.002毫秒=2微秒也就是说我们一个指令周期是2微秒1秒=1000毫秒=1000000微秒那么我们的当一个指令周期时定时/计时器就加1当计时器到65535是就65535*2微妙=131070微秒=131.070毫秒=0.131070秒但是我们发觉这里的换算不好算。
那么我们可以变个方式来算我们可以用100毫秒来算。
100毫秒=100000微妙100000微妙/2=50000次那么当定时/计数器到50000时候也就是100毫秒。
那么1秒就等于10*100毫秒。
也就是说当在计10次时就是1秒。
我们在这里会碰到一个最大时间间隔用6M的最大时间间隔是131.070毫秒只要小于131.070毫秒就行了。
但是要小的合理。
别当50毫秒的时候计数。
那样就浪费了。
明明可以分一次操作能完成的事情。
你硬是分了两次。
就浪费了,我们要合理的利用里面的资源。
这样既要保证不出错,也要保证不浪费。
接着说定时/计数器上次说了定时/计数器的工作原理今天来说具体的操作方法定时/计数器是个两用的设备,即能定时,又能计数,因此称做“定时/计数器”,简称“C/T”定时/计数器需要有开关,需要能控制“定时”和“计数”功能转换,还需要能设置定时时间和计数初值,这些功能是通过一些叫做“控制寄存器”的东西实现的定时器是一直工作吗?你只有告诉秘书说:“下午3点叫我开会”她才需要工作如果你不需要它,就不应该让它叫你所以定时器需要有开关定时/计数器是两用的你需要它定时,它就定时,需要它计数,它就计数就是说“定时”和“计数”需要选择模式所以需要“模式控制”开关定时器不是随便多长时间闹都可以而是根据你需要的时间闹铃所以需要设置定时初值比如这些功能是通过一些“控制寄存器” 实现的,每个控制寄存器有8位(1个字节),相当于一个有8个开关的“开关柜”,每个开关实现一定的功能,比如“开关定时器”或“改变工作模式”等。
为了方便使用,我们会给不同的“开关柜”和里面的每个“开关”都取个名字比如:“一号配电柜”,“主发电机开关”同样,我们也给每个控制寄存器取名字,用于控制定时/计数器的寄存器一共有两个:一个叫“TCON”,也就是“定时/计数器控制寄存器”一个叫“TMOD”,也就是“定时/计数器工作模式控制寄存器”“定时/计数器工作模式控制”也就是控制它以“定时器”还是“计数器”方式工作。
而“定时/计数器控制”,主要用来控制定时/计数器的“启动”和“停止”等功能。
“模式控制”是用来控制工作方式的,而“控制”是用来控制开关的先看“定时/计数器控制寄存器”也就是“TCON”:TCON 从高到低,一共一个字节,8个位(第7位到第0位)其功能定义如下:7 6 5 4 3 2 1 0空TR1 空TR0 空空空空可见TCON 只使用了第4 位和第6 位,其他的位都没用到。
第6 位是“TR1”,是定时/计数器1 的开关第4 位是“TR0”,是定时/计数器0 的开关为1 表示开,为0 表示关例如我们要启动定时/计数器1写成程序就是TR1 =1;如果要关闭定时/计数器0,就是TR0=0;当然也可以一次操作整个寄存器,例如要同时开两个定时/计数器,则TCON = 0x50; // 0x50 = 0101 0000 ,可见第4和6位都是1,即TR0=1,TR1=1 如果要全关了,则:TCON = 0x00; // 0x00 = 0000 0000 ,TR0和TR1都是0再看“定时/计数器工作模式控制寄存器”,也就是TMOD 寄存器:TMOD寄存器也是一个字节,共8位,4 位一组分成两个完全相同的部分:高4 位用来控制定时/计数器1,低4 位用来控制定时/计数器0TMOD寄存器各位的定义如下:7 6 5 4 3 2 1 0GA TE T1/C M1 M0 GATE T0/C M1 M0GA TE是“门控”,用于设置是否需要触发信号,GA TE为1的时候,光打开开关TR1或TR0还不工作要有另外两个开门的引脚也为1才工作C/T 是“定时/计数”功能选择为1 表示计数器,为0 表示定时器例如我要让定时器1定时,定时器0计数,可以用这条语句:M1 和M0 是工作方式,一共4种方式第5、4位和第1、0位为两组工作方式设置位,分别控制定时/计数器1 和0 的工作模式M1 M0 共有4种组合,分别表示4种工作方式:M1 M00 0 13位定时/计数器,高8位在TH里,低5位在TL里0 1 16位定时/计数器,高位在TH,低位在TL1 0 自动重设初值的8位定时/计数器1 1 这个只能用在定时器0,定时器1没有这个模式,把定时器0当成两个8位定时/计数器M1 M0 为1 0 这种模式的工作方式解释一下:假如你有个闹钟,它每次定时都响一次,然后定的时间就丢了。
如果你想让它再响一次,还得重设初值,很不方便。
而当M1 M0 为1 0 时,每次闹铃后则不需要重设初值,它会自动装入上一次定时/计数的初值。
比如你设置了2 小时闹铃,闹完以后,它自动又设成了2小时,这样每隔2小时都会闹一次铃。
最后说一下定时/计数初值的设置和计数结果的提取。
51单片机的定时/计数器最多能保存16位二进制值就是两个字节,表示10进制的范围为0~65535每个定时/计数器的定时/计数值分别存放在两个8位寄存器里,分别叫TL 和TH,TL 用来存放低字节,TH 用来存放高字节定时/计数器0 的数据寄存器叫TL0 和TH0定时/计数器1 的数据寄存器叫TL1 和TH1当M1M0模式设置为8位定时/计数器时,只使用TL存放数据,表示十进制范围为0~255而当M1M0模式为13或16位定时/计数器时,使用TL存放低8位,TH存放高8位要说明一点:定时器的工作方式是“溢出”方式就是说只有定时器到了上限(8位为256,16位为65536)时才会“闹铃”(即产生计数中断事件),因此定时器的初值是用定时器最大值减去需要定时的周期数计算的,例如我们要定时50000 个周期,采用16位定时器,则定时器初值需设置为:65536 - 50000 = 15536就是说,定时器需要以15536 为初值开始工作,才能在经过50000个定时周期后“闹铃”。
由于这个初值要分别存放在两个8位寄存器TL和TH中,因此我们还需要把一个16位初值拆分成两个8位数值(低8位和高8位)才能“设置”到TL和TH里。