延时程序汇编程序
Ⅰ 51汇编语言的延时程序
用stc系列带ad转换的单片机(例如stc12c5410ad)在p1.0接上电位器,经ad转换得到控制值,再用定时中断产生基准信号,由控制值修改计数值达到调整时间的目的。
例如0电压对应20秒,5v电压对应80秒。
Ⅱ 用汇编语言设计50ms延时子程序。(晶振频率为12MHz)
关于单片机延时程序的具体分析
前面我们介绍了延时程序,但这还不完善,因为,我们只知道DJNZ R6,D2这句话会被执行62500次,但是执行这么多次需要多长时间呢?是否满足我们的要求呢?我们还不知道,所以下面要来解决这个问题。
关于单片机延时程序的具体分析
先提一个问题:我们学校里什么是最重要的。(铃声)校长可以出差,老师可以休息,但学校一日无铃声必定大乱。整个学校就是在铃声的统一指挥下,步调一致,统一协调地工作着。这个铃是按一定的时间安排来响的,我们可以称之为“时序��时间的顺序”。一个由人组成的单位尚且要有一定的时序,计算机当然更要有严格的时序。事实上,计算机更象一个大钟,什么时候分针动,什么时候秒针动,什么时候时针动,都有严格的规定,一点也不能乱。计算机要完成的事更复杂,所以它的时序也更复杂。
我们已知,计算机工作时,是一条一条地从ROM中取指令,然后一步一步地执行,我们规定:计算机访问一次存储器的时间,称之为一个机器周期。这是一个时间基准,好象我们人用“秒”作为我们的时间基准一样,为什么不干脆用“秒”,多好,很习惯,学下去我们就会知道用“秒”反而不习惯。
一个机器周期包括12个时钟周期。下面让我们算一下一个机器周期是多长时间吧。设一个单片机工作于12M晶振,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(1/12)也就是1微秒。(请计算一个工作于6M晶振的单片机,它的机器周期是多少)。
MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。这也不难再解,不是吗?我让你扫地的执行要完成总得比要你完成擦黑板的指令时间要长。为了衡量指令执行时间的长短,又引入一个新的概念:指令周期。所谓指令周期就是指执行一条指令的时间。INTEL对每一条指令都给出了它的指令周期数,这些数据,大部分不需要我们去记忆,但是有一些指令是需要记住的,如DJNZ指令是双周期指令。
下面让我们来计算刚才的延时。首先必须要知道晶振的频率,我们设所用晶振为12M,则一个机器周期就是1微秒。而DJNZ指令是双周期指令,所以执行一次要2个微秒。一共执行62500次,正好125000微秒,也就是125毫秒。
Ⅲ 汇编语言延时程序怎么解释
编码程序的一种变式。
Ⅳ 汇编延时程序
你先看下这段延时程序:
采用12M晶振,用51芯片处理。
DELAY: MOV R7,#250;
D1:MOV R6,#250;
D2:DJNZ R6 ,D2;
DJNZ R7,D1;
RET
以上是一段延时0.125秒的程序。
它计算的原理是:
这段程序最终执行了250*250次,而DJNZ指令执行需要2个机器周期,一个机器周期需要1微秒的时间,所以以上延时程序就是250*250*2=0.125秒。
你的程序原理跟这个应该是一样的~
Ⅳ 用汇编怎么写51单片机的延时程序
和前两位的差不多,最简单的就是运用MOV赋值的,再用DJNZ递减的方式,计算出每条指令执行时间,再加上循环字数,延时时间按照你自己的时间编写循环次数和赋值大小;另外,你也可以用定时器编写,计算好你的延时时间,当时间达到时输出高电平,作为中断信号,返回主程序,执行设定延时后的目标程序。
汇编和C各有好处,就我个人而言,浮点数的计算最好用C编,汇编不好解决,而且需要的很多代码,C很容易就可以实现!
Ⅵ 汇编语言延时程序问题
延时方法很多,用定时/计数比较方便也比较精确。如果用软件延时,则可以用循环(多重、嵌套都行)。根据时间长短确定循环次数,力求精确。时间计算以机器的晶振频率为基准,算出各指令的运行时间(每条指令运行时间乘所循环的次数就是该指令的全部运行时间),所有指令运行时间的和就是延时的时间。
比如:设晶振频率为12MHz 则每机器周期为1us
513us延时程序为
DL513: MOV R7,#0FFH ;1us
DJNZ R7,$;2us *255=510us
RET ;2us
延时时间为1+510+2=513us
延时时间较长则可以用多重循环(以四重循环为例),如:
KKKK0:MOV R2,#XX ;1us
KKKK1:MOV R3,#LL ;1us*XX
KKKK2:MOV R4,#NN ;1us*XX*LL
KKKK3:MOV R5,#MM ;1us*XX*LL*NN
DJNZ R5,$ ;2us *XX*LL*NN*MM
DJNZ R4,KKKK3 ;2us *XX*LL*NN
DJNZ R3,KKKK2 ;2us *XX*LL
DJNZ R2,KKKK1 ;2us *XX
RET ;2us
延时时间为1us+1us*XX+1us*XX*LL+1us*XX*LL*NN+2us *XX*LL*NN*MM+2us *XX*LL*NN+2us *XX*LL+2us *XX+2us
适当确定四个循环次数XX、LL、NN、MM就能得到准确的延时时间。
Ⅶ 求解释!!!汇编语言:延时程序
DELAY:MOV R7,#250 第一层循环250次
DEL1:MOV R6,#100 第二层循环100次
DEL2:MOV R5,#10 第三层循环10次
DJNZ:R5,$ 如果R5不等于0,则跳转到本行,也就是空转10次
DJNZ:R6,DL2 如果R6不等于0,则跳到DL2行,给R5赋值
DJNZ R7,DL1 如果R7不等于0,则跳到DL1行,给R6赋值
所以总的空转循环次数是250*100*10=250000次,通过调节R5,R6,R7值来控制延时时间
Ⅷ 延时程序 汇编
DELAY:MOV
R7,#200
;1us
DELAY1:DJNC
R7,DELAY1
;2us
RET
;2us
T=1+200*2+2=4003us,如果200改为199会更接近些,调整循环次数就能调整延时精度。
DEL:MOV
R7,#10;1us
DEL1:MOV
R6,#104
;1us
DEL2:DJNC
R6,DEL2
;2us
DJNC
R7,DEL1
;2us
RET
;2us
T=1+10*1+10*104*2+10*2+2=us,如果104改为99会更接近些。
(1)你的两个延时程序都对。
(2)延时不超过513us的延时程序这应该是最简单的方法了。
(3)其中#200,#10,#104不是随便设的,不能大过255,同时也要尽可能满足精度要求。
你的时间算法是对的。
还想请问一下和2200是否允许要看你的系统精度来定,一般不说,你这里将近10%的误差是比较大的。
Ⅸ 单片机汇编程序怎么计算延时
单片机编程时延时程序其实就是一些循环指令组成的集合。比如:
DELAY:
MOVR2,#248;本条指令1T执行1次
DJNZR2,$;本条指令2T执行248次
NOP;本条指令1T执行1次
RET;本条指令2T执行1次
所以延时时间为:1+248*2+1+2=500T,如果晶振是12M的话,延时500us
Ⅹ 汇编语言延时程序0.4s
汇编语言中,延迟有几种方式: 1、通过一些专门的语句,比如 NOP ;执行一个空操作 2、通过空循环,比如: setb p1.0 ;IO口置1 mov r2,#200 ;R2赋值200 djnz r2,$ ;循环200次,延时约400微妙 clr p1.0 ;IO口清0 3、通过调用延时程序