背景:51单片机引出的概念。
1 机器周期
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期(如单片机中“计数器”完成加1这个过程也是一个机器周期)。一般情况下,一个机器周期由若干个S周期(时钟周期)组成。通常用内存中读取一个指令字的最短时间来规定CPU周期,(也就是 计算机通过内部或外部总线进行一次信息传输从而完成一个或几个微操作所需要的时间)),它一般由12个时钟周期组成。
2 时钟周期
时钟周期=1秒/晶振频率,晶振频率的值即为时钟频率的值。因此单片机的机器周期=12秒/晶振频率。
3 晶振频率
单片机开发板、学习板成型之时相应的晶振频率也已经被确定了。51单片机常用的晶振频率有11.059 2MHz、12MHz或其它值,^-^。
4 定时器初值计算
定时器一旦被启动,它就会在原来初值的基础之上加1,当计满时重新归0。51单片机的定时器寄存器为16位,假设此51单片机的晶振频率为12MHZ,则根据机器周期概念及机器周期、时钟周期、晶振频率关系可知机器周期(即计数一次的时间)= 12 * (1 / 12MHZ) = 1us。这就表明,此51单片机的定时寄存器实现加1操作这个过程将要花1us的时间[ “计数这个硬件结构”达到加1的结果需要12个脉冲(或高电平) 么 ],如果此16位寄存器从0开始计数,则计到此寄存器下次为0时需要计2的16次方(65536)个数(计满只需要65535个数),所以定时器一次最多可以计时65536us。
如果现在需要定时器每次定时时间T少于65536us,则需要给定时器寄存器设一个初值N。根据计m个数就对应m us可得 N = (65536 - T)。得到的N值就是需要装入定时器寄存器的值。
咱们的51单片机定时器寄存器为16位,分高8位THn和低8位TLn(n=0, 1, 2).....,一般咱还得以8位为单位进行装值。将高8位THn装入N / 256(取模),将低8位TLn装入 N % 256即可,这两种运算得到的结果都是10进制的,将得到的值换算为二进制(或16)再装入高、低8位。得到定时器初值计算公式:
THn = (65536 - T) / 256
TLn = (65536 - T) % 256
其中THn,TLn表示响应定时器寄存器的高低8位。T表示需要被定时的微秒数, ‘/’表示取模运算, ‘%’表示取余运算
为什么对高8位取模对低8位取余就可以呢?
图1. N 取模 取余原理图
图中将8个二进制位看成一个单位,低8位表示数的范围[0, 255],高8位表示数的范围[0, 255 * 256],得到高8位是低8位的256倍。不防将此16位表示的十进制数看成256进制数。,然后对数的求模值放在256位(此位的值等于实际值(8位二进制换算得来)乘以权值256),对数的求余放在个位(此位的值等于实际值(8位二进制换算得来)乘以权值1),然后将得来的数求和就是此数了。就相当于一个十进制数K一样,K取10 的模得到十位的值,K取10的余得到个位的值。没注意就想到了这点,忽悠出来一个256进制数的求模求余算法。
我猜一下:我觉得关于十进制数的算法应该是符合任意一种进制数的算法的,小学的数学只是以十进制为载体,思想可用于任意进制数,然后数也可以是任意进制的,看此进制数在现实生活中的用途来决定其出现的频率了
关键字:机器周期 时钟周期 晶振频率 定时器 初值计算
引用地址:
51 机器周期 时钟周期 晶振频率 定时器初值计算
推荐阅读最新更新时间:2024-03-16 14:53
51单片机流水灯C语言源程序
************************************************************** 文件名称:flash_led.c 文件说明:流水灯C程序 编写日期:2006年10月5日 程序说明:MCU采用AT89S51,外接12M晶振,P1口输出 *************************************************************/ #include //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay
[单片机]
51 单片机综合学习系统之 1602字符型液晶显示篇
在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算 器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、 LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应 用。 在单片机系统中应用晶液显示器作为输出器件有以下几个优点: 显示质量高 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器 (CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会
[单片机]
单片机课程设计-ATMEL51系列单片机编程器
用单片设计过很多东西,可以说把AT单片机(包括AVR单片机)的所有外设资源都使用过了,所以在寻思着要设计一个什么样的东东?? 有次去面试,我对面试官说我设计过一块开发板,然后那面试官直接问了个核心问题:这个编程器的固件是你自己写的吗?一下子就问到了痛处。是的,编程器固件不是自己写的,那为什么不自己设计一个呢? 我说的自己设计是包括硬件电路、单片机程序以及电脑端界面等等所有东西全部自己DIY。当一个真正的DIYer。所以我动手了,用了几天几夜时间弄了一个可以支持两种芯片(AT89S51 AT89S52) 的基于ISP下载的编程器 首先要说的是,要设计个编程器, 这方面的资料在网上基本是找不到的,估计是大家不想开源(open sou
[单片机]
关于Stm32定时器+ADC+DMA进行AD采样的实现
注:此STM32单片机为STM32F103系列的 Stm32的ADC有DMA功能这都毋庸置疑,也是我们用的最多的!然而,如果我们要对一个信号(比如脉搏信号)进行定时采样(也就是隔一段时间,比如说2ms),有三种方法: 1、使用定时器中断每隔一定时间进行ADC转换,这样每次都必须读ADC的数据寄存器,非常浪费时间! 2、把ADC设置成连续转换模式,同时对应的DMA通道开启循环模式,这样ADC就一直在进行数据采集然后通过DMA把数据搬运至内存。但是这样做的话还得加一个定时中断,用来定时读取内存中的数据! 3、使用ADC的定时器触发ADC转换的功能,然后使用DMA进行数据的搬运!这样只要设置好定时器的触发间隔,就能实现ADC定时采样转换
[单片机]
8051单片机开发工具DIY
引 言: 目前介绍单片机应用的文章很多,但介绍单片机开发工具制作的文章却较少。由于单片机是一门实践性很强的课程,如果采用传统的开发模式,则要购买价格昂贵的仿真器、编程器等开发工具来作实验。其实由于芯片功能的日益完善,我们可以利用芯片的在系统编程(ISP)功能制作出实用而低价的开发工具。本文旨在帮助DIY爱好者开发制作出适合自己的开发工具。 1 当前常用开发模式 目前,基本上有两种开发模式可供选择:用仿真器、用编程器。 ① 用仿真器。优点:方便,可以设置断点,可以观察存储器及寄存器的内容。缺点:价格昂贵,不同类型的单片机要购买不同的仿真器;仿真器终究不是单片机,有时代码在仿真器上能通过,但在单片机中不能正常工作,反而增加了调
[单片机]
51单片机--LED类编程技巧
首先点阵:(以最简单的8X8为例,16X16的以后再说) 8X8点阵 个人感觉点阵需要注意的地方有: 第一个就是驱动点阵的方式 我认为8X8点阵的驱动程序分为行扫描和列扫描两种。 比如行扫描就是用一层for循环: 先选中第一行,然后送入这一行的数据,再选择第二行,然后送入第二行数据,如此循环下去,直至显示完一个屏幕(即8行),同时记得要消隐和微延时(后面会说消隐和微延时),列扫描同理。如图是代码示例: 8X8点阵,无滚动效果 第二个就是滚动效果的实现。 思路是: 一:扫描函数不变,每扫描一个屏幕,所有数据移动一位;(代码实现简单) 二:数据不变,每次读取数据的起始位置移动一
[单片机]
基于C8051F020的示波器监控程序设计
设计采用高性能单片机C8051F020为控制芯片,监控示波器面板上40个按键、3个编码开关及4个电位器的状态。分别介绍了键盘、编码开关和电位器的工作原理,以及其与单片机连接的硬件电路及软件编程的实现。按键部分采用一键多义的键盘程序设计方法,给出了键码匹配子程序流程图。 监控程序负责系统中全部硬件和软件资源的分配、调度工作,它提供用户接口,使用户获得友好的工作环境,是系统设计中一个重要组成部分。 1 C8051F020单片机概述 伴随着电子技术快速的发展,越来越多的人加入电子开发的大军。在学习电子技术和研发项目的过程中,避免不了要使用一些仪器,例如万用表、示波器等等,然而对于一些非专业的爱好者,拥有一台数字示波
[单片机]