时钟周期:

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

stc单片机定时器实现歌声_单片机中各种周期的关系与定时器原理相关推荐

  1. spring 定时器设置停止_单片机MSP430入门-理论⑦--定时器模块-定时器A②

    单片机MSP430入门-理论⑦--定时器模块-定时器A② 上期大概给大家汇总介绍了,定时器模块中比较重要并且常用的定时器A,大概说了下定时器A的两种常用模式,比较模式和捕获模式 本期将继续介绍定时器A ...

  2. 单片机中断程序实例_单片机定时器中断实现长时间定时程序

    单片机定时器中断实现长时间定时程序 #include // 包含51单片机寄存器定义的头文件 sbit D1=P2^0; //将D1位定义为P2.0引脚 unsigned char Countor; ...

  3. 单片机知识点总结框图_单片机原理及应用期末考试必考知识点重点总结

    单片机概述: 单片机是微单片微型计算机的简称,微型计算机的一种. 它把中央处理器( CPU ) , 随机存储器( RAM ) , 只读存储器( ROM ) , 定时器 计数器以及 1\0 接口,串并 ...

  4. vb调用oracle 触发器,单片机VB编程实例_单片机控制的数字触发器

    摘要:介绍了8051单片机在晶阐管触发电路中的应用,同时有单片机与上位机进行串口通讯的软件设计.由软件控制可产生不同顺序的6组触发脉冲. 关键词:单片机 VB 晶阐管 数字触发器 电力电子技术研究的内 ...

  5. 单片机知识点总结框图_单片机基础知识

    什么是单片机: 顾名思义,单片机中的"单片"就是只有一个芯片, "机"就是指计算机,只有有一个芯片,她却具有简单计算机的功能,这就叫做单片机,也教微处理器微控制 ...

  6. wxpython视频教程-单片机C语言入门_单片机教程_单片机编程语言 - C语言网

    本教程由 继承叔 编写,面向对单片机有基础认知的初学者! 1.单片机了解 单片机是一块集成电路的控制芯片,我们熟知的家电例如洗衣机的定时控制和滚筒运作,电饭煲的保温功能和鸣叫提醒,电冰箱,空调等等这些 ...

  7. 单片机烧录软件编写_单片机技术系列之一:单片机概述

    按控制要求设计好单片机电路原理图后,还要依据电路原理图将实际的单片机电路制作出来.制作单片机电路有两种方法:一种是用电路板设计软件(如Protel99SE软件)设计出与电路原理图相对应的PCB图(印制 ...

  8. 单片机彩灯移动实验_单片机动态控制64个彩灯实验报告

    目录 一.课题名称---------------------3 二.设计目的---------------------3 三.系统原理图--------------------3 四.方案论证---- ...

  9. 单片机定时器精准定时_单片机很好玩6,制作一个精确的“定时器”,为什么这么重要?...

    单片机常被称作 MCU,MCU 的全称是 Micro Control Unit,就是微型控制器的意思.顾名思义,单片机常被用于控制一些器件工作,因此物联网的终端,或者其他一些智能机器,都是离不开单片机 ...

  10. 计算机行业中的烧写怎么翻译,单片机怎么烧录程序_单片机烧录程序步骤说明...

    描述 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器RAM.只读存储器ROM.多种I/O口和中断系统.定时器/ ...

最新文章

  1. 【Qt】Qt程序编译成功,执行时报错:程序异常结束,crashed
  2. 修改RHEL7/centos7网卡为eth0
  3. 博客园能有这种背景就很强大了!
  4. linux18.2安装界面,Ubuntu 18.10下安装Grub Customizer 5.1.0配置grub2图形化界面
  5. LeetCode 527. 单词缩写(Trie树)
  6. Ranger开源流水线docker化实践案例
  7. 网易云音乐重新上架苹果App Store,安卓版仍下架中
  8. Linux 线程及线程间通信
  9. [计算机网络]-网络层-1
  10. MATLAB指纹识别文献综述
  11. FPGA 学习笔记(十一) VGA驱动的实现
  12. mat1 and mat2 shapes cannot be multiplied (128x432 and 576x64)的解决
  13. java 时间格式检查
  14. 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)
  15. Unity3D_最简单的开始界面_结束界面
  16. 没有windows安装光盘怎么修复计算机,教你用Windows XP的安装盘修复系统
  17. hive建表报错FAILED: ParseException line 2:0 Failed to recognize predicate ‘date‘. Failed rule: ‘identifi
  18. 实现SuperMap GIS 周边查询
  19. 我放弃了VMware
  20. 一个好用的 JSON 编辑器 JsonEditor V1.03.2

热门文章

  1. 汇总|实时性语义分割算法(共24篇)
  2. 第三章:数组[4Arrays]
  3. CentOS7安装python3.6.6(解决所有安装异常情况!!!)
  4. Ubuntu16.04 安装显卡驱动 cuda,cudnn
  5. 【转】缺少servlet-api.jar包
  6. 一筐鸡蛋筐拿鸡蛋的问题
  7. 二维数组,字符串,字符数组
  8. 多个Excel文件合并成一个文件
  9. 初步接触Java中的Lambda表达式
  10. ARCGIS 分区统计的时候,出现无法解决的重大问题,程序崩溃