时钟周期机器周期指令周期12M晶振和1us有啥关系
时钟周期
时钟周期也叫振荡周期或晶振周期,即晶振的单位时间发出的脉冲数,一般有外部的振晶产生,比如12MHZ=12×10的6次方,即每秒发出12000000个脉冲信号,那么发出一个脉冲的时间就是时钟周期,也就是1/12微秒。通常也叫做系统时钟周期。是计算机中最基本的、最小的时间单位。
在传统的8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。
机器周期
单片机在执行指令的过程中,其实需要完成很多个操作,比如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。传统8051系列单片机的一个机器周期由6个S周期(状态周期)组成。节拍和状态周期前面已经介绍过了。传统8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。
在传统的51单片机中,一般情况下,1个机器周期=12个时钟周期。在一个单片机最小系统中,如果外接的是12MHZ的晶振,那么机器周期=1微秒(前几天问小编为什么是1us的小伙伴到此处来领取答案)。
单片机工作时,是一条一条地从ROM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。
机器周期不仅对于指令执行有着重要的意义,而且机器周期也是单片机定时器和计数器的时间基准。例如一个单片机选择了12MHZ晶振,那么当定时器的数值加1时,实际经过的时间就是1us,这就是单片机的定时原理。
指令周期
指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
系统时钟
系统时钟:系统时钟就是CPU指令运行的频率,这个才是CPU真正的频率。
一般来说,单片机只有一个时钟源.用了外部晶振,就不用内部RC,用了内部RC,就不用外部晶振。振荡器振荡,产生周期波.单片机在这样的周期波的作用一下有规律的一拍一拍的工作,波的频率越高,单片工作得就越快,波的频率越低,单片机工作得就越慢。
单片机内部所有工作,都是基于由晶振产生的同一个触发信号源,由这个信号来同步协调工作步骤,我们把这个信号称为系统时钟,系统时钟一般由晶振产生,但在单片机内部系统时钟不一定等于晶振频率,有可能小于晶振频率,也有可能大于晶振频率,具体要看单片机的实际设计及其原理。比如传统的51单片机,其实际的系统时钟就只有晶振频率的1/12,;比如大家觉得比较高级的STM32单片机,内部具有时钟倍频电路,可以通过程序设置系统时钟是实际晶振的多少倍,常见的STM32开发板上实际的晶振都是8Mhz的,可以通过倍频,实际的系统时钟都是运行在72Mhz。
系统时钟是整个单片机工作节奏的基准,它每振荡一次,单片机就被触发执行一次操作。
12T模式和1T模式
前面我们说的绝大部分都是传统51单片机的例子,现在传统51单片机已经可以收藏了,51单片机中小伙伴们最常见应该是手推车(STC)。STC51的单片机基本已经把51内核压榨到了极致,本节标题里说的额12T和1T也就是STC提出来的。STC把绝大部分的汇编指令所需要的的时钟周期压缩到了1个时钟周期,而传统的51单片机是最快的指令都需要12个时钟周期,所以STC官方就把他们的单片机叫做是1T的单片机。说到1T和12T,还有一个常用到的就是在用STC单片机的定时器时,和定时器相关的寄存器中专门有设置定时器是1T模式还是12T模式,如果是1T模式,而我们计算初值时又计算为了12T模式,那这样出来的定时器会比实际的速度快12倍,在使用时需要注意。
总结
说了那么多的周期,其这些周期和一个电子元件直接相关,那就是晶振 。以上说的所有的时间单元,都和晶振频率相关。所以在编程时一定记得注意自己板子上的晶振频率是多少。
最后一点说明,因为生产制造的原因,实际的晶振频率和标称的数值会有一定的差距,因为任何物品在制作时都会产生误差。既然是误差,那就只要在允许的范围内就能正常使用,不会对系统产生大的影响。也正是因为这个误差,用单片机定时器制作的时钟,你会发现时钟走上几天后就会出现时间的偏差。这正是目前市面上的绝大部分电子时钟都会有走时不精准的根本原因,就算用了RTC时钟芯片,那时钟芯片的时间来源也是晶振产生,常见的RCT时钟晶振的频率是32.768Khz。
单片机定时器计数器基本原理
目前常用的单片机中往往都配备了定时器/计数器。在AT89S52芯片内包含有三个16位的定时器/计数器:T0、T1和T2,其核心是加1计数器。我们主要要求掌握T0和T1的结构和功能。学习中要注意从电路结构上来理解功能的实现。定时器/计数器方式寄存器TMOD和定时器/计数器控制寄存器TCON是用以设定定时器/计数器的工作方式、定时或计数功能,控制启动或停止以及产生溢出中断的重要模块,应该对这两个寄存器中的逐位的定义和功能进行学习和掌握。
一、定时器/计数器的功能
AT89S52单片机定时器/计数器的基本部件是两个8位的计数器(T1计数器分为高8位TH1和低8位TL1,T0计数器的高8位是TH0,低8位是TL0)。如图1所示。
定时器/计数器的核心是一个加1计数器,在作定时器使用时,它对机器周期进行计数,每过一个机器周期计数器加1,直到计数器计满溢出。
当它用作对外部事件计数时,计数器接相应的外部输入引脚T0(P3.4)或T1(P3.5)并在每个机器周期的S5P2时采样,当采样到1—0的负跳变时,计数器加1。
二、定时器/计数器的结构
AT89S52单片机内部的定时/计数器的结构如图2所示。定时器T0由特殊功能寄存器TL0(低8位)和TH0(高8位)构成,定时器T1由特殊功能寄存器TL1(低8位)和TH1(高8位)构成。每个寄存器均可单独访问。
图2 定时器/计数器的内部结构
一、定时/计数的基本概念
定时和计数是日常生活和生产中最常见和最普遍的问题。
定时器和计数器功能基本上都是使用相同的逻辑实现的,而且这两个功能都包含输入的计数信号,本质上都是对脉冲计数。计数器用来计数并指示在任意间隔内输入信号(事件)的个数,而定时器则对规定间隔内输入的信号个数进行计数,用来指示经历的时间。
在单片机中,定时/计数器作定时功能用时,对机器周期计数(由单片机的晶体振荡器经过12分频后得到),因每次计数的周期是固定的,所以根据它计数的多少就可以很方便的计算出它计数的时间。如图1所示。
图1 计数与定时
二、溢出的基本概念
从一个生活中的例程看起:一个水盆在水龙头下,水龙头没关紧,水一滴滴地滴入盆中。盆的容量是有限的,水滴持续落下,盆中的水持续变满,最终有一滴水使得盆中的水满了,这就是“溢出”。
如果一个空的盆要1万滴水滴进去才会满,开始滴水之前可以先放入一部分水,叫做计数初值。如果现在要计数9000,那么可以先放入1000滴水,也就是计数初值为1000,再计数9000就可以溢出产生中断。
单片机中通常采用计数初值的办法,如果每个脉冲是1微秒,则计满256个脉冲需时256微秒,如果现在要定时100微妙,只要在计数器里面先放进156,然后计数100就可以就可以溢出产生中断了。如图2所示。
图2 定时器/计数器的溢出
三、定时/计数的主要方法
实现定时或计数,主要有三种方法。
(1)软件延时
软件延时利用微处理器执行一个延时程序段实现。因为微处理器执行每条指令都需要一定时间,通过指令的循环实现软件延时。软件定时具有不使用硬件的特点,但却占用了大量CPU时间。另外,软件定时精度不高,在不同系统时钟频率下,执行一条指令的时间不同,同一个软件延时程序的定时时间也会不同。
(2)硬件定时
硬件定时采用数字电路中的分频器将系统时钟进行适当分频产生需要的定时信号,也可以采用单稳电路或简易定时电路(如常用的555定时器)由外接RC(电阻、电容)电路控制定时时间。这样的定时电路较简单,利用不同分频倍数或改变电阻阻值、电容容值使定时时间在一定范围内改变。
(3)可编程的硬件定时
可编程定时器/计数器最大特点是可以通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。这种电路不仅定时值和定时范围可用程序改变,而且具有多种工作方式,可以输出多种控制信号,具备较强的功能。
相关问答
单片机 工作主频12MHz, 定时器 计数器T0工作方式1,计算定时10ms的初值是多少?(2^16—计数初值)╳晶振周期╳12=定时时间(2^16—计数初值)╳1/(12╳10^6)╳12=10Ms=10*10^(-3)S计数初值=2^16—10^4=55536=D8F0HTH0=...
【 单片机 计数值问题,注意不是计数初值.已知晶振频率为12MHz,...[最佳回答]1如果是1毫妙可以采用方式1公式为:定时时间=(65536-X)微妙可以计算1毫妙=1000微妙=65536-X则X=645362如果是1微妙可以采用方式2公式为:定...
一个关于 单片机 的定时中断的问题.有这样一句话:假设时钟频率...[最佳回答]51单片机在内部要对晶振12MHZ,所以12M晶振除以12就是1M,即1秒钟有1M个时钟周期,每个时钟周期就是10^-6秒,即1us.TH0和TL0分别为定时器T0的高八位和...
单片机 中 定时器 的初值产生1ms的定时,到底是65536-1000还是65535-1000为什么啊?急急急?定时器计数最大值为65535,再计一次则溢出,产生中断。也就是说初值设置成65535(65536-1)时,定时1个机器周期。所以正确答案是65536-1000,此时定时1000个机...
12mhz的51 单片机 如何用方式0一次定时1ms?对于一个12MHz的51单片机,要使用定时器0的方式0(16位定时器模式)来定时1ms,我们需要进行一些计算和设置。首先,我们计算定时器0需要定时的初始值:方式0是...
51 单片机 用C语言或者汇编程序如何实现定时1秒?如何设定初始值?如何计算?如何输出方波?如何对外部?使用定时器实现1秒定时;初始值要看单片机配置的晶振频率了,若12M晶振,初始值为TH0=0x3c;TL0=0xb0;这才是50ms,还要一个单元做计数器,计数20次才是1秒方波...
单片机 一秒是肿么计算得来的?-ZOL问答一般利用定时器溢出中断进行计算。1S/机器周期(执行一次nop所需时间)=(定时器最大值-初始值)。定时器最大值根据你使用的定时器位宽而定,一般51系列的只有16...
8051 单片机定时器 计算器的门控信号G ATE设置为1时。定时器如何启动?设8051单片机定时器0的门控信号GATE设置为1,定时器0如何启动?1、设置TR0=1,但这时候是不启动的,因为还需要一个条件。2、给INT0引脚输入高电平,这时候才启...
单片机 定时计数器最大定时时间怎么算?单片机定时计数器最大定时时间取决于所用时钟周期T和定时器位长,比如T=10mS,定时器位长8位(也就是数字最大设置为255),每个时钟到来时,定时计数器采用减1操...
关于 单片机定时器 的求算,怎么算出来的?TL0=64536除以256=252.09375说是取余数。这个余数是多少。TL0=多少有人说是18(十六进制)我不知是乍么算来的,取整数,是除以256后的整数部分,余数是没法再...