我们先来理解几个比较重要的概念:时间周期、指令周期、机器周期,以及系统时钟的工作原理。

时钟周期:

时钟周期也叫振荡周期或晶振周期,即晶振的单位时间发出的脉冲数,一般有外部的振晶产生,比如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。

计算机时钟的工作原理,单片机的周期与系统时钟的工作原理相关推荐

  1. 51单片机 外部时钟_基于51单片机的LCD12864显示模拟时钟

    今天要分享的仿真和程序是基于51单片机的LCD12864显示模拟时钟.公众号之前也分享过数字时钟,但是那些时钟都是采用数字显示的形式来显示时间,而今天分享一个采用LCD12864显示的模拟指针式时钟. ...

  2. android命令抹机原理,[原创]利用xhook安卓系统底层抹机原理

    大概原理是:先读取/proc/self/maps文件内容 正则匹配找到so文件路径和加载基址, 解析elf格式找到要hook的函数的地址替换成自己指定的函数地址//xh_core.c static v ...

  3. DSP学习笔记之系统时钟、定时器、GPIO篇

    \qquad写在前面,不管是C51.MSP430.32也好,DSP也好,总要有一个掌握的比较熟练,不能每次都复制粘贴别人的代码然后修修补补吧.不要再做Ctrl +C.Ctrl+V工程师.主要参考来自于 ...

  4. MSP432的系统时钟和简单系统定时

    目录 专栏 系统时钟和低功耗模式 时钟系统结构与原理 SYSTICK定时中断 SYSTICK相关寄存器 SYSTICK配置步骤 SYSTICK sdk相关 关于SYSTICK的例程 导入 例程 分析 ...

  5. 如何设置STM32的系统时钟(SYSCLK)

    目录 1.STM32F407 的时钟来源 1.1.HSI 时钟 1.2.HSE 时钟 1.3.主 PLL 时钟 2.时钟树 3.配置系统时钟 3.1.系统时钟有关寄存器 3.2.使用系统的默认配置 3 ...

  6. Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步

    目录 基础认识 常用命令 查看和修改Linux的时区 常见时区 timedatectl 时钟同步 用硬件时钟同步系统时钟: 用系统时钟同步硬件时钟: 同步网络时间 hwclock命令 语法 查看和修改 ...

  7. 配置系统时钟(stm32)

    一.使用HSE配置系统时钟的过程 1.开启HSE,并等待HSE稳定 __IO uint32_t HSEStartUpStatus = 0; // 使能HSE,开启外部晶振 RCC_HSEConfig( ...

  8. 基于STM32F103--时钟树详解和系统时钟内部流程解析

    前言        本次我们认识一下STM32F103的时钟树架构,以及系统时钟在内部的初始化是怎么处理的,大部分是自己收集和整理,如有侵权请联系我删除. 本博客内容原创,创作不易,转载请注明 1.初 ...

  9. STMF4编写系统时钟

    目录 STMF4时钟系统重点概要 HSE作为系统时钟配置方法(附带程序) 正点开发板晶振问题(不同频率晶振配置方法) STM F407时钟系统概要 时钟框图 设置系统时钟SYSCLK.设置AHB 分频 ...

最新文章

  1. 19 Handler 子线程向主线程发送信息
  2. Vim 的高级用法配置
  3. 基于TCP和多线程实现无线鼠标键盘-Socket(2)
  4. raid5 合适 多少块硬盘_分析Linux raid6同步成raid5导致数据丢失的情况
  5. verilog中~在判断中的作用
  6. Tiny4412 小试牛刀
  7. PHP Ctype函数
  8. 中国名气黑客网站目录
  9. 推荐50个超实用的 Chrome 扩展,建议收藏!
  10. Kinect的三维重建
  11. 任务计划服务程序在哪里
  12. win7计算机c盘搜索不到,win7系统上找不到C盘上的programdata文件夹的解决方法
  13. 详解图像二值化 函数threshold
  14. PyGmae:有限状态机实践(十二)
  15. 详解关于int a[2][3]={{1},{2,3}}二位数组运算的问题
  16. 天津地铁3号线领舞华苑板块再飞跃
  17. maven profile指定配置文件打包适用多环境
  18. 新浪微博、微信朋友圈、qq空间分享---qq空间分享
  19. Matlab 打开 Gige 工业相机连续采集数据 Bug解决
  20. java 匹配反斜杠_java正则表达式的反斜杠(\)匹配

热门文章

  1. 从零学习Nginx配置文件,呕心沥血w字长文
  2. matlab算法实现对等额本息和等额本金两种还款方式的计算
  3. Linux与数据结构 2019-4-14
  4. iOS二维码扫描/识别
  5. 使用node连接MongoDB的工具安装及配置
  6. epub格式电子书剖析之二:OPF文件构成
  7. 华为服务器销售怎么样,云服务器销售好做吗
  8. cf全屏下面桌面任务栏_还有玩CF时,下面会有任务栏。也就是说不能全屏!请问怎么回事...
  9. 谈谈eve-ng仿真模器
  10. 有了域名,怎么搭建自己的网站?