汇编延时程序讲解

合集下载

单片机延时500ms程序汇编

单片机延时500ms程序汇编

单片机延时500ms程序汇编一、概述在单片机编程中,延时操作是非常常见且重要的一部分。

延时可以使程序在执行过程中暂停一段时间,以确保输入输出设备能够正常工作,或者是为了保护其他设备。

本文将介绍如何使用汇编语言编写单片机延时500ms的程序。

二、延时原理在单片机中,延时操作通常通过循环来实现。

每个循环需要一定的时间,通过控制循环次数和循环体内的指令数量,可以实现不同长度的延时。

在汇编语言中,可以使用计数器来控制循环次数,从而实现精确的延时操作。

三、汇编语言编写延时程序接下来,我们将使用汇编语言编写延时500ms的程序。

1. 设置计数器初值在程序的开头我们需要设置计数器的初值,这个初值需要根据单片机的工作频率和所需的延时时间来计算。

假设单片机的工作频率为1MHz,那么在循环500次后,就能够达到500ms的延时。

我们需要将计数器的初值设为500。

2. 循环计数接下来,我们进入一个循环,在循环中进行计数操作。

每次循环结束时,都需要检查计数器的值,当计数器减至0时,表示已经达到了500ms的延时时间,可以退出循环。

3. 优化程序为了提高程序的执行效率,可以对计数器进行优化。

例如可以通过嵌套循环的方式,减少循环的次数,从而提高延时的精度和稳定性。

四、程序示例下面是一个简单的示例程序,演示了如何使用汇编语言编写延时500ms的程序。

```org 0x00mov r2, #500 ; 设置计数器初值为500delay_loop:djnz r2, delay_loop ; 进行计数ret ; 延时结束,退出程序```五、结语通过以上的示例程序,我们可以看到如何使用汇编语言编写单片机延时500ms的程序。

当然,实际的延时程序可能会更加复杂,需要根据具体的单片机型号和工作频率进行调整,但是思路是相似的。

在实际的编程中,需要根据具体的需求和硬件环境来进行调整和优化,以实现更加稳定和精确的延时操作。

希望本文对单片机延时程序的编写有所帮助,也欢迎大家在评论区提出宝贵意见和建议。

汇编延时程序讲解

汇编延时程序讲解

延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念、机器周期和指令周期的区别和联系、相关指令的用法等用图解法的形式详尽的回答读者我们知道程序设计是单片机开发最重要的工作,而程序在执行过程中常常需要完成延时的功能。

例如在交通灯的控制程序中,需要控制红灯亮的时间持续30秒,就可以通过延时程序来完成。

延时程序是如何实现的呢?下面让我们先来了解一些相关的概念。

一、机器周期和指令周期1.机器周期是指单片机完成一个基本操作所花费的时间,一般使用微秒来计量单片机的运行速度,51 单片机的一个机器周期包括12 个时钟振荡周期,也就是说如果51 单片机采用12MHz 晶振,那么执行一个机器周期就只需要1μs;如果采用的是6MHz 的晶振,那么执行一个机器周期就需要2 μs。

2 .指令周期是指单片机执行一条指令所需要的时间,一般利用单片机的机器周期来计量指令周期。

在51 单片机里有单周期指令(执行这条指令只需一个机器周期),双周期指令(执行这条指令只需要两个机器周期),四周期指令(执行这条指令需要四个机器周期)。

除了乘、除两条指令是四周期指令,其余均为单周期或双周期指令。

也就是说,如果51 单片机采用的是12MHz 晶振,那么它执行一条指令一般只需1~2 微秒的时间;如果采用的是6MH 晶振,执行一条指令一般就需2~4 微秒的时间。

现在的单片机有很多种型号,但在每个型号的单片机器件手册中都会详细说明执行各种指令所需的机器周期,了解以上概念后,那么可以依据单片机器件手册中的指令执行周期和单片机所用晶振频率来完成需要精确延时时间的延时程序。

二、延时指令在单片机编程里面并没有真正的延时指令,从上面的概念中我们知道单片机每执行一条指令都需要一定的时间,所以要达到延时的效果,只须让单片机不断地执行没有具体实际意义的指令,从而达到了延时的效果。

汇编延时程序算法详解

汇编延时程序算法详解

汇编延时程序算法详解摘要计算机反复执行一段程序以达到延时的目的称为软件延时,单片机应用程序中经常需要短时间延时,有时要求很高的精度,网上或书中虽然有现成的公式可以套用,但在部分算法讲解中发现有错误之处,而且延时的具体算法讲得并不清楚,相当一部分人对此仍很模糊,授人鱼,不如授之以渔,本文将以12MHZ晶振为例,详细讲解MCS-51单片机中汇编程序延时的精确算法。

关键词 51单片机汇编延时算法指令周期、机器周期与时钟周期指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。

时钟周期:也称为振荡周期,一个时钟周期=晶振的倒数。

MCS-51单片机的一个机器周期=6个状态周期=12个时钟周期。

MCS-51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*(1/12000000)=1µs。

程序分析例1 50ms 延时子程序:DEL:MOV R7,#200 ①DEL1:MOV R6,#125 ②DEL2:DJNZ R6,DEL2 ③DJNZ R7,DEL1 ④RET ⑤精确延时时间为:1+(1*200)+(2*125*200)+(2*200)+2=(2*125+3)*200+3 ⑥=50603µs≈50ms由⑥整理出公式(只限上述写法)延时时间=(2*内循环+3)*外循环+3 ⑦详解:DEL这个子程序共有五条指令,现在分别就每一条指令被执行的次数和所耗时间进行分析。

第一句:MOV R7,#200 在整个子程序中只被执行一次,且为单周期指令,所以耗时1µs第二句:MOV R6,#125 从②看到④只要R7-1不为0,就会返回到这句,共执行了R7次,共耗时200µs 第三句:DJNZ R6,DEL2 只要R6-1不为0,就反复执行此句(内循环R6次),又受外循环R7控制,所以共执行R6*R7次,因是双周期指令,所以耗时2*R6*R7µs。

