单片机为什么会出现时间延迟
Ⅰ 51单片机lcd1602液晶显示,每送数据后都有要延时,我想问若我去掉延时,什么现象,为什么会这样
到底会有什么现象,自己试一下就知道了!学习其实最好的方式就是自己实践!实物或软件仿真都可以!至于为什么会延时、这是因为1602芯片时序图要求的、必须要大于某一时间间隔!多看看、芯片的DATASHEET!!
如下图
这就是起读写时序图:可以看见图中明确标识有时间的!不能小于这个时间!一般这个时间较小、当单片机频率不是太高的时候、可以不延时就满足要求的!只有一些大的时间才延时!
Ⅱ 单片机时钟程序中为什么要延时
延时函数是所有单片机程序中不可缺少的,单片机的速度相对很多器件来说已经很高了,必须加延时才能匹配,如液晶屏1602,送一个字符或命令后,必须有ms级延时,才能送下一个字符
数码管扫描显示,每点亮一个数码管也要延时保持一会儿,还有一些短的延时,如模拟SPIJ时钟,只用2 个空操作语句就解决了
Ⅲ 单片机delay单位时间的含义是什么
单片机中的delay()的单位时间不是系统提供的,而是用户自己编制的。
如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。
如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。
最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。
(3)单片机为什么会出现时间延迟扩展阅读
单片机C语言程序中延时函数delay的原理是:仅仅执行一些,没有实质性影响的所谓“无意义指令”,比如做比大小啊,做某个int的自加运算啊之类的。
单片机的有些程序需要调用延时程序,合理的安排循环次数以及空操作的个数方法:用汇编的话就根据你的当前晶振频率去推算你的指令周期,然后结合需要延迟的时间。
编写延迟程序,用C的话还是要看最后生成的汇编码是什么样的了。最简单的方法就是写好程序以后再编译器里软仿真看时间。
单片机C语言延时需注意的问题:
标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。
在keil C51中,直接调用库函数:
#include // 声明了void _nop_(void);
_nop_(); // 产生一条NOP指令
作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。
Ⅳ 单片机数字时钟比实际时间的慢啊怎么办
单片机是利用定时器实现计时的,根据定时器的定时计算出的时间常数,是理想状态下的数值。
如晶振频率是12M,用定时器T0,按定时20ms 计算的时间常数
TH0=(65536-20000)/256=0XB1
TL0=(65536-20000)%256=0XE0
如果按这个数写程序,电子钟计时的时间肯定就比实际的时间慢。当然了,这需要时间长了,才能体现出来,如果只是计时几个小时是比较不出来的。必须是长时间的计时,比如计时一周以上就体现出来计时的误差了。
这是因为,单片机计时的误差还是比较小的,假如一天慢1秒,那计时一周了,就慢7秒,才会发现的。
为什么会慢呢,是因为定时到,要中断,单片机从响应中断,到在中断程序中重写时间常数,才能重新计时的,这是需要时间,只是这时间只有几个微秒。就产生了计时误差了。可是这向微秒的误差,累计一周后就累计成几秒了。
要计时比较准确的还是有办法的,就是给时间常数的TL0加几个数,来补偿误差。
通常加8就行,不过,还需要长时间的计时来校正。
在中断程序中的时间常数改为
TH0=0XB1;
TL0=0XE8; //这低8位加8,补偿误差
这样补偿后,还有误差,再改这低8位,慢了就加,快了就减
Ⅳ 单片机延时一次的实际时间与什么有关
答:单片机延时一次的实际时间与什么有关?
1 、与单片机的晶振有关
2、 与单片机执行的指令长度有关(单周期还是双周期)
3、与执行的程序有关
Ⅵ 为什么在单片机中要用到延时程序
这个原因还是蛮多的,分同的情况,单片机的处理速度是很快的,有的时候为了让我们便于观察需要加入延时,例如一个指示灯的亮灭,如果不加入延时是看不出来的,再有就是键盘去抖动,一般按键都有20ms左右的抖动,为了更好的检测防止干扰,也需要延时一段时间在进行判断,总之延时的作用在不同的情况下也不同
Ⅶ 单片机LED延时原理问题
这个是延时程序,你通过keil编译调试中,会看到其汇编代码;
当带入的参数=1时,你单步执行汇编代码,直至 ret,然后你看看都执行了哪些指令,并把所消耗的指令周期累加起来,大致就10个机器周期,而当单片机晶振为12MHz时,则一个机器周期约为 1uS,那么就是从进入这个延时程序到返回,所经历的时间正好是10uS;