历史上的今天
今天是:2025年05月04日(星期日)
2018年05月04日 | 【51单片机】延时函数计算问题以及如何准确延时
2018-05-04 来源:eefocus
几种周期介绍
| 周期名称 | 描述 | 时间 |
| 振荡(时钟) | 单片机提供时钟脉冲信号的振荡源的周期 | T=1/f |
| 状态 | 振荡周期经二分频后得到的 | 2T |
| 机器 | 在一个机器周期内,CPU可以完成一个独立的 操作 | 12T |
| 指令 | 指CPU完成一条操作所需的全部时间 | 12-12nT |
指令:
1、MUL、DIV:仅有的4周期指令
2、包含DPTR和PC的指令均为2周期指令
3、所有的绝对跳转和条件转移指令,均为2周期指令
4、所有包括A寄存器的指令,均为单周期指令
5、位操作指令中,ANL和ORL是2周期指令
6、所有包含立即地址的指令,除INC direct及DEC direct外,均为2周期指令
7、剩下的均为单周期指令。
STC-ISP软件查看各操作用时以及延时函数
_nop_函数可以在keil软件的C51->HLP->C51lib.chm文档中查阅 (授人以鱼不如授人以渔)
延时函数计算
示例:
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=0;j<921;j++);
}
分析:
1.先计算你单片机的振荡(时钟)周期 T= 1/晶振(11.0592MHZ)
2.一次i--操作为12T
3.忽略变量定义,上述延时函数共需时间:921*z*12T
4.带入T:921*12*T*z 约为 z ms
计算出现误差的原因
1.软件仿真时,函数调用的时候入栈出栈操作的耗时。
2.指令周期随指令的不同而不同导致的误差。
3.中断的影响。
4.变量的范围超过,从而与预计时间不一样。
所以实际上我们应该只能算出估计值,根据最开始周期的信息来计算延时函数中延时的时长。
上一篇:如何在C8051里面精确的做延时
史海拾趣
|
各位大虾谁能给我个《plug and play system architecture》?非常感谢 各位大虾谁能给我个《plug and play system architecture》?非常感谢, 我的邮箱jerk66@163.com… 查看全部问答> |
|
问一下MSP430f42xx里的SAD( Sigma-Delta A/D)怎么用啊? 本帖最后由 paulhyde 于 2014-9-15 09:44 编辑 Sigma-Delta A/D 原理基本不懂····和逐次比较的有什么不同?还有怎样操作它? … 查看全部问答> |
|
0 引言 在现场测控系统中,RTU(远程测控终端)存储容量、存储数据的转移问题始终是RTU的重要环节。RTU的存储容量一般为几十K~几百K字节,数据转移通常采用不掉电静态RAM、EEPROM存储模块,或采用便携式计算机通过串行口读取RTU数据。 ...… 查看全部问答> |
|
最近在学习launchpad,中断方面困难重重。。。我想实现这样一个功能:P1.1设为输入,连接一个按键,然后利用中断判断按键按下的时间,要是短按的话就LED1翻转,长按的话LED2翻转。这样的话,我知道应该用捕获模式获取时间信息对吧,但是实现过程一 ...… 查看全部问答> |
|
想玩LCD AND TOUCH BOOSTERPACK的坛友们请看进来 小版今天把手上给LCD AND TOUCH BOOSTERPACK准备的物料都用了,一共做了4个BOOSTERPACK。 其中000号留在我这儿做进一步的开发和调试;001号还有他用,暂时不公布; 独乐乐不如众乐乐,002号和003号就分给坛友们一起玩。 小版收取BOOSTERPACK的工 ...… 查看全部问答> |