C及汇编延时程序讲解

C及汇编延时程序讲解

有个好帖,从精度考虑,它得研究结果是:void delay2(unsigned char i){while(--i);}为最佳方法。

分析:假设外挂12M(之后都是在这基础上讨论)我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:delay2(0):延时518us 518-2*256=6delay2(1):延时7us(原帖写“5us”是错的,^_^)delay2(10):延时25us 25-20=5delay2(20):延时45us 45-40=5delay2(100):延时205us 205-200=5delay2(200):延时405us 405-400=5见上可得可调度为2us,而最大误差为6us。

精度是很高了!但这个程序的最大延时是为518us 显然不能满足实际需要,因为很多时候需要延迟比较长的时间。

那么,接下来讨论将t分配为两个字节,即uint型的时候,会出现什么情况。

void delay8(uint t){while(--t);}我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:delay8(0):延时524551us 524551-8*65536=263delay8(1):延时15usdelay8(10):延时85us 85-80=5delay8(100):延时806us 806-800=6delay8(1000):延时8009us 8009-8000=9delay8(10000):延时80045us 80045-8000=45delay8(65535):延时524542us 524542-524280=262如果把这个程序的可调度看为8us,那么最大误差为263us,但这个延时程序还是不能满足要求的,因为延时最大为524.551ms。

那么用ulong t呢?一定很恐怖,不用看编译后的汇编代码了。

那么如何得到比较小的可调度,可调范围大,并占用比较少得RAM呢?请看下面的程序:/*--------------------------------------------------------------------程序名称:50us 延时注意事项:基于1MIPS,AT89系列对应12M晶振,W77、W78系列对应3M晶振例子提示:调用delay_50us(20),得到1ms延时全局变量:无返回:无--------------------------------------------------------------------*/void delay_50us(uint t){uchar j;for(;t>0;t--)for(j=19;j>0;j--);}我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:delay_50us(1):延时63us 63-50=13delay_50us(10):延时513us 503-500=13delay_50us(100):延时5013us 5013-5000=13delay_50us(1000):延时50022us 50022-50000=22赫赫,延时50ms,误差仅仅22us,作为C语言已经是可以接受了。

mcs-51单片机中汇编程序延时的精确算法。

mcs-51单片机中汇编程序延时的精确算法。

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)延时的优点,设计一种精确度较高的延时算法。

C及汇编延时程序讲解

C及汇编延时程序讲解

有个好帖,从精度考虑,它得研究结果是:void delay2(unsigned char i){while(--i);}为最佳方法。

分析:假设外挂12M(之后都是在这基础上讨论)我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:delay2(0):延时518us 518-2*256=6delay2(1):延时7us(原帖写“5us”是错的,^_^)delay2(10):延时25us 25-20=5delay2(20):延时45us 45-40=5delay2(100):延时205us 205-200=5delay2(200):延时405us 405-400=5见上可得可调度为2us,而最大误差为6us。

精度是很高了!但这个程序的最大延时是为518us 显然不能满足实际需要,因为很多时候需要延迟比较长的时间。

那么,接下来讨论将t分配为两个字节,即uint型的时候,会出现什么情况。

void delay8(uint t){while(--t);}我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:delay8(0):延时524551us 524551-8*65536=263delay8(1):延时15usdelay8(10):延时85us 85-80=5delay8(100):延时806us 806-800=6delay8(1000):延时8009us 8009-8000=9delay8(10000):延时80045us 80045-8000=45delay8(65535):延时524542us 524542-524280=262如果把这个程序的可调度看为8us,那么最大误差为263us,但这个延时程序还是不能满足要求的,因为延时最大为524.551ms。

那么用ulong t呢?一定很恐怖,不用看编译后的汇编代码了。

那么如何得到比较小的可调度,可调范围大,并占用比较少得RAM呢?请看下面的程序:/*--------------------------------------------------------------------程序名称:50us 延时注意事项:基于1MIPS,AT89系列对应12M晶振,W77、W78系列对应3M晶振例子提示:调用delay_50us(20),得到1ms延时全局变量:无返回:无--------------------------------------------------------------------*/void delay_50us(uint t){uchar j;for(;t>0;t--)for(j=19;j>0;j--);}我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:delay_50us(1):延时63us 63-50=13delay_50us(10):延时513us 503-500=13delay_50us(100):延时5013us 5013-5000=13delay_50us(1000):延时50022us 50022-50000=22赫赫,延时50ms,误差仅仅22us,作为C语言已经是可以接受了。

用汇编语言编写1ms延时程序

用汇编语言编写1ms延时程序

用汇编语言编写1ms延时程序实验题目:设计延时时间1ms的程序实验目的:通过该延时时间程序的实验设计,了解运行程序时的我们可以通过该程序进行程序的延时操作,以便达到我们的操作目的。

实验设备:计算机一台。

实验程序:参考附录A实验内容:题目分析:题目是让计算机做一些无用的操作,来拖延时间。

可以根据一条指令执行时间需要几个时钟周期,即几个微妙,来编程延时程序,也就可以利用循环程序结构。

由查表可得,我们可以用PUSHF和POPF指令来进行编程。

而延时的时间主要取决于循环体及循环次数。

而PUSHF和POPF指令分别为10和8个时钟节拍,LOOP BX指令为3.4个时钟节拍,即此循环体需要用10+8+3.4=21.4拍,而每个时钟节拍是根据此系统的晶振频率而定的。

假设系统用的是8Mhz的晶振,则每个时钟节拍需要0.125μs,因此我们可以根据下列公式算出循环次数:换算成十六进制数为176H。

