从上面定时器/计数器的结构图中我们可以看出,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)输入。
定时计数器的原理:
一、定时器/计数器为定时工作方式时,
计数器的加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。此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个由1至0的跳 变需要两个机器周期,故外部事件的最高计数频率为振荡频率的1/24。例如,如果选用12MHz晶振,则最高计数频率为0.5MHz。虽然对外部输入信号 的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。
当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计满溢出,才可能中断CPU 当前操作。CPU也可以重新设置定时器工作方式,以改变定时器的操作。由此可见,定时器是单片机中效率高而且工作灵活的部件。
综上所述,我们已知定时器/计数器是一种可编程部件,所以在定时器/计数器开始工作之前,CPU必须将一些命令(称为控制字)写入定时/计数器。将控制字写入定时/计数器的过程叫定时器/计数器初始化。在初始化过程中,要将工作方式控制字写入方式寄存器,工作状态字(或相关位)写入控制寄存器,赋定时/计 数初值。下面我们就提出的控制字的格式及各位的主要功能与大家详细的讲解。
控制寄存器 定时器/计数器T0和T1有2个控制寄存器-TMOD和TCON,它们分别用来设置各个定时器/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。其中,TCON寄存器中另有4位用于中断系统。
关键字:51单片机 定时器 计数器
引用地址:
51单片机中的定时器和计数器
推荐阅读最新更新时间:2024-03-16 16:18
51单片机中什么是bit和sbit?_bit和sbit区别
回顾C语言发现在单片机中有bit sbit sfr 等一些类型! 问题:什么是bit和sbit?他们有什么区别? bit : 编译时分配空间 sbit 只能在外部定义全局变量。 sfr(特殊功能寄存器)的bit。SFR是系统指定的内存地址。 bit 动态分配的,有编译器来指定内存地址。 bit和sbit都是C51扩展的变量类型。 sbit 要在最外面定义,就是说必须定义成外部变量.sbit定义的是SFR(特殊功能寄存器)的bit sbit更像是类型定义,不像是变量定义。 sbit: 指示说明性说明 bit 可以在外部或内部定义。
[单片机]
51单片机做的智能时钟具有闹钟功能(DS1302+DS18B20+LCD1602)
本贴针对学完单片机并且有读懂代码的非新手同学。本人目前放寒假,这个是本人在上个学期的单片机课上要求做的综合实验,现在重新修改了下增加了菜单目前测试毫无问题可以完美使用。有志向做闹钟的同学可以参考一下,原码上由本人写的大量注释可以方便看懂。 使用了LCD1602、DS1302、DS18B20用来测试温度、内部含闹钟系统但本人没有做EEPROM有需要的同学可以自行添加。 单片机源程序如下: #include reg52.h #include key.h #include LCD1602.h #include DS1302.h #include music.h #include DS18B20.H #define no
[单片机]
动态扫描方法和定时器1在数码管的前三位显示出秒表
/* 用动态扫描方法和定时器1在数码管的前三位显示出秒表 */ #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char uint closedu,closewe; uchar code wetable ={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; uchar code dutable ={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}
[单片机]
51单片机内部资源
通过这篇博客对这一段时间对51单片机的学习做一定总结,这是对单片机内部资源的一定总结:单片机的内部资源总体上分为两部分:基本功能和服务性功能。如下图所示; 对于基本的器件有:LED灯,蜂鸣器、继电器、步进电机和按键。其中通过LED的不同组合方式可以扩展出LED流水灯、数码管和点阵。其实基本的器件的工作方式是基本相同的,只是对电平表现出的不同输出方式。其中数码管可以通过动态和静态两种方式显示;静态显示为一对一形式,动态显示为一对多形式的循环显示。其中点阵的表现方式其实和数码管的动态显示是相同的,只是点阵和数码管的LED灯的排列方式不同而已。对于X*Y形式的按键扫描方法是:行列交叉取点发。 上述都为一些基本器件,为了方便和更加
[单片机]
NRF52840学习历程(六)RTC 实时计数器(滴答定时器)
开发板:初雪的100出头那块 NRF52840 EVAL KIT 下载工具:JINLK V11(最好是JLINK V9以上 也有人用JLINK OB也行,其他的下载器诸如STLINK,DAP不建议用) 版本号: KEIL5编程环境,CMSIS为5.3.0, NRF52840的CMSIS为8.35.0 参考资料: NRF52840-Eval-Kit-Schematic.pdf(原理图) nRF5_SDK_17.0.2_d674dde(官方例程) nRF5_SDK_17.0.0_offline_doc(官方文档) nRF52840_PS_v1.1.pdf(官方数据手册) RTC 实时计数器 32.768KH
[单片机]
51单片机I/O口使用经验
按常规,在51端口(P1、P2、P3)某位用作输入时,必须先向对应的锁存器写入1,使FET截止。一般情况是这样,也有例外。所谓IO口内部与电源相连的上拉电阻而非一常规线性电阻,实质上,该电阻是由两个场效应管并联在一起:一个FET为负载管,其阻值固定;另一个FET可工作在导通或截止两种状态(姑且叫可变FET)。使其总电阻值变化近似为0或阻值较大(20千欧--40千欧)两种情况。当和端口锁存器相连的FET由导通至截止时,该阻值近似为0,可将引脚快速上拉至高电平;当和锁存器相连的FET由截止至导通时,该电阻呈现较大阻值,限制了和端口锁存器相连的FET的导通电流。 51I/O口作为输入端和外部信号相连有时必须考虑上述特性,本人在设计LT
[单片机]
51单片机-按键部分(3)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 1
[单片机]
c51中定时器工作时如何使用T0脚输入脉冲信号?
嵌入式系统中,定时器是一种常用的设备,可以实现各种时间控制功能,如计时、计数、产生中断等。8051单片机中有两个定时器:T0和T1,其中T0定时器主要用于计时和计数操作,可以通过T0脚输入脉冲信号来控制定时器的工作。 T0脚是单片机的P3.4口,既可以作为普通的输入输出口,也可以作为T0定时器的外部输入引脚。当T0脚作为定时器的外部输入引脚时,可以通过输入的脉冲信号来控制定时器的计数。在使用T0脚输入脉冲信号时,需要采取一些措施来确保信号的稳定性和正确性。 首先,需要确定输入脉冲信号的频率。在使用T0脚输入脉冲信号时,需要将信号的频率与定时器的工作频率相匹配。具体来说,当定时器使用外部时钟源时,其工作频率为外部时钟源频率的一半,因
[单片机]