51单片机延时时间计算和延时程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、关于单片机周期的几个概念

●时钟周期

时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12MHz的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。

在一个时钟周期内,CPU仅完成一个最基本的动作。

●机器周期

完成一个基本操作所需要的时间称为机器周期。

以51为例,晶振12M,时钟周期(晶振周期)就是(1/12)μs,一个机器周期包

执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期也不同。

对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

1.指令含义

DJNZ:减1条件转移指令

这是一组把减1与条件转移两种功能结合在一起的指令,共2条。

DJNZ Rn,rel ;Rn←(Rn)-1

;若(Rn)=0,则PC←(PC)+2 ;顺序执行

;若(Rn)≠0,则PC←(PC)+2+rel,转移到rel所在位置DJNZ direct,rel ;direct←(direct)-1

;若(direct)= 0,则PC←(PC)+3;顺序执行

;若(direct)≠0,则PC←(PC)+3+rel,转移到rel 所在位置

2.DJNZ Rn,rel指令详解

例:

MOV R7,#5

DEL:DJNZ R7,DEL; rel在本例中指标号DEL

1.单层循环

由上例可知,当Rn赋值为几,循环就执行几次,上例执行5次,因此本例执行的机器周期个数=1(MOV R7,#5)+2(DJNZ R7,DEL)×5=11,以12MHz的晶振为例,执行时间(延时时间)=机器周期个数×1μs=11μs,当设定立即数为0时,循环程序最多执行256次,即延时时间最多256μs。

2.双层循环

1)格式:

DELL:MOV R7,#bb

DELL1:MOV R6,#aa

DELL2:DJNZ R6,DELL2; rel在本句中指标号DELL2

DJNZ R7,DELL1; rel在本句中指标号DELL1

注意:循环的格式,写错很容易变成死循环,格式中的Rn和标号可随意指定。

2)执行过程

由上表可知,本循环可以分成两个部分,一个部分是内部循环:包括DELL2:DJNZ R6,DELL2,计算机器周期个数=2(DELL2:DJNZ R6,DELL2)×4=8。

外部循环包括:DELL1:MOV R6,#4执行一次,DELL2:DJNZ R6,DELL2执行4次,DJNZ R7,DELL1执行一次,机器周期的计算与单层循环相同,计算机器周期个数=1(DELL1:MOV R6,#4)+2(DELL2:DJNZ R6,DELL2)×4+2(DJNZ R7,DELL1)=11。

本例总机器周期个数=外部循环×3+1(DELL:MOV R7,#3)=34。

因此:双层循环的总机器周期个数=1(DELL:MOV R7,#bb)+bb【1(DELL1:MOV R6,#aa)+2(DELL2:DJNZ R6,DELL2)×aa+2(DJNZ R7,DELL1)】=1+bb(3+2aa)。当aa比较大时,如果计算精度要求不高,可以忽略(3+2aa)忽略中的3,同理可忽略1+bb(3+2aa)中的1,此时双层循环的总机器周期个数≈2aa×bb。以机器周期为1μs为例,延时时间≈2aa×bb×1μs,当aa和bb都取0时,延时时间最多≈2×256×256×1μs=0.13s。

4)延时程序设计

设计延时程序时,只要计算出aa和bb即可。为了使精度高一些,将aa的值尽量变大,忽略(3+2aa)的3作用才会减少。

例1:50ms的延时程序设计(机器周期为1μs):

50ms=50000μs=2aa×bb×1μs=2×250×100×1μs

则延时程序为:

DELL:MOV R7,#100

DELL1:MOV R6,#250

DELL2:DJNZ R6,DELL2; rel在本句中指标号DELL2

DJNZ R7,DELL1; rel在本句中指标号DELL1

例2:0.1s的延时程序设计(机器周期为1μs):

0.1s=100000μs=2aa×bb×1μs=2×250×200×1μs

则延时程序为:

DELL:MOV R7,#200

DELL1:MOV R6,#250

DELL2:DJNZ R6,DELL2; rel在本句中指标号DELL2

DJNZ R7,DELL1; rel在本句中指标号DELL1

例3:0.1s的延时程序设计(机器周期为2μs):

0.1s=100000μs=2aa×bb×2μs=2×250×100×2μs

则延时程序为:

DELL:MOV R7,#100

DELL1:MOV R6,#250

DELL2:DJNZ R6,DELL2; rel在本句中指标号DELL2

DJNZ R7,DELL1; rel在本句中指标号DELL1

2.三层循环

1)格式:

DELL:MOV R7,#cc

DELL1:MOV R6,#bb

DELL2:MOV R5,#aa

DELL3:DJNZ R5,DELL3; rel在本句中指标号DELL3

DJNZ R6,DELL2; rel在本句中指标号DELL2

DJNZ R7,DELL1; rel在本句中指标号DELL1

注意:循环的格式,写错很容易变成死循环,格式中的Rn和标号可随意指定。

2)执行过程

相关文档
最新文档