下图为程序流程图:六、实验总结:此程序中内循环是1ms时间,而在外循环中的两条控制指令DEC和JNZ所对应的时钟节拍分别为2个和4个,一共只需0.75μs,与1ms比较极短,所以我们在外循环里忽略不计了,外循环的循环初值为1000次,对应的十六进制为3E8H。

有时候我们需要计算机为我们“空”一点时间来进行空操作,即什么也不用做,我们可以通过上述的延时时间子程序来达到目的。

附录A延时1ms的程序如下:START: MOV CX,176H ;初始化,设定循环次数CX=376LP1:PUSHF ;循环体POPFLOOP LP1 ; CX CX-1,若CX0转LP1HLT ;暂停延时1s的程序如下:MOV BX,3E8H ; BX 1000LP2:MOV CX,176HLP1: PUSHFPOPF 延时1ms程序段LOOP LP1DEC BXDEC BX ; BX BX-1JNZ LP2 ;ZF=0时,转至LP2,即BX0时转HLT ;暂停参考文献郑学坚,周斌编著.微型计算机原理及应用(第三版).清华大学出版社.2001。

单片机汇编语言设计软件延时程序

单片机汇编语言设计软件延时程序

单片机汇编语言设计软件延时程序【摘要】在单片机控制系统中,常用到软件延时程序,其原理是利用CPU 执行指令消耗时间来实现的。

本文以单片机I/O口控制LED灯闪烁为例,介绍汇编语言设计软件延时程序的方法,同时讲解延时时间的估算方法。

【关键词】单片机;汇编语言;软件延时程序延时程序是单片机中一个很重要的部分,通常有两种方法实现:一是,定时器定时实现延时;二是,软件延时程序。

本文要介绍的是软件延时程序。

这种方法是通过CPU执行指令消耗时间来实现延时,其内容虽然简单,应用却极其广泛,比如跑马灯,多位数码管的动态显示,键盘扫描等等都需要用到软件延时。

本文介绍要介绍单片机里用汇编语言设计软件延时程序及其延时时间的估算方法,这也是循环结构的一个典型程序。

1 指令周期、机器周期和时钟周期软件延时程序是通过CPU执行指令消耗时间来实现的,首先要了解单片机CPU在执行一条指令时所需要的时间,即指令周期。

指令周期是以机器周期为单位,MCS51单片机通常把指令分为单周期指令、双周期指令和四周期指令三种;而机器周期是指CPU完成某一个规定操作所需要的时间,它是由12个时钟周期组成;时钟周期又叫振荡周期,是由单片机内部振荡电路产生的,是时钟频率的倒数。

以时钟频率12MHz(后面的均以这个频率来计算)为例,计算如下:1)时钟周期Tosc=1/时钟频率=1/12M=1/12us2)机器周期T=12个时钟周期=12Tosc=1us3)指令周期=(1~4)个机器周期=(1~4)T=(1~4)us软件延时程序常用的指令如下所示,计算其指令周期。

2 软件延时程序以及时间计算方法从指令周期的概念得知,单片机CPU执行一条指令花(1~4)us,若想得到一定时间t的延时,则需要执行指令次数n=t/指令周期,我们可采用循环结构来实现。

2.1 短暂延时程序——单循环设计在循环入口设置循环次数n0,执行减1条件转移指令n0次来实现短暂延时程序,程序如下所示。

单片机汇编语言设计软件延时程序

单片机汇编语言设计软件延时程序

单片机汇编语言设计软件延时程序引言:在单片机编程中,经常需要使用延时函数来控制程序的执行时间,例如等待外设初始化完成、延迟发送数据等。

本文将介绍使用汇编语言设计的延时函数。

一、延时原理在单片机中,延时的实现主要通过定时器或循环计数的方式来实现。

定时器通常会使用内部时钟源来产生时钟信号,然后通过预设的计数值来控制定时时间。

循环计数方式则是通过程序在指定循环内部执行空操作的次数来实现延时。

二、定时器延时定时器延时的实现比较简单,只需要设置定时器的计数值和相关控制寄存器即可。

1.使用定时器0延时定时器0是一种常用的定时器,可通过T0计数器、定时器控制寄存器TCON和定时器模式控制寄存器TMOD来实现。

例如,以下是一个使用定时器0的延时函数的实现示例:```assemblydelay_us PROCMOV R4,16 ; 假设使用的是12MHz的晶振,所以每个机器周期为1/12MHz=83.33ns,16个机器周期为1.33usMOVR5,FFH;设置循环的次数delay_usroutine:NOP;执行空操作,延时一个机器周期DJNZ R5,delay_usroutine ;循环R5次RETdelay_us ENDPdelay_ms PROCMOV R7,4 ; 延时1ms需要延时四次1usLOOP:CALL delay_usDJNZR7,LOOPRETdelay_ms ENDP```在上述代码中,delay_us过程使用了16次空操作进行延时,该延时约为1.33us。

delay_ms过程通过循环调用delay_us过程实现了1ms的延时。

2.使用定时器1延时定时器1是使用T1计数器、定时器控制寄存器TCON和定时器模式控制寄存器TMOD来实现的。

例如,以下是一个使用定时器1的延时函数的实现示例:```assemblydelay_us PROCMOV R4,16 ; 假设使用的是12MHz的晶振,所以每个机器周期为1/12MHz=83.33ns,16个机器周期为1.33usMOVR5,FFH;设置循环的次数delay_usroutine:NOP;执行空操作,延时一个机器周期DJNZ R5,delay_usroutine ;循环R5次RETdelay_us ENDPdelay_ms PROCMOV R7,4 ; 延时1ms需要延时四次1usLOOP:CALL delay_usDJNZR7,LOOPRETdelay_ms ENDP```在上述代码中,delay_us过程使用了16次空操作进行延时,该延时约为1.33us。

单片机汇编延时程序的理解

单片机汇编延时程序的理解

