51单片机延时时间计算和延时程序设计
- 格式:docx
- 大小:20.00 KB
- 文档页数:8
单片机延时计算单片机是一种集成电路,具有微处理器、存储器和输入输出接口等功能。
在单片机的应用中,延时计算是一项重要的操作。
延时计算指的是在程序中通过控制单片机的时钟信号来实现一定的时间延迟。
延时计算常用于控制设备的时间间隔、时序控制等方面。
在单片机中,延时计算可以通过软件延时和硬件延时两种方式实现。
软件延时是通过在程序中循环执行一定的指令次数来实现延时,而硬件延时是通过控制单片机的时钟频率来实现延时。
软件延时是一种简单常用的延时计算方法。
在软件延时中,我们可以使用循环来实现延时。
通过控制循环次数,可以实现不同的延时时间。
例如,我们可以使用一个循环来延时1毫秒,使用多个循环来延时更长的时间。
软件延时的精度相对较低,受到单片机的工作频率、指令执行速度等因素的影响。
硬件延时是一种更精确的延时计算方法。
在硬件延时中,我们可以通过改变单片机的时钟频率来控制延时时间。
通过控制时钟频率,可以实现微秒级别的延时。
硬件延时的精度相对较高,但需要对单片机的时钟系统进行配置和调整。
延时计算在单片机的应用中非常重要。
在控制设备的时间间隔方面,延时计算可以实现设备的周期性工作。
例如,可以通过延时计算来控制LED灯的闪烁频率,实现呼吸灯效果。
在时序控制方面,延时计算可以实现不同操作之间的时间间隔。
例如,可以通过延时计算来控制舵机的旋转角度和速度。
延时计算的实现方法有很多种,可以根据具体需求选择合适的方法。
在选择延时计算方法时,需要考虑延时的精度、可靠性和资源占用等因素。
同时,还需要根据单片机的工作频率和指令执行速度等参数进行调整和优化。
延时计算在单片机的应用中起着重要的作用。
通过延时计算,可以实现对设备的精确控制和时序管理。
延时计算的方法和技巧也是单片机程序设计中的重要内容之一。
通过深入了解和研究延时计算,可以提高单片机程序的可靠性和性能。
希望通过本文的介绍,读者对延时计算有更深入的了解和认识。
51 单片机定时器延时1s函数1.引言1.1 概述本文介绍了51单片机中的定时器功能以及如何通过定时器实现延时1秒的函数。
在单片机应用中,定时器是一种非常重要且常用的功能模块之一。
它能够精确计时,并可用于实现周期性的任务触发、计时、脉冲输出等功能。
本文首先将对51单片机进行简要介绍,包括其基本概念、结构和特点。
随后,重点讲解了定时器的基本原理和功能。
定时器通常由一个计数器和一组控制寄存器组成,通过预设计数器的初值和控制寄存器的配置来实现不同的计时功能。
接着,本文详细介绍了如何通过编程实现一个延时1秒的函数。
延时函数是单片机开发中常用的功能,通过定时器的计时功能可以实现精确的延时控制。
本文将以C语言为例,介绍延时函数的编写步骤和原理,并给出示例代码和详细的说明。
最后,本文对所述内容进行了总结,并展望了定时器在单片机应用中的广泛应用前景。
通过学习定时器的相关知识和掌握延时函数的编写方法,我们可以更好地应用定时器功能,提高单片机应用的效率和精确性。
综上所述,通过本文的学习,读者可全面了解51单片机中定时器的功能和应用,并能够掌握延时函数的编写方法,为单片机应用开发提供一定的参考和指导。
1.2 文章结构本文以51单片机定时器功能为主题,旨在介绍如何使用定时器进行延时操作。
文章分为引言、正文和结论三个主要部分。
在引言部分,首先会对文章的背景进行概述,介绍单片机的基本概念和应用领域。
然后,给出本文的整体结构,并阐述文章的目的和意义。
正文部分将分为两个小节。
在2.1节中,将对单片机进行详细介绍,包括其构造与工作原理。
这部分的内容将帮助读者全面了解单片机的基本知识,为后续的定时器功能介绍打下基础。
2.2节将重点介绍定时器的功能和特点。
这部分将涵盖定时器的基本原理、工作模式以及在实际应用中的使用方法。
同时,还将详细讲解如何使用定时器进行1秒钟的延时操作,包括具体的代码实现和注意事项。
结论部分将对全文进行总结,并强调定时器的重要性和应用前景。
51单片机延时函数在嵌入式系统开发中,51单片机因其易于学习和使用、成本低廉等优点被广泛使用。
在51单片机的程序设计中,延时函数是一个常见的需求。
通过延时函数,我们可以控制程序的执行速度,实现定时器功能,或者在需要的时候进行延时操作。
本文将介绍51单片机中常见的延时函数及其实现方法。
一、使用for循环延时这种方法不精确,但是对于要求不高的场合,可以用来估算延时。
cvoid delay(unsigned int time){unsigned int i,j;for(i=0;i<time;i++)for(j=0;j<1275;j++);}这个延时函数的原理是:在第一个for循环中,我们循环了指定的时间次数(time次),然后在每一次循环中,我们又循环了1275次。
这样,整个函数的执行时间就是time乘以1275,大致上形成了一个延时效果。
但是需要注意的是,这种方法因为硬件和编译器的不同,延时时间会有很大差异,所以只适用于对延时时间要求不精确的场合。
二、使用while循环延时这种方法比使用for循环延时更精确一些,但是同样因为硬件和编译器的不同,延时时间会有差异。
cvoid delay(unsigned int time){unsigned int i;while(time--)for(i=0;i<1275;i++);}这个延时函数的原理是:我们先进入一个while循环,在这个循环中,我们循环指定的时间次数(time次)。
然后在每一次循环中,我们又循环了1275次。
这样,整个函数的执行时间就是time乘以1275,大致上形成了一个延时效果。
但是需要注意的是,这种方法因为硬件和编译器的不同,延时时间会有差异,所以只适用于对延时时间要求不精确的场合。
三、使用定时器0实现精确延时这种方法需要在单片机中开启定时器0,并设置定时器中断。
在中断服务程序中,我们进行相应的操作来实现精确的延时。
这种方法需要使用到单片机的定时器中断功能,相对复杂一些,但是可以实现精确的延时。
1,_nop_() 适用于us级的少量延时标准的C语言中没有空语句。
但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。
这在汇编语言中很容易实现,写几个nop就行了。
在keil C51中,直接调用库函数:#include<intrins.h> //声明了void _nop_(void);_nop_(); //产生一条NOP指令作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。
NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
2,一般延时大于10us一,定义的C51中循环变量,尽量采用无符号字符型变量。
二,在FOR循环语句中,尽量采用变量减减来做循环。
三,在do…while,while语句中,循环体内变量也采用减减方法这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的例:unsigned char i;for(i=255;i>0;i--);用keil C51编译后MOV09H,#0FFHLOOP:DJNZ09H,LOOP指令相当简洁,也很好计算精确的延时时间。
3,延时更长,达到MS级,这时需要嵌套循环循环嵌套的方法常用于达到ms级的延时。
对于循环语句同样可以采用for,do…while,while结构来完成,每个循环体内的变量仍然采用无符号字符变量。
例:unsigned char i,jfor(i=255;i>0;i--)for(j=255;j>0;j--);或unsigned char i,ji=255;do{j=255;do{j--}while(j);i--;}while(i);或unsigned char i,ji=255;while(i){j=255;while(j){j--};i--;}下面给出有关在C51中延时子程序设计时要注意的问题(一些经验之谈)1、在C51中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递。
MCS-51单片机中汇编程序延时的精确算法一、引言MCS-51单片机是一种常用的微控制器,其汇编程序编写对于工程师来说是极为重要的。
在MCS-51单片机中,延时是一种常见的需求,通过延时可以控制程序的执行速度和时间间隔。
而对于汇编程序中的延时算法,精确度的要求往往较高,特别是在一些实时系统中。
本文将针对MCS-51单片机中汇编程序延时的精确算法展开论述。
二、延时的需求在MCS-51单片机中,实现一定时间的延时是非常常见的需求。
在控制LED灯的闪烁过程中,需要一定的时间间隔来控制LED的亮灭频率;在读取传感器数据的过程中,需要一定的时间延时以确保传感器数据的准确性。
精确和可控的延时算法对于MCS-51单片机的应用来说是至关重要的。
三、常见的延时算法在MCS-51单片机的汇编程序中,常见的延时算法包括循环延时、定时器延时和脉冲宽度调制(PWM)延时等。
这些延时算法各有优缺点,需要根据具体的应用场景选择合适的算法。
1. 循环延时循环延时是一种简单而粗糙的延时算法,其原理是通过空转循环来消耗一定的CPU周期来实现延时。
这种延时算法的缺点是精度较差,受到CPU主频和编译器优化等因素的影响较大,不适合对延时精度有较高要求的场景。
2. 定时器延时定时器延时是一种利用MCS-51单片机内部定时器来实现延时的算法。
通过设置定时器的初值和计数方式,可以实现一定范围内的精确延时。
定时器延时的优点是精度高,不受CPU主频影响,适用于对延时精度要求较高的场景。
3. 脉冲宽度调制(PWM)延时脉冲宽度调制(PWM)延时是一种通过调节脉冲信号的宽度来实现延时的算法。
这种延时算法在一些特定的应用场景中具有较高的灵活性和精度。
例如在直流电机的速度调节过程中常常会采用PWM延时算法来实现精确的速度控制。
四、精确延时算法针对MCS-51单片机中汇编程序延时的精确算法,我们可以结合定时器延时和脉冲宽度调制(PWM)延时的优点,设计一种精确度较高的延时算法。
单片机软件延时程序的设计一、单片机软件延时的基本原理单片机执行指令需要一定的时间,通过编写一系列无实际功能的指令循环,让单片机在这段时间内持续执行这些指令,从而实现延时的效果。
延时的时间长度取决于所使用的单片机型号、晶振频率以及所编写的指令数量和类型。
以常见的 51 单片机为例,假设其晶振频率为 12MHz,一个机器周期等于 12 个时钟周期,那么执行一条单周期指令的时间约为1μs。
通过编写一定数量的这种单周期指令的循环,就可以实现不同时长的延时。
二、软件延时程序的设计方法1、简单的空操作延时这是最基本的延时方法,通过使用空操作指令“NOP”来实现。
以下是一个简单的示例:```cvoid delay_nop(unsigned int n){unsigned int i;for (i = 0; i < n; i++){_nop_();}}```这种方法的延时时间较短,而且不太精确,因为实际的延时时间还会受到编译器优化等因素的影响。
2、基于循环的延时通过使用循环来执行一定数量的指令,从而实现较长时间的延时。
以下是一个基于循环的延时函数示例:```cvoid delay_ms(unsigned int ms){unsigned int i, j;for (i = 0; i < ms; i++){for (j = 0; j < 120; j++)_nop_();}}}```在这个示例中,通过内外两层循环来增加延时的时间。
需要注意的是,这里的循环次数是根据实验和估算得出的,实际的延时时间可能会有一定的偏差。
3、更精确的延时为了实现更精确的延时,可以根据单片机的机器周期和指令执行时间来精确计算延时的循环次数。
例如,对于12MHz 晶振的51 单片机,要实现 1ms 的延时,可以这样计算:1ms =1000μs,一个机器周期为1μs,执行一条指令需要 1 到 4 个机器周期。
假设平均每条指令需要 2 个机器周期,那么要实现1000μs的延时,大约需要执行 2000 条指令。
C程序中可使用不同类型的变量来进行延时设计。
经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。
以某晶振为12MHz 的单片机为例,晶振为12MHz即一个机器周期为1us。
一. 500ms延时子程序程序:void delay500ms(void){unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}计算分析:程序共有三层循环一层循环n:R5*2 = 81*2 = 162us DJNZ 2us二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ2us + R5赋值 1us = 3us三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值1us = 3us循环外: 5us子程序调用2us + 子程序返回 2us + R7赋值 1us = 5us延时总时间= 三层循环+ 循环外= 499995+5 = 500000us =500ms计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5二. 200ms延时子程序程序:{unsigned char i,j,k;for(i=5;i>0;i--)for(j=132;j>0;j --)for(k=150;k>0;k --);}三. 10ms延时子程序程序:{unsigned char i,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--)for(k=248;k>0;k --);}四. 1s延时子程序程序:void delay1s(void){unsigned char h,i,j,k;for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;j>0;j --)for(k=214;k>0;k --);}关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。
51单片机时钟程序设计51单片机时钟程序设计是基于51单片机的一种程序,用于控制和显示时间的各个参数,如小时、分钟、秒等。
在计时、计数、算术运算、控制输出、中断处理等领域都起到重要的作用。
本文将简单介绍51单片机时钟程序设计的基本框架和其实现方法。
1. 硬件准备在进行51单片机时钟程序设计之前,需要先准备好相关的硬件,包括51单片机芯片、晶振、LCD液晶显示屏等。
其中晶振是时钟源,用来产生稳定的时钟信号,LCD液晶显示屏则用于显示时钟相关信息。
2. 时钟程序的设计框架(1)初始化程序:此步骤的主要作用是设置相关的寄存器和标志位,为后续程序的正常运行做好准备。
(2)计时程序:此步骤的主要作用是对秒、分、时等时间参数进行计数,并将结果存储到相应的寄存器里。
(3)中断程序:此步骤的主要作用是设置中断触发条件和相应的处理程序,用来处理一些紧急事件。
(4)显示程序:此步骤的主要作用是将计时程序的结果以数字形式显示到LCD液晶显示屏上,同时可以进行一些特殊字符的显示。
(5)调试程序:此步骤的主要作用是用于调试程序代码,检测是否存在问题,比如程序写错了等等。
3. 时钟程序的实现方法(1)初始化程序初始化程序是开发52单片机时钟程序的第一步,可以根据实际需求进行相应的设置。
在本程序中,初始化程序需要进行以下设置:a. 定义输入输出端口;b. 配置定时器;c. 设置中断源;d. 初始化LCD液晶显示屏等相关参数;(2)计时程序计时程序是时钟程序的核心,其主要作用是计算并更新当前的时间参数。
在本程序中,计时程序需要进行以下操作:a. 设置定时器的时钟源和计数频率;b. 定义中断触发条件;c. 设置中断处理程序并对时间参数进行计数,并存储到相应的寄存器里;d. 根据时间参数更新液晶显示屏的显示内容。
(3)中断程序中断程序主要用于响应一些紧急事件,比如硬件异常、按键输入等。
在52单片机时钟程序中,中断程序需要以下操作:a. 定义中断触发条件;b. 检测中断源;c. 判断中断类型,并调用相应的处理程序;d. 清除中断标志位。
单片机c51程序设计单片机C51程序设计是一门结合了硬件知识和软件编程技能的学科,它广泛应用于自动化控制、智能设备、嵌入式系统等领域。
C51单片机是指使用C语言进行编程的8051系列单片机,它具备丰富的指令集和灵活的编程方式。
下面将从单片机的基本概念、C51编程基础、程序设计步骤以及实例分析等方面进行介绍。
单片机的基本概念单片机,又称微控制器,是一种集成了处理器核心、存储器、输入/输出接口等的微型计算机系统。
它具有体积小、功耗低、成本低、可靠性高等特点。
C51单片机是基于Intel 8051微控制器架构的,具有8位数据总线和16位地址总线,支持多种外设接口。
C51编程基础1. C语言基础:熟悉C语言的基本语法,如变量声明、条件语句、循环语句、函数等。
2. 数据类型:了解C51单片机支持的数据类型,包括特有寄存器位操作。
3. 内存结构:掌握C51单片机的内存结构,包括内部RAM、外部RAM、程序存储器等。
4. 中断系统:理解中断的概念和中断服务程序的编写。
5. 定时器/计数器:了解如何使用单片机的定时器/计数器进行时间控制和事件计数。
程序设计步骤1. 需求分析:明确程序设计的目标和功能需求。
2. 系统设计:设计系统的整体架构,包括硬件连接和软件模块划分。
3. 编写代码:根据设计编写C51程序代码,包括初始化代码、主函数、中断服务程序等。
4. 调试:使用仿真软件或实际硬件对程序进行调试,确保程序正确运行。
5. 优化:根据调试结果对程序进行优化,提高效率和稳定性。
6. 测试:进行全面的测试,确保程序在各种条件下都能稳定运行。
实例分析以一个简单的LED闪烁程序为例,介绍C51程序设计的基本流程:```c#include <reg51.h>// 定义LED连接的端口#define LED_PORT P1void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--)for (j = 110; j > 0; j--);}void main() {while (1) {LED_PORT = 0xFF; // 关闭所有LED灯delay(500); // 延时500msLED_PORT = 0x00; // 打开所有LED灯delay(500); // 延时500ms}}```在这个例子中,我们首先包含了8051单片机的寄存器定义文件`reg51.h`,定义了LED灯连接的端口为P1。
一、关于单片机周期的几个概念
时钟周期
时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12MHz 的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。
在一个时钟周期内,CPU仅完成一个最基本的动作。
机器周期
完成一个基本操作所需要的时间称为机器周期。
以51 为例,晶振12M,时钟周期(晶振周期)就是(1/12)
μs,一个机器周期包
含12 个时钟周期,一个机器周期就是1μ s。
指令周期:
执行一条指令所需要的时间,一般由若干个机器周期组成。
指令不同,所需
的机器周期也不同。
对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。
对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
2.延时常用指令的机器周期
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; r在el本例中指标号DEL
三、51 单片机延时时间的计算方法和延时程序设计
1.单层循环
由上例可知,当Rn赋值为几,循环就执行几次,上例执行 5 次,因此本例执行的机器周期个数=1(MOV R7,#5)+2(DJNZ R7,DE)L ×5=11,以12MHz的晶振为例,执行时间(延时时间)=机器周期个数×1μs=11μ s,当设定立即数为0 时,循环程序最多执行256 次,即延时时间最多256μ s。
2.双层循环
1)格式:
DELL:MOV R,7 #bb
DELL1:MOV R6,#aa
DELL2:DJNZ R6,DELL2; 在rel本句中指标号DELL2
DJNZ R7,DELL1; re在l 本句中指标号DELL1 注意:循环的格式,写错很容易变成死循环,格式中的Rn 和标号可随意指定。
2)执行过程
分是内部循环:包括DELL2:DJNZ R6,DEL,L2计算机器周期个数=2(DELL2:DJNZ R6,DEL)L2×4=8 。
外部循环包括:DELL1:MOV R6,#4执行一次,DELL2:DJNZ
R6,DELL执2行 4 次,DJNZ R7,DELL1执行一次,机器周期的计算与单层循环相同,计算机器周期个数=1(DELL1:MOV R6,#4)+2
(DELL2:DJNZ R6,DEL)L2×4+2(DJNZ R7,DELL)1 =11。
本例总机器周期个数=外部循环×3+1 (DELL:MOV R,7 #3)=34。
因此:双层循环的总机器周期个数=1(DELL:MOV R7,#bb)+bb【1(DELL1:MOV R6,#aa)+2(DELL2:DJNZ R6,DEL)L2×aa+2(DJNZ
R7,DELL)1】=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 R,7 #100
DELL1:MOV R6,#250
DELL2:DJNZ R6,DELL2; 在rel本句中指标号DELL2
DJNZ R7,DELL1; re在l 本句中指标号DELL1
例2:0.1s 的延时程序设计(机器周期为1μs):
0.1s=100000 μs=2aa×bb×1μs=2×250×200×1μs 则延时程序
为:
DELL:MOV R,7 #200
DELL1:MOV R6,#250
DELL2:DJNZ R6,DELL2; 在rel本句中指标号DELL2
DJNZ R7,DELL1; re在l 本句中指标号DELL1
例3:0.1s 的延时程序设计(机器周期为2μs):
0.1s=100000 μs=2aa×bb×2μs=2×250×100×2μs
则延时程序为:
DELL:MOV R,7 #100
DELL1:MOV R6,#250
DELL2:DJNZ R6,DELL2; 在rel本句中指标号DELL2
DJNZ R7,DELL1; re在l 本句中指标号DELL1
2.三层循环
1)格式:DELL:MOV R,7 #cc
DELL1:MOV R6,#bb
DELL2:MOV R5,#aa
DELL3:DJNZ R5,DELL3; 在rel本句中指标号DELL3
DJNZ R6,DELL2; re在l 本句中指标号DELL2
DJNZ R7,DELL1; re在l 本句中指标号DELL1
注意:循环的格式,写错很容易变成死循环,格式中的Rn 和标号可随意指
2)执行过程
例:假设上述循环cc=2,bb=3,aa=4
环包括DELL3:DJNZ R5,DEL,L3内部循环计算机器周期个数=2aa。
中间循环一次包括:DELL2:MOV R5,#aa一次+内部循环+DJNZ R6,DELL一2次,一次中间循环计算机器周期个数=2aa+3,总的中间循环计算机器周期个数=bb (2aa+3)。
外部循环一次包括:DELL1:MOV R6,#bb一次+中间循环+DJNZ
R7,DELL一1 次,一次外部循环计算机器周期个数=bb(2aa+3)+3,总的外部循环计算机器周期个数=cc[bb(2aa+3)+3]。
总计算机器周期个数=1(DELL:MOV R7,#cc)+总的外部循环计算机器周期个数=cc[bb(2aa+3)+3]+1
如果计算精度要求不高,可以忽略(3+2aa )忽略中的3,同理可忽略3+bb (3+2aa)中的3,cc[bb(2aa+3)+3]+1 中的1,此时三层循环的总机器周期个数≈2aa×bb×cc。
以机器周期为1μs 为例,延时时间≈2aa×bb×cc×1μs,当aa、bb 和cc 都取0 时,延时时间最多≈2×256×256×256×1μs≈33.55s。
4)延时程序设计
设计延时程序时,只要计算出aa 、bb 和cc 即可。
为了使精度高一些,将aa 的值尽量变大,其次是bb。
例1:1s 的延时程序设计(机器周期为1μs):1s=1000000
μs=2aa×bb×cc ×1μs=2×250×250×8×1μs 则延时程序为:DELL:MOV R,7 #8
DELL1:MOV R6,#250 DELL2:MOV R5,#250
DELL3:DJNZ R5,DELL3; 在rel本句中指标号DELL3
DJNZ R6,DELL2; re在l 本句中指标号DELL2
DJNZ R7,DELL1; re在l 本句中指标号DELL1 例2:1s 的延时程序设计(机器周期为2μs):1s=1000000 μs=2aa×bb×cc ×2μs=2×250×250×4×2μs 则延时程序为:DELL:MOV R,7 #4 DELL1:MOV R6,#250 DELL2:MOV R5,#250
DELL3:DJNZ R5,DELL3; 在rel本句中指标号DELL3
DJNZ R6,DELL2; re在l 本句中指标号DELL2
DJNZ R7,DELL1; re在l 本句中指标号DELL1
例10s 的延时程序设计(机器周期为 1 μ s ):10s=10000000 μs=2aa×bb×cc ×1μs=2×250×250×80×1μs 则延时程序为:DELL:MOV R,7 #80 DELL1:MOV R6,#250 DELL2:MOV R5,#250
DELL3:DJNZ R5,DELL3; 在rel本句中指标号DELL3
DJNZ R6,DELL2; re在l 本句中指标号DELL2 DJNZ R7,DELL1;
re在l 本句中指标号DELL1。