计算机时钟的工作原理,单片机的周期与系统时钟的工作原理
我们先来理解几个比较重要的概念:时间周期、指令周期、机器周期,以及系统时钟的工作原理。
时钟周期:
时钟周期也叫振荡周期或晶振周期,即晶振的单位时间发出的脉冲数,一般有外部的振晶产生,比如12MHZ=12×10的6次方,即每秒发出12000000个脉冲信号,那么发出一个脉冲的时间就是时钟周期,也就是1/12微秒。通常也叫做系统时钟周期。是计算机中最基本的、最小的时间单位。
在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。
机器周期:
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。
在标准的51单片机中,一般情况下,一个机器周期等于12个时钟周期,也就是机器周期=12*时钟周期,(上面讲到的原因)如果是12MHZ,那么机器周期=1微秒。单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。
据 小编了解机器周期不仅对于指令执行有着重要的意义,而且机器周期也是单片机定时器和计数器的时间基准。例如一个单片机选择了12MHZ晶振,那么当定时器的数值加1时,实际经过的时间就是1us,这就是单片机的定时原理。
但是在8051F310中,CIP-51微控制器内核采用流水线结构,与标准的8051结构相比指令执行速度有很大的提高。在一个标准的8051中,除MUL和DIV以外所有指令都需要12或24个系统时钟周期,最大系统时钟频率为12-24MHz.而对于CIP-51内核,70%的指令的执行时间为1或2个系统时钟周期,只有4条指令的执行时间大于4个系统时钟周期。所以在计算定时器的值时要注意这里的变化。
指令周期:
指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
系统时钟:
系统时钟:系统时钟就是CPU指令运行的频率,这个才是CPU真正的频率。
单片机内部所有工作,都是基于由晶振产生的同一个触发信号源,由这个信号来同步协调工作步骤,我们把这个信号称为系统时钟,系统时钟一般由晶振产生,但在单片机内部系统时钟不一定等于晶振频率,有可能小于晶振频率,也有可能大于晶振频率,具体是多少由单片机内部结构决定,正常情况和晶振频率会存在一个整数倍关系。系统时种是整个单片机工作节奏的基准,它每振荡一次,单片机就被触发执行一次操作。
一般来说,单片机只有一个时钟源。用了外部晶振,就不用内部RC,用了内部RC,就不用外部晶振。振荡器振荡,产生周期波。单片机在这样的周期波的作用一下有规律的一拍一拍的工作,波的频率越高,单片工作得就越快,波的频率越低,单片机工作得就越慢。
有了以上的概念以后,就可以正确的理解定时器的工作原理了,在8051F310单片机中,有3个定时器,如果定时器1工作在模式1下,如工作模式1下,是16位的计时器,最大数值是65535,当再加1时(=65536),就会发生溢出,产生中断,所以如果我们要它计1000个数,那么定时初值就是65536-1000,结果就是64536,这个值送给TH、TL,因为是16进制的,所以高位是64536/256取商,低位是64536%6取余。
再者,就是每一计数的时间是多久?一般我们取12M晶振时,一个周期刚好是1us,计数1000个就是1ms,这是因为标准的51单片机是12时钟周期的(STC有6时钟和1时钟方式)。那么,如果我们晶振是12M,就比较好算,如果是其它的,就用12去除好了。比如是6M的,那么就是12/6=2,每个计数是2us,那么你要定时1ms就只要计数500个即可以。
定时器的初值跟定时器的工作方式,跟晶振频率都有关系。一个机器周期Tcy=晶振频率X12,计数次数N=定时时间t/机器周期Tcy,那么初值就X=65536-N,得出的数化成十六进制就行了。这里是用定时器O工作方式1做例子,如果是其它工作方式,就不能是65535了。工作方式0是8192,方式2,3是256.这里有一个公式:
TH=(65536-time/(12/ft))/256
其中,time就是要延时的100ms(要取100000us),ft是晶振频率。这个式子又可以简化成
TH=(65536-time*ft/12)/256
TL=(65536-time*ft/12)%6
在一本书上还看到了这样计算定时初值的:
TH0=-(50235/256);//重装100ms定时初值
TL0=-(50235%6);///这里使用的6M晶体,
这里是6M晶体,延时100ms,那么按上面讲的原理,6M是每个计数为2us,100ms定时就是计数50000个。
那么,定时器初值要65536-50000=15536,转成16进是3CB0.这就是要送给TH(=3C)和TL(=B0)的值。
程序中写TH0=-(50235/256);其实它是这样的TH0=0x100-(50235/256);在51中,取负数,其结果就是它的值取反+1,也可以用0x100(十进制的256)去减,结果是多少呢?结果就是3C。
计算机时钟的工作原理,单片机的周期与系统时钟的工作原理相关推荐
- 51单片机 外部时钟_基于51单片机的LCD12864显示模拟时钟
今天要分享的仿真和程序是基于51单片机的LCD12864显示模拟时钟.公众号之前也分享过数字时钟,但是那些时钟都是采用数字显示的形式来显示时间,而今天分享一个采用LCD12864显示的模拟指针式时钟. ...
- android命令抹机原理,[原创]利用xhook安卓系统底层抹机原理
大概原理是:先读取/proc/self/maps文件内容 正则匹配找到so文件路径和加载基址, 解析elf格式找到要hook的函数的地址替换成自己指定的函数地址//xh_core.c static v ...
- DSP学习笔记之系统时钟、定时器、GPIO篇
\qquad写在前面,不管是C51.MSP430.32也好,DSP也好,总要有一个掌握的比较熟练,不能每次都复制粘贴别人的代码然后修修补补吧.不要再做Ctrl +C.Ctrl+V工程师.主要参考来自于 ...
- MSP432的系统时钟和简单系统定时
目录 专栏 系统时钟和低功耗模式 时钟系统结构与原理 SYSTICK定时中断 SYSTICK相关寄存器 SYSTICK配置步骤 SYSTICK sdk相关 关于SYSTICK的例程 导入 例程 分析 ...
- 如何设置STM32的系统时钟(SYSCLK)
目录 1.STM32F407 的时钟来源 1.1.HSI 时钟 1.2.HSE 时钟 1.3.主 PLL 时钟 2.时钟树 3.配置系统时钟 3.1.系统时钟有关寄存器 3.2.使用系统的默认配置 3 ...
- Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步
目录 基础认识 常用命令 查看和修改Linux的时区 常见时区 timedatectl 时钟同步 用硬件时钟同步系统时钟: 用系统时钟同步硬件时钟: 同步网络时间 hwclock命令 语法 查看和修改 ...
- 配置系统时钟(stm32)
一.使用HSE配置系统时钟的过程 1.开启HSE,并等待HSE稳定 __IO uint32_t HSEStartUpStatus = 0; // 使能HSE,开启外部晶振 RCC_HSEConfig( ...
- 基于STM32F103--时钟树详解和系统时钟内部流程解析
前言 本次我们认识一下STM32F103的时钟树架构,以及系统时钟在内部的初始化是怎么处理的,大部分是自己收集和整理,如有侵权请联系我删除. 本博客内容原创,创作不易,转载请注明 1.初 ...
- STMF4编写系统时钟
目录 STMF4时钟系统重点概要 HSE作为系统时钟配置方法(附带程序) 正点开发板晶振问题(不同频率晶振配置方法) STM F407时钟系统概要 时钟框图 设置系统时钟SYSCLK.设置AHB 分频 ...
最新文章
- 19 Handler 子线程向主线程发送信息
- Vim 的高级用法配置
- 基于TCP和多线程实现无线鼠标键盘-Socket(2)
- raid5 合适 多少块硬盘_分析Linux raid6同步成raid5导致数据丢失的情况
- verilog中~在判断中的作用
- Tiny4412 小试牛刀
- PHP Ctype函数
- 中国名气黑客网站目录
- 推荐50个超实用的 Chrome 扩展,建议收藏!
- Kinect的三维重建
- 任务计划服务程序在哪里
- win7计算机c盘搜索不到,win7系统上找不到C盘上的programdata文件夹的解决方法
- 详解图像二值化 函数threshold
- PyGmae:有限状态机实践(十二)
- 详解关于int a[2][3]={{1},{2,3}}二位数组运算的问题
- 天津地铁3号线领舞华苑板块再飞跃
- maven profile指定配置文件打包适用多环境
- 新浪微博、微信朋友圈、qq空间分享---qq空间分享
- Matlab 打开 Gige 工业相机连续采集数据 Bug解决
- java 匹配反斜杠_java正则表达式的反斜杠(\)匹配