单片机汇编延时程序的理解单片机汇编实现延迟的程序代码:DELAY: MOV R7,#250 ;D1: MOV R6,#250 ;D2: DJNZ R6,D2 ;DJNZ R7,D1 ;RET如果用高级语言编程,只需要简单地调用延时函数就可以实现,但是计算机具体是怎么实现的呢?要想知其所以然,还得从汇编开始学起。

冒号前面的“DELAY”、“D1”、“D2”为语句行的名字,是为了程序的条件语句跳转用的,分号后面为注释,计算机执行时将过滤掉这些信息,最大限度减少代码长度,提高效率。

DELAY: MOV R7,#250 ;名字为“DELAY”的语句:意思是将CPU内部内存RAM的R7位置填写为250(原来为0,为什么是0呢?因为任何程序开始执行前都要复位,就像我们打算盘要将算子复位一样,或者我们用沙盘写字,要将沙盘抹平类似)D1: MOV R6,#250 ;名字为“D1”的语句:将R6位置填写为250D2: DJNZ R6,D2 ;名字为“D2”的语句:将R6位置的250减1,如果为0就继续执行下一条,不为0就继续执行D2这一句,因为R6=250,所以这个语句要原地踏步执行250次!DJNZ R7,D1 ;这句没有名字,因为没有别的语句要跳到这里,所以就省略了。

R7同样等于250,但它不是原地踏步,而是跳回了D1,这么干,D!、D2和本句将被循环执行250遍,需要强调的是:D2语句自身每次都要执行250遍,也就是执行了250*250=62500遍!RET ;子程序结束(因为延时程序一般不作为独立程序存在,它只是一个子程序,也就是高级语言中的一个函数,看到这个字符,子程序将跳回到母程序,进行下一步)。

汇编延时程序

汇编延时程序

DELAY:MOV R4,#2 ;延时子程序,12M晶振延时约1秒L3: MOV R2 ,#255L1: MOV R3 ,#255L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RET这里的延时不是很精确..谁能给个精确点的数..R2,R3,R4DELAY:MOV R4,#25 ;延时子程序,12M晶振延时1.001秒L3: MOV R2 ,#200L1: MOV R3 ,#248L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RET计算延时时间应注意以下几点:1、晶振跑多少的,象这里的6M的话,那么它执行的机器周期就是2us,2、看指令执行要多少个机器周期,向DJNZ、RET都要两个机器周期,3、那么,这里总共时间是26(1A)*255(0FF)*255(0FF)*2(机器周期)*2us(1个机器周期的时间)=6762600us 若要精确计算的话要加上上面赋值的时间和子程序返回的时间。

不过一般只要计算到上面就行了,因为赋值和返回指令的时间很短(相对于整个延时程序来说)希望对你有所帮助...51单片机 Keil C 延时程序的简单研究应用单片机的时候,经常会遇到需要短时间延时的情况。

需要的延时时间很短,一般都是几十到几百微妙(us)。

有时候还需要很高的精度,比如用单片机驱动DS18B20的时候,误差容许的范围在十几us以内,不然很容易出错。

这种情况下,用计时器往往有点小题大做。

而在极端的情况下,计时器甚至已经全部派上了别的用途。

这时就需要我们另想别的办法了。

以前用汇编语言写单片机程序的时候,这个问题还是相对容易解决的。

比如用的是12MHz晶振的51,打算延时20us,只要用下面的代码,就可以满足一般的需要:mov r0, #09hloop: djnz r0, loop51单片机的指令周期是晶振频率的1/12,也就是1us一个周期。

mov r0, #09h需要2个极其周期,djnz也需要2个极其周期。

mcs-51单片机中汇编程序延时的精确算法。 -回复

mcs-51单片机中汇编程序延时的精确算法。 -回复

mcs-51单片机中汇编程序延时的精确算法。

-回复MCs51单片机中的汇编程序延时是一种非常重要的功能,它可以用于控制程序的执行速度,并保证特定操作之间的时间间隔。

在本文中,我们将详细介绍MCs51单片机中汇编程序延时的精确算法,并一步一步回答与此主题相关的问题。

首先,让我们了解一下MCs51单片机的基本原理。

MCs51是一种8位微控制器,广泛应用于各种嵌入式系统中。

它的工作原理是通过读取和执行存储在其内部存储器中的指令来完成各种任务。

延时指令是一种特殊的指令,用于使程序在一定时间内暂停执行。

1. 什么是MCs51单片机中的延时?在MCs51单片机中,延时是指在程序执行过程中暂停一段时间。

这段时间可以是固定的,也可以根据不同的需求和算法进行动态调整。

延时指令是通过向计时器/计数器寄存器写入特定的数值来实现的。

2. MCs51单片机中的延时精确性有多高?MCs51单片机可以实现非常高精度的延时,通常可以达到微秒级别。

这种高精度是由于MCs51单片机的工作频率相对较高,并且可以使用精确的定时器/计数器来控制延时。

3. MCs51单片机中的延时算法是如何工作的?MCs51单片机中的延时算法基于定时器/计数器的工作原理。

定时器/计数器是一种特殊的寄存器,可以产生固定频率的时钟信号。

通过调整寄存器的初值,可以控制定时器/计数器产生的时钟脉冲的数量。

4. 常用的基本延时算法是什么?MCs51单片机中常用的基本延时算法是利用循环来实现的。

具体而言,通过实现一个循环,使程序重复执行一定次数,从而产生延时效果。

循环的次数可以根据不同的算法和需求进行调整。

5. 延时的时间是如何计算的?在MCs51单片机中,延时的时间是通过调整循环次数来实现的。

通常情况下,每次循环的执行时间是固定的,可以根据单片机的工作频率和循环次数进行计算。

例如,如果单片机的工作频率为10MHz,每次循环需要10个时钟周期,那么延时1ms就需要执行10000次循环。

汇编延时程序

