1,单片机延时最好能延时多久怎么算的

理论上说,可以无限的。用的是循环嵌套, 比如 定时器1 延时了5000ms 产生中断 可以计数。 a++ 到a到你的制定值就可以了,a装不下的话 到了比如说50000 可以计数b++ a=0 以此类推
4.3应该是一个寄存器内整数自减耗费的ns 纳秒 。一般从晶振和数据手册可以推算到时钟周期,然后一个基本操作的机器周期会消耗一定的时钟周期,而一个指令周期可能耗费多个时钟周期。一般查数据手册可以计算出来的。

单片机延时最好能延时多久怎么算的

2,单片机延迟多少时间12M

MOV R7,#10;1微妙MOV R6,#50;R7*1=微妙DJNZ R6,$;R7*R6*2=微妙MOV R6,#100;R7*1=微妙DJNZ R6,$;R7*R6*2=微妙DJNZ R7,DELAY_DISP_LOOP;R7*2=微妙RET ;2微妙再加调用子程序的ACALL=2微妙所以1+10+1000+10+2000+20+2+2=3045微妙
假设MOV、DJNZ指令周期为2个,10×(54+154)+ 10×2 +2= 2100个指令周期;每个指令周期1us,则共有2.1ms。
这部分包含了硬件及软件上的变化因素.软件上, 建议输出汇编, 依照datasheet确认指令所用周期. (可能会有: a=i; inc a; i=a;....)硬件上, 依照硬件规格书, 可以知道晶振与单片机运行周期时间的关系. 标准应该是/12, 也有不同的.

单片机延迟多少时间12M

3,单片机这个程序延迟多少秒运行多少机器周期

TIMER: MOV R3,#04H ; 1 MOV R4,#00H ; 1 MOV R5,#00H ; 1 TIMERLOOP: DJNZ R5,TIMELOOP ; 2 第一个循环 DJNZ R4,TIMELOOP ; 2 第二个循环 DJNZ R3,TIMELOOP ; 2 第三个循环 RET ; 2 执行第一个循环花费机器周期:2*256; 执行第二个循环(包括第一个循环)花费机器周期:(2*256+2)*256; 执行第三个循环(包括前两个循环)花费机器周期:((2*256+2)*256+2)*4; 所以总共运行机器周期:1+1+1+((2*256+2)*256+2)*4+2 = (前面三个1是mov指令,后边一个2是ret指令,结果自己算算就知道了) 对不对可以在keil或者其他软件仿真一下,我以前做延时都这样按指令计算,和仿真结果是一样的,这个结果应该是对的。

单片机这个程序延迟多少秒运行多少机器周期

4,单片机程序 计算延时多长时间

先给你一个实例:石英晶体为12MHz,因此,1个机器周期为1微秒 机器周期 微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 DJNZ R7,$ 2个 2×248 DJNZ R6,D1 2个 2+ 20*(2+2*248+2)=10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET ///////////////////////////////////////////////////////////////DELAY:MOV R7,#10HDELAY0:MOV R6,#7FHDELAY1:MOV R5,#7FHDELAY2:DJNZ R5,DELAY2DJNZ R6,DELAY1DJNZ R7,DELAY0RETTime = 16*[ 127*(127*2+3)+3 ] + 3 = 522275 us;你可以用Keil仿真测出时间,我测试的时间是,第一个循环为257us,第二个为32642us,第三个为522277us
找个示波器,在待测时间处直接输出波形就可以了。然后用示波器看看时间差。
DJNZ R5,DELAY2一共执行了10H*7FH*7FH遍,每一遍用时2机器周期,所以总的时间是:10H*7FH*7FH*2=516128个机器周期。如果是12M时钟,每个机器周期1微秒。延时时间约为0.5秒。
计算延时时间应注意以下几点:1、晶振跑多少的,象这里的6m的话,那么它执行的机器周期就是2us,2、看指令执行要多少个机器周期,向djnz、ret都要两个机器周期,3、那么,这里总共时间是26(1a)*255(0ff)*255(0ff)*2(机器周期)*2us(1个机器周期的时间)=6762600us 若要精确计算的话要加上上面赋值的时间和子程序返回的时间。不过一般只要计算到上面就行了,因为赋值和返回指令的时间很短(相对于整个延时程序来说)希望对你有所帮助...

5,51单片机延时

org 00h jmp main org 000bh ;timer0中断入口 push psw ;cjne指令会影响PSW,所以先压栈 mov tl0,#0b0h mov th0,#3ch ;装入初值 inc r7 cjne r7,#10,next ;50ms中断,10次就是0.5s mov r7,#00h ;在此处写中断程序的具体内容next: pop psw retimain: mov tmod,#01h mov th0,#3ch mov tl0,#0b0h mov r7,#00h ;r7记录中断次数 setb tr0 setb et0 setb ea jmp $
我以2ms为例说明一下: 单片机的晶振周期为12hz,则执行一条代码为一个机器周期,为1微妙(ua),所以2ms=10*200(ua), 对r2赋值200(4位二进制数最大值为256,所以只能取到200)即#c8h。再对r2循环20次就实现了2ms延时。至于100ms、 200ms、 1s等等方法类似,只是调整相应的初值。多设置几次循环就行。 程序代码如下: delay: mov r1,#0ah ;赋值r1为10次 delay1: mov r2,#c8h ;赋值r2为200次 delay2: djnz r2,$ ;r2自减到0,不到0继续等待 djnz r1,delay1 ;r2减到0后r1自减1,重新给r2赋初值后继续循环,直到r1到0为止,延时结束 ret
#include <regx52.h>bit t;main() TMOD=0x01; TH0=(-50000)/256; TL0=(-50000)%256; EA=1; ET0=1;TR0=1; while(1);}void time0()interrupt 1 static unsigned char i=0; TH0=(-50000)/256; TL0=(-50000)%256; i++; if(i==10) i=0; t=~t; }}我不知道你利用定时器延时来干嘛用,就随便给你写了一个,一般我们直接用软件延时就可以了,定时延时是较为麻烦和不便的,上面的程序中,设了一个全局bit类型的变量t,每过半秒t就会取反一次,你就可以利用t的值去执行某种操作,如:if(t==1) P1_0=0;else P1_0=1; 如果P1_0是一个LED灯,并且这段程序在循环控制结构中,那灯就会循环每半秒闪烁一次。具体程序具体对待!定时器定时、中断系统你参考上面的程序。下面是毫秒级的软件延时,精确到小数点的第三位:ys(unsigned int y) unsigned char s; while(y--) for(s=122;s>0;s--);}

文章TAG:单片机最大延时多少单片机  最大  延时  
下一篇