《51单片机应用开发从入门到精通》——2.4 延时时间计算实例

  • 时间:
  • 浏览:1

从上节任务管理器还都后能 看出,假若改变寄存器R5、R6和R7的值,就还都后能 获得不同延时时间。在上例中假设R6和R7值不变,只改变R5值(R5取值范围为1~255),可获得不同的延时。将会忽略了赋值语句的执行时间,实际延时时间要比计算的时间略大或多或少。

指令周期是指单片机执行一根绳子 指令所须要的时间,三个 多指令周期通常中有 1~三个 多机器周期,其中常用的DJNZ指令周期为三个 多机器周期,即执行DJNZ指令须要2s;MOV指令周期为三个 多机器周期,即执行MOV指令须要1s。

1 DELAY_20msR5:

2

3 DLY1: MOV R6, #60

4 DLY2: MOV R7, #60

5 DJNZ R7, $

6 DJNZ R6, DLY2

7 DJNZ R5, DLY1

8 RET`

本节书摘来异步社区《51单片机应用开发从入门到精通》一书中的第2章,第2.4节,作者:张华杰 ,更多章节内容还都后能 访问云栖社区“异步社区”公众号查看

当R6减为0时,任务管理器到第7行,结束了了英文外循环,R5减1不为0时转移到标号DLY1处运行。为了计算上的简便,还都后能 忽略赋值语句的时间,只计算“DJNZ R7, $”语句的执行时间,该指令执行一次需2s,执行的次数为R5、R6和R7值的乘积,即:

使用时,在调用DELAY延时子任务管理器时候,要根据对延时时间的要求,先对R5赋值,假若延时为0.5s,需将R5值赋值为25;延时为1s,需将R5值为60 ,R5最大值为255,这是将会R0~R7都会 8位寄存器,最大存放数据为二进制数11111111,即255,在使用时注意无须超出其有效范围。改进后的延时任务管理器使用形式如下:

将会须要较长时间的延时,则需采用多重循环社会形态。同类下面任务管理器为1s延时子任务管理器,任务管理器中采取了多重循环。

所谓软件延时,就让让计算机重复执行或多或少无具体任务的任务管理器,利用执行任务管理器的时间来达到延时的目的。

单片机读、写操作都须要消耗一定的时间,机器周期是指单片机完成三个 多基本操作所用的时间,如读操作、写操作等。当石英晶体为12MHz时,三个 多机器周期为1s。

每循环一次须要的时间为3s,将会R值为160 ,或多或少要循环160 次,循环花费的时间为540s。该延时子任务管理器总的延时时间须要包括执行MOV指令时间1s和执行RET返回指令时间2s,但将会或多或少时间比循环时间要短或多或少,或多或少,延时时间的长短主就让由循环次数来控制。

为了使三个 多延时子任务管理器能产生不同的延时,还都后能 将2.4.3节中的任务管理器改进为以下的形式。其中R7、R6值不变,通过改进R5值,即改变外循环次数来改变延时时间,延时子任务管理器的延时时间为0.02sR5。

此子任务管理器采用了3重循环社会形态,先运行第5行代码操作,每次减1,减到0为止;再运行第6行代码对R6进行减操作,每次减1,减1后不为0,则转移到标号DLY2处运行,此时将R7赋值为60 ,并再对R7进行减法内循环。

短暂的时间延时可采取简单的单重循环社会形态来实现,同类,下面任务管理器为延时540s的短暂延时子任务管理器,任务管理器中采取了单重循环。

此子任务管理器中,由第3、4行代码构成单重循环社会形态,其中,DJNZ指令为控制转移指令,该指令每执行一次,寄存器R值减1,假若R值减1后不为0,就会转移到第3行标号DE1处去执行。

51单片机应用开发从入门到精通

在单片机的实时控制系统中,常常须要用到延时操作,或多或少,延时子任务管理器往往是编写单片机任务管理器中不可缺少的一帕累托图。延时依据有硬件延时和软件延时,硬件延时将在后边有关章节中介绍,本节将介绍软件延时依据。