汇编延时程序
; 闪烁功能1键处理程序
KEY1:LCALL DL10MS
JB P3.1,OUT1
SETB 01H ;20H.1位置1(执行闪烁功能2标志)
CLR 00H
CLR 02H
JB 03H,MAIN ;备用
AJMP MAIN ;返回主程序MAIN
;
;************;
; 功能程序 ;
;************;
;第1种闪烁功能程序
FUN0: MOV A,#0FEH ;累加器赋初值
SETB 00H ;20H.0位置1(上电时自动执行闪烁功能1)
RET ;子程序返回
;
;************;
; 主 程 序 ;
;************;
;
START:ACALL CLEAR ;调用初始化子程序
JNB P3.0,KEY0 ;读P3.0口,若为0转KEY0
JNB P3.1,KEY1 ;读P3.1口,若为0转KEY1
JNB P3.2,KEY2 ;读P3.2口,若为0转KEY2
JNB P3.3,KEY3 ;读P3.3口,若为0转KEY3
LOOP1: DJNZ R2,LOOP1
RET
;
;10毫秒延时子程序(调用20次0.5毫秒延时子程序)
DL10MS:MOV R3,#14H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
;
RETI ;中断返回(不开中断)
ORG 0023H ;串行口中断入口地址
RETI ;中断返回(不开中断)
;
;************;

单片机汇编语言设计软件延时程序

单片机汇编语言设计软件延时程序

Science &Technology Vision 科技视界延时程序是单片机中一个很重要的部分,通常有两种方法实现:一是,定时器定时实现延时;二是,软件延时程序。

本文要介绍的是软件延时程序。

这种方法是通过CPU 执行指令消耗时间来实现延时,其内容虽然简单,应用却极其广泛,比如跑马灯,多位数码管的动态显示,键盘扫描等等都需要用到软件延时。

本文介绍要介绍单片机里用汇编语言设计软件延时程序及其延时时间的估算方法,这也是循环结构的一个典型程序。

1指令周期、机器周期和时钟周期软件延时程序是通过CPU 执行指令消耗时间来实现的,首先要了解单片机CPU 在执行一条指令时所需要的时间,即指令周期。

指令周期是以机器周期为单位,MCS51单片机通常把指令分为单周期指令、双周期指令和四周期指令三种;而机器周期是指CPU 完成某一个规定操作所需要的时间,它是由12个时钟周期组成;时钟周期又叫振荡周期,是由单片机内部振荡电路产生的,是时钟频率的倒数。

以时钟频率12MHz(后面的均以这个频率来计算)为例,计算如下:1)时钟周期Tosc=1/时钟频率=1/12M=1/12us 2)机器周期T=12个时钟周期=12Tosc=1us 3)指令周期=(1~4)个机器周期=(1~4)T=(1~4)us软件延时程序常用的指令如下所示,计算其指令周期。

MOV Rn,#data ;数据传送指令,t=1T=1us DJNZ Rn,rel ;减1条件转移指令,t=2T=2us NOP ;空操作指令,t=1T=1us RET ;子程序返回指令,t=2T=2us ACALL ;短调用指令,t=2T=2us LCALL ;长调用指令,t=2T=2us2软件延时程序以及时间计算方法从指令周期的概念得知,单片机CPU 执行一条指令花(1~4)us,若想得到一定时间t 的延时,则需要执行指令次数n=t/指令周期,我们可采用循环结构来实现。

2.1短暂延时程序———单循环设计在循环入口设置循环次数n0,执行减1条件转移指令n0次来实现短暂延时程序,程序如下所示。

汇编延时1s的延时子程序

汇编延时1s的延时子程序

汇编延时1s的延时子程序1. 引言在计算机中,延时操作是指暂停程序的执行一段时间。

在某些应用中,需要通过延时来控制程序的执行速度或实现特定的时间间隔。

本文将介绍如何使用汇编语言编写一个延时1秒的延时子程序。

2. 延时原理在汇编语言中,我们可以使用计数器来实现延时操作。

计数器是一个特殊的寄存器,可以用来保存一个定时值,并在每个时钟周期递减。

当计数器的值为零时,表示经过了一段时间,可以继续执行后面的指令。

为了实现1秒钟的延时,我们需要知道CPU的主频(也称为振荡频率),即每秒钟振荡多少次。

假设CPU主频为f,则每个振荡周期为1/f秒。

因此,要实现1秒钟的延时,需要经过f个振荡周期。

3. 编写延时子程序步骤一:初始化计数器首先,我们需要将计数器初始化为CPU主频-1(因为计数器从0开始计数)。

假设CPU主频为f,则初始化计数器的值为f-1。

MOV CX, f-1 ; 初始化计数器为CPU主频-1步骤二:循环减计数器接下来,我们需要使用一个循环来递减计数器的值,直到它变为零。

在每次循环中,我们可以执行一些无关紧要的操作,以消耗一定的时间。

DELAY_LOOP:NOP ; 无操作指令,用于消耗时间LOOP DELAY_LOOP ; 循环减计数器并判断是否为零步骤三:调用延时子程序在我们的主程序中,可以通过调用延时子程序来实现1秒钟的延时。

在调用之前,需要将CPU主频f的值传递给延时子程序。

PUSH f ; 将CPU主频压入栈中CALL DELAY ; 调用延时子程序完整代码示例下面是一个完整的汇编代码示例:DELAY PROC NEARPUSH CX ; 保存寄存器CX的值MOV CX, [BP+4] ; 获取传入的CPU主频值DELAY_LOOP:NOP ; 无操作指令,用于消耗时间LOOP DELAY_LOOP ; 循环减计数器并判断是否为零POP CX ; 恢复寄存器CX的值RET ; 返回到调用者处DELAY ENDPMAIN PROC NEAR; 初始化堆栈等操作省略MOV AX, CPU_FREQUENCY ; 将CPU主频值赋给AX寄存器PUSH AX ; 将AX寄存器的值压入栈中CALL DELAY ; 调用延时子程序; 其他指令省略MAIN ENDP4. 总结通过使用汇编语言编写延时子程序,我们可以实现在程序中添加延时操作。

