汇编程序延时函数是什么,单片机 汇编程序 延时时间计算
来源:整理 编辑:黑码技术 2024-08-23 10:25:08
本文目录一览
1,单片机 汇编程序 延时时间计算
R2 * (R2-1) * (R2 -2) * (R2-3)delayxms:mov 52h,#4 ;50h,51h,52h用于延时 50h为参数x 延时1*x msdelaya: mov 51h,#191 nop nop djnz 51h,$ djnz 52h,delaya djnz 50h,delayxms ret ;延时返回 这就是个延迟函数。这个函数的延迟时间不但要看 你这几个值,还跟晶振有关。晶振决定机器周期,这个延迟函数原理是: 先给50h、51h、52h、赋值,然后52h内的值自检,判断是否为零,不为零循环,这是个小循环,51h同样的,为二级循环,50h为三级循环,这样小循环、二级循环的总的机器周期是可以计算出来的,一个机器周期是多长时间由时钟周期决定,这样延迟时间又可以算出来这个程序,见过。它以 R2 的内容为参数,进行延时。经过实验验证,其延时时间和 R2 的关系,并非正比关系,计算较难。
2,求51单片机延时延时1分钟汇编语言程序12Hz
所谓的延时函数 就是做一个死循环 void delay(void)for(i=0;i<20000;i++); //延迟函数,让程序数数,浪费时间。可以通过改变i的值来改变时间。}延迟1分钟 12hz 具体不知道i是多少了 试试60*1000L1: MOV R7,100 ;1S L2: MOV R6,100 ;1S DJNZ R7,$ ;2S DJNZ R6,L2 ;2S DJNZ R5,L1 ;2S ;其中R5是外面赋值的可控制延迟时间 假设是12MHZ 要延迟1S R5=50 [1+(1+2*100+2)*100+2]*R5近似==1000000us==1S最好用定时器来做,我的博客上有延时一秒的,你把常数改一下就行了.原来12mhz的,机器周期是1us, 但是在循环程序,没运行一次空语句需要花2us, 因此原来程序中为 20*20*248*2=198400,大约是200000us,即0.2s..如果变为1mhz后,机器周期是1/12us,没运行一次空语句需要花1/6us, 然后把r3*r4*r5*1/6=200000,把r3、r4、r5取整数值就可以
3,延时函数的作用是什么
延时的作用就是让数据正确处理。CPU速度来能多快取得I0口状态就多快取,而是CPU程序按指定时间间隔取值。比如CPU速度为1微妙可以处理一条语句,你刚取完当前10口状态,如果没有延时处理,在循环处理过程中立即又去取当前10口状态作为下一个Bit位的数据。两者之间才间隔CPU的1微妙,这样不就出错了吗?因为协议约定为104.166...微妙,所以要得到正确的数据需要让取下一个10状态的处理过程等待104.166...微妙后再开始取值才正确,这时用延时就合适了。扩展资料:延时函数编写分析clock()函数返回程序从开始执行到函数执行时所经过的时间,一般经过 1ms / CLOCK_PER_SEC ,clock()函数的返回值会增加1 。。 CLOCK_PER_SEC 为time.h文件中定义的宏,每个编译器都不一样。。 TC中这样定义: #define CLOCKS_PER_SEC 18.2 VC/BCC中这样定义: #define CLOCKS_PER_SEC 1000.0 现在分析函数的执行过程,函数传过来的是秒数,但是函数需要clock函数来延时,所以需要把秒数转化成 sec*CLOCL_PER_SEC,才能和clock函数返回值作比较。。延时一般是用来等待外设反应的。cpu速度很快,而外设的速度是千差万别的,所以我们再编写单片机程序时,必须根据外设的速度设置延时,否则外设反应不过来,如打印驱动、语音片驱动等;还有的延时程序时用来做显示驱动的,因为人眼有个视觉暂留,显示闪烁的频率会让人感觉亮度不同。你做多了就会有概念了。祝你早日入门!延时函数的作用?就是故意磨蹭,故意耽误时间。因为单片机的速度快,有时,外设的速度跟不上,这就需要延时,磨蹭一会,再干活。
4,单片机汇编的延时子函数
在晶振为12MHz情况下
DEL:MOV R7,#0FFH ;1us 整个过程只执行1次== 1us
DEL1:MOV R6,#0FFH ;1us 执行R7次== R7*1us
DEL2:MOV R5,_____ ;1us 执行R6xR7次== R6*R7*1us
DEL3:DJNZ R5,DEL3 ;2us 执行R5xR6xR7次== R5*R6*R7*2us
DJNZ R6,DEL2 ;2us 执行R6xR7次== R6*R7*2us
DJNZ R7,DEL1 ;2us 执行R7次== R7*2us
RET ;2us 只执行1次== 2us
延时时间T=1us + R7*1us+ R6*R7*1us + R5*R6*R7*2us + R6*R7*2us + R7*2us +2us
= 195843+130050R5
令T=1000000us,即解得近似值R5=6 最后代人得T= 976143us=0.97s如果你是用12MHZ的晶振
那么就是255*255*x*24*(1/(12*10^6))=1
MOV R7,#0FFH 这句话代表R7可以减255次
24是 DJNZ R5,DEL3这条指令的振荡周期
因为主要就是DJNZ R5,DEL3 在循环所以算他就可以了用数学的方法:先设求的量为Z,列方程:((Zx2+1+2)x255+1)x12/(12x1000000)=1。好了求解吧!分析:MOV 占一个指令时间,一个指令耗12个机器周期。DJNE占了两个指令时间,晶振频率考试一般是12MHz。答案是:6(计算是6.289,取近似值)如果用12MHz的晶振,那时钟周期为1/12us,机器周期为12*(1/12)us=1us
而DNJZ是双周期指令,即要2us完成
即1秒钟能完成0.5M条DJNZ指令
于是要填的数为500000/255/255=7.7,即0x08H
5,求解释汇编语言延时程序
需要注意的一点就是DJNZ指令是2周期的,所以你的时间是循环次数乘以2.DELAY:MOV R7,#250DEL1:MOV R6,#100DEL2:MOV R5,#10DJNZ:R5,$;2个机器周期DJNZ:R6,DL2DJNZ R7,DL12*10*100*250=500000us=0.5s以上时间只是大概值,没有考虑其它指令的周期,但影响不大。原发布者:aaahuang163;*****************************************************************便于初学者,较为精确的延时程序;*****************************************************************;延时10uS;*****************************************************************time10us:movr5,#05h;11usdjnzr5,$ret;*****************************************************************;延时50uS;*****************************************************************time50us:movr5,#19h;51usdjnzr5,$ret;*****************************************************************;延时100uS;*****************************************************************time100us:movr5,#31h;99.6usdjnzr5,$ret;*****************************************************************;延时200uS;*****************************************************************time200us:movr5,#64hDELAY: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,#250 ;这里时间1DEL1:MOV R6,#100 ;这里时间250DEL2:MOV R5,#10 ;这里时间250*100DJNZ:R5,$ ;这里循环次数250*100*10,时间再乘2DJNZ:R6,DL2 ;这里循环次数250*100,时间再乘2DJNZ R7,DL1;这里循环次数250,时间再乘2总时间:1+250+250*100+2*250*100*10+2*250*100+2*250=575751微秒注意开中断,保存现场,关中断和返回,其他细节你可以问我,或者把题目发给我我帮你看看
文章TAG:
汇编 汇编程序 程序 延时 汇编程序延时函数是什么 汇编程序 延时时间计算