汇编延时程序的原理

汇编延时程序的原理

汇编延时程序的原理
汇编延时程序的原理是通过循环执行一定数量的指令来使程序暂停一段时间,实现延时的效果。

具体原理如下:
1. 计算机的时钟频率决定了处理器的工作速度,即每秒钟可以执行的指令数量。

假设时钟频率为f,则每个时钟周期的持续时间为1/f秒。

2. 要实现延时,首先需要确定延时的时间长度,假设为T秒。

3. 根据时钟周期的持续时间,可以计算出T所对应的时钟周期数量,即N = T * f。

4. 编写一个循环程序,通过循环执行一定数量的指令来模拟延时。

循环的次数即为N。

5. 循环中的指令可以是任意有效的汇编指令,比如空指令nop、加载/存储指令等,重要的是确保循环次数为N,以实现精确的延时。

延时程序的具体实现方式可能会根据不同的处理器架构和编程环境而有所不同,但基本原理是一致的。

通过循环执行一定数量的指令,可以实现精确的延时效果。

不过需要注意的是,由于现代处理器多核多线程的特性,延时程序的精确性可能受到一些因素的影响,比如其他运行中的线程、中断等。

因此,在编写延时程序时需要考虑这些影响因素,以便获得更加可靠的延时效果。

汇编延时1s的延时子程序

汇编延时1s的延时子程序

汇编延时1s的延时子程序一、延时子程序的概念延时子程序是指在程序中设置一个时间延迟,使得程序在执行到该子程序时暂停一段时间后再继续执行下一条指令。

在汇编语言中,常用的延时子程序有软件延时和硬件延时两种。

二、软件延时的实现方法1. 循环计数法循环计数法是一种简单而常用的软件延时方法。

其原理是利用CPU进行循环计数,当计数器达到设定值后,即完成了指定的时间延迟。

2. 空循环法空循环法是在循环体内不执行任何有意义的操作,只进行空转等待的方法。

其原理是利用CPU进行忙等待,当指定的时间到达后再继续执行下一条指令。

三、硬件延时的实现方法硬件延时是通过外部电路或芯片来实现的。

常用的硬件延时器有555定时器和8254可编程定时器等。

四、汇编语言实现1s延时子程序以下以循环计数法为例,介绍如何使用汇编语言实现1s延时子程序。

1. 程序思路:(1)将需要等待的时间转换为机器周期;(2)循环计数,当计数器达到指定值时,跳出循环。

2. 程序代码:delay:mov cx, 0FFFFh ;将计数器初始化为最大值mov dx, 0FFFFhdelay1:loop delay1 ;循环计数dec dx ;减少dx的值jnz delay1 ;如果dx不为0,则继续循环dec cx ;减少cx的值jnz delay1 ;如果cx不为0,则继续循环ret ;延时结束,返回3. 程序说明:(1)mov cx, 0FFFFh:将CX寄存器初始化为最大值,即65535;(2)mov dx, 0FFFFh:将DX寄存器初始化为最大值,即65535;(3)loop delay1:循环计数,每次减少CX的值,当CX的值为0时跳出循环;(4)dec dx:每次减少DX的值;(5)jnz delay1:如果DX的值不为0,则跳转到delay1标号处继续执行循环;(6)dec cx:每次减少CX的值;(7)jnz delay1:如果CX的值不为0,则跳转到delay1标号处继续执行循环;(8)ret:延时结束,返回。

汇编语言编写软件延时程序

汇编语言编写软件延时程序

R0,#250
;设置内循环次数n0
;内循环语句,运行n0次
; 中循环语句,运行n1次
DEL0:DJNZ R0,DEL0 DJNZ R1,DEL1 DJNZ R2,DEL2
;外循环语句,运行n2次
演示
任务要求:汇编语言编写软件延时程序 ——以单片机控制LED灯的闪烁为例
任务实施步骤
Step 1
Step 2
Step?次
n=t/2T=1s/2us=5000000次 MOV R0,#5000000

单片机工作寄存器只能接收8位的数据,不能大于255 外循环n2=10次 t=1s
如何获得 1s延时时 间?
多 重 循 环
外循环n1=2000次 中循环n1=200次 t=100ms 内 循环 n0=250次 t=500us
MAIN: CLR
调用子程序
ACALL DEL SETB P0.0 ACALL DEL SJMP MAIN
子程序入口地址

DEL:
MOV MOV MOV
R2,#10 R1,#200 R0,#250
;1us,设定外循环10次 ;1us,设定中循环100次 ;1us,设定内循环250次
延 时 子 程 序
Step 3
软件延时程序 解析
软件延时程序 编写
软件延时程序 应用
知 识 点 小 结
Step 3 软件延时程序应用 如何应用软件延时程序实现 LED灯的闪烁?
软件延时子程序
子程序三要素:调用指令、子程序入口地址、返回指令。 (1)主程序调用子程序:ACALL \ LCALL (2)子程序的入口地址:子程序的第一条指令的地址称
从内向外逐层构建循环结构

汇编延时程序

汇编延时程序
如图4.1.1 所示的石英晶体为12MHz,因此,1 个机器周期为1 微秒
机器周期微秒
MOV R6,#20 2 个机器周期 2
D1: MOV R7,#248 2 个机器周期 2 2+2×248=498
由以上可知,当R6=10、R7=248 时,延时5ms,R6=20、R7=248 时,
延时10ms,以此为基本的计时单位。如本实验要求0.2 秒=200ms,
10ms×R5=200ms,则R5=20,20*10002=200004us.
延时子程序如下:
即P1.0=0 时,发光二极管L1 亮;我们可以使用SETB P1.0 指令使P1.0
端口输出高电平,使用CLR P1.0 指Y: MOV R5,#20
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
(2). 输出控制
如图1 所示,当P1.0 端口输出高电平,即P1.0=1 时,根据发光二极管
的单向导电性可知,这时发光二极管L1 熄灭;当P1.0 端口输出低电平,
DJNZ R7,$ 2 个机器周期 2+ 2×248= 498
DJNZ R6,D1 2 个机器周期 2+20(2+498)=10002
因此,上面的延时程序时间为10.002ms。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念、机器周期和指令周期的区别和联系、相关指令的用法等用图解法的形式详尽的回答读者我们知道程序设计是单片机开发最重要的工作,而程序在执行过程中常常需要完成延时的功能。

例如在交通灯的控制程序中,需要控制红灯亮的时间持续30秒,就可以通过延时程序来完成。

延时程序是如何实现的呢?下面让我们先来了解一些相关的概念。

一、机器周期和指令周期1.机器周期是指单片机完成一个基本操作所花费的时间,一般使用微秒来计量单片机的运行速度,51 单片机的一个机器周期包括12 个时钟振荡周期,也就是说如果51 单片机采用12MHz 晶振,那么执行一个机器周期就只需要1μs;如果采用的是6MHz 的晶振,那么执行一个机器周期就需要2 μs。

2 .指令周期是指单片机执行一条指令所需要的时间,一般利用单片机的机器周期来计量指令周期。

在51 单片机里有单周期指令(执行这条指令只需一个机器周期),双周期指令(执行这条指令只需要两个机器周期),四周期指令(执行这条指令需要四个机器周期)。

除了乘、除两条指令是四周期指令,其余均为单周期或双周期指令。

也就是说,如果51 单片机采用的是12MHz 晶振,那么它执行一条指令一般只需1~2 微秒的时间;如果采用的是6MH 晶振,执行一条指令一般就需2~4 微秒的时间。

现在的单片机有很多种型号,但在每个型号的单片机器件手册中都会详细说明执行各种指令所需的机器周期,了解以上概念后,那么可以依据单片机器件手册中的指令执行周期和单片机所用晶振频率来完成需要精确延时时间的延时程序。

二、延时指令在单片机编程里面并没有真正的延时指令,从上面的概念中我们知道单片机每执行一条指令都需要一定的时间,所以要达到延时的效果,只须让单片机不断地执行没有具体实际意义的指令,从而达到了延时的效果。

1.数据传送指令 MOV数据传送指令功能是将数据从一个地方复制、拷贝到另一个地方。

如:MOV R7,#80H ;将数据80H 送到寄存器R7,这时寄存器R7 里面存放着80H,就单这条指令而言并没有任何实际意义,而执行该指令则需要一个机器周期。

2.空操作指令 NOP空操作指令功能只是让单片机执行没有意义的操作,消耗一个机器周期。

3.循环转移指令 DJNZ循环转移指令功能是将第一个数进行减1 并判断是否为0,不为0 则转移到指定地点;为0 则往下执行。

如:DJNZ R7,KK ;将寄存器R7 的内容减1 并判断寄存器R7 里的内容减完1 后是否为0,如果不为0 则转移到地址标号为KK 的地方;如果为0 则执行下一条指令。

这条指令需要2 个机器周期。

利用以上三条指令的组合就可以比较精确地编写出所需要的延时程序。

三、1 秒延时子程序、流程图及时间计算(以单片机晶振为12MHz 为例,1 个机器周期需要1μs)了解了以上的内容,现在让我们来看看程序总共所需时间:1+10+2560+330240+660480+5120+20+2=998433 μs≈1S在这里运行这段程序共需998433 μs,还差1567μs 才达到1S 的,所以想要达到完美的1S 延时,需要在返回指令RET 前再添加一些指令让它把1567μs 的延时完成。

有兴趣的读者可以自己试着添加完成。

最后补充一点,编写程序时一般将延时程序编写成独立的子程序,而所谓子程序也就是一个实现某个功能的小模块。

这样在主程序中就可以方便地反复调用编写好的延时子程序。

小提示:循环转移指令(DJNZ )除了可以给定地址标号让其跳转外,还可以将地址标号改成$,这样程序就跳回本指令执行。

例如:DJNZ R7,$ ;R7 内容减1 不为0,则再次执行本指令;为0 则往下执行,当R7 的值改为10时,则执行完该条程序所需的时间为2*10=20 μs。

51单片机汇编延时程序算法详解将以12MHZ晶振为例,详细讲解MCS-51单片机中汇编程序延时的精确算法。

指令周期、机器周期与时钟周期指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。

时钟周期:也称为振荡周期,一个时钟周期=晶振的倒数。

MCS-51单片机的一个机器周期=6个状态周期=12个时钟周期。

MCS-51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*(1/12000000)=1μs。

程序分析例1 50ms 延时子程序:DEL:MOV R7,#200 ①DEL1:MOV R6,#125 ②DEL2:DJNZ R6,DEL2 ③DJNZ R7,DEL1 ④RET ⑤精确延时时间为:1+(1*200)+(2*125*200)+(2*200)+2=(2*125+3)*200+3 ⑥=50603μs≈50ms由⑥整理出公式(只限上述写法)延时时间=(2*内循环+3)*外循环+3 ⑦详解:DEL这个子程序共有五条指令,现在分别就每一条指令被执行的次数和所耗时间进行分析。

第一句:MOV R7,#200 在整个子程序中只被执行一次,且为单周期指令,所以耗时1μs第二句:MOV R6,#125 从②看到④只要R7-1不为0,就会返回到这句,共执行了R7次,共耗时200μs第三句:DJNZ R6,DEL2 只要R6-1不为0,就反复执行此句(内循环R6次),又受外循环R7控制,所以共执行R6*R7次,因是双周期指令,所以耗时2*R6*R7μs。

例2 1秒延时子程序:DEL:MOV R7,#10 ①DEL1:MOV R6,#200 ②DEL2:MOV R5,#248 ③DJNZ R5,$ ④DJNZ R6,DEL2 ⑤DJNZ R7,DEL1 ⑥RET ⑦对每条指令进行计算得出精确延时时间为:1+(1*10)+(1*200*10)+(2*248*200*10)+(2*200*10)+(2*10)+2=[(2*248+3)*200+3]*10+3 ⑧=998033μs≈1s由⑧整理得:延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑨此式适用三层循环以内的程序,也验证了例1中式⑦(第三层循环相当于1)的成立。

注意,要实现较长时间的延时,一般采用多重循环,有时会在程式序里加入NOP指令,这时公式⑨不再适用,下面举例分析。

例3仍以1秒延时为例DEL:MOV R7,#10 1指令周期1DEL1:MOV R6,#0FFH 1指令周期10DEL2:MOV R5,#80H 1指令周期255*10=2550KONG:NOP 1指令周期128*255*10=326400DJNZ R5,$ 2指令周期2*128*255*10=652800DJNZ R6,DEL2 2指令周期2*255*10=5110DJNZ R7,DEL1 2指令周期2*10=20RET 2延时时间=1+10+2550+326400+652800+5110+20+2 =986893μs约为1s整理得:延时时间=[(3*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑩结论:针对初学者的困惑,对汇编程序的延时算法进行了分步讲解,并就几种不同写法分别总结出相应的计算公式,只要仔细阅读例1中的详解,并用例2、例3来加深理解,一定会掌握各种类型程序的算法并加以运用。

单片机延时子程序1)延时为:20ms 晶振12M1+(1+2*248+2)*4+1+1+1=20000US=20MS用汇编..优点就是精确...缺点就是算有点复杂.DELAY20MS:MOV R7,#4D1:MOV R6,#248DJNZ R6,$DJNZ R7,D1NOPNOPRET2)一些通过计算51汇编指令得出的软延时子程序;**************************************************************** *;延时10uS;**************************************************************** *time10us: mov r5,#05h ;11usdjnz r5,$ret;**************************************************************** *;延时50uS;**************************************************************** *time50us: mov r5,#19h ;51us djnz r5,$ret;**************************************************************** *;延时100uS;**************************************************************** *time100us: mov r5,#31h ;99.6us djnz r5,$ret;**************************************************************** *;延时200uS;**************************************************************** *time200us: mov r5,#64h ;201usdjnz r5,$ret;**************************************************************** *;延时250uS;**************************************************************** *time250us: mov r5,#7ch ;249.6us djnz r5,$ret;**************************************************************** *;延时350uS;**************************************************************** *time350us: mov r5,#0afh ;351us time350us_1: djnz r5,time350us_1ret;**************************************************************** *;延时500uS;**************************************************************** *time500us: mov r5,#0fah ;501us time500us_1: djnz r5,time500us_1ret;**************************************************************** *;延时1mS;**************************************************************** *time1ms: mov r5,#0fah ;1001us time1ms_1: nopnopdjnz r5,time1ms_1ret;**************************************************************** *;延时2.5mS;**************************************************************** *time2_5ms: mov r5,#05h ;2.496mstime2_5ms_1: mov r6,#0f8h ;497usdjnz r6,$djnz r5,time2_5ms_1ret;**************************************************************** *;延时10mS;**************************************************************** *time10ms: mov r5,#14h ;10.262mstime10ms_1: mov r6,#0ffh ;511usdjnz r6,$djnz r5,time10ms_1ret;**************************************************************** *;延时50mS;**************************************************************** *time50ms: mov r5,#63h ;49.996mstime50ms_1: mov r6,#0fbh ;503usdjnz r6,$djnz r5,time50ms_1ret;**************************************************************** *;延时100mS;**************************************************************** *time100ms: mov r5,#0c3h ;100.036mstime100ms_1: mov r6,#0ffh ;511usdjnz r6,$djnz r5,time100ms_1ret;**************************************************************** *;延时200mS;**************************************************************** *time200ms: mov r5,#02h ;250.351mstime200ms_1: mov r6,#0f4h ;125.173mstime200ms_2: mov r7,#0ffh ;511usdjnz r7,$djnz r6,time200ms_2djnz r5,time200ms_1ret;**************************************************************** *;延时500mS;**************************************************************** *time500ms: mov r5,#04h ;500.701mstime500ms_1: mov r6,#0f4h ;125.173mstime500ms_2: mov r7,#0ffh ;511usdjnz r7,$djnz r6,time500ms_2djnz r5,time500ms_1ret;**************************************************************** *;延时1S;**************************************************************** *time1s: mov r5,#08h ;1001.401mstime1s_1: mov r6,#0f4h ;125.173mstime1s_2: mov r7,#0ffh ;511usdjnz r7,$djnz r6,time1s_2djnz r5,time1s_1ret12M晶振机器周期为1USNOP为单周期指令DJNZ为双周期指令.3);;晶振12MHZ,延时1秒DELAY:MOV 72H,#100LOOP3:MOV 71H,#100LOOP1:MOV 70H,#47LOOP0:DJNZ 70H,LOOP0NOPDJNZ 71H,LOOP1MOV 70H,#46LOOP2:DJNZ 70H,LOOP2NOPDJNZ 72H,LOOP3MOV 70H,#48LOOP4:DJNZ 70H,LOOP44);延时1分钟子程序,F=6MHz;程序已测过,延时时间60,000,000.0uSdelay60s:mov r3,#228mov r2,#253mov r1,#219loop1: djnz r1,$djnz r2,loop1djnz r3,loop1nopret5)计算机反复执行一段程序以达到延时的目的称为软件延时,单片机程序中经常需要短时间的延时,但是相当一部分人对延时程序很模糊,对延时程序的算法不够了解,在这里我以12MHz晶振和两个经典延时子程序为例,详细分析单片机汇编延时程序。

相关文档
最新文档