单片机delaya延迟多少,请问在单片机C语言编程中用delay延迟的话1秒程序是什么单片
来源:整理 编辑:亚灵电子网 2023-02-22 08:34:38
1,请问在单片机C语言编程中用delay延迟的话1秒程序是什么单片
在Keil里仿真的话,在配置里把晶振调成12MHz,然后在调用delay函数的地方设置一个断点,开始调试程序,运行到断点处,注意程序左边有一个记录当前寄存器和一些状态的窗口,其中,里面有一个是专门记录当前运行了多少时间的变量,记下当前时间T1,然后按F10(不进入子函数)调试,再记录当前时间T2,则延时=T2-T1。多试几个A,差不多调到1s就够了。我一般都这么调。你要想明白其中原理,想自己算的话,你就看看delay的汇编代码段自己算吧。
2,单片机延时
你这是死循环延时,太浪费单片计的运行时间了,这也是最低级的写程序的方法。
用定时器中断处理是一种方法,但在定时器不多,或者定时器还有其它用途的场合就不好办了。而且这会打断其它流程的正常操作。
最好的做法是做成周期查询的,类似与操作系统的任务,定一个时间基数,比如1ms,然后单片机产生1ms中断,中断里只对变量a进行加1操作。主程序里任何需要定时的任务,就去查询当前a的值。比如延时就是记下当前的a值,然后等到a的值变到需要的时间值后再执行。
但不要死等a的值变化,主程序应该是轮询式的,到了需要的时间点就去做该做的事,没到时间,主程序就去轮询其它任务。这样的单片机的处理能力才真的被释放出来,这个程序也就有随意添加其他任务的可能。
3,单片机的延时怎么计算
delayxms:mov 52h,#4 ;50h,51h,52h用于延时 50h为参数x 延时1*x ms
delaya: mov 51h,#191
nop
nop
djnz 51h,$
djnz 52h,delaya
djnz 50h,delayxms
ret ;延时返回
这就是个延迟函数。这个函数的延迟时间不但要看 你这几个值,还跟晶振有关。晶振决定机器周期,这个延迟函数原理是:
先给50H、51H、52H、赋值,然后52H内的值自检,判断是否为零,不为零循环,这是个小循环,51H同样的,为二级循环,50H为三级循环,这样小循环、二级循环的总的机器周期是可以计算出来的,一个机器周期是多长时间由时钟周期决定,这样延迟时间又可以算出来
4,单片机延迟多少时间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, 也有不同的.
5,单片机 汇编程序 延时时间计算
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 的关系,并非正比关系,计算较难。
6,有关单片机延时程序的计算
我认为应该是将这个函数用汇编语言表示,计算得出的。在keil中编译该程序,用反汇编窗口观察这一个语句等于一下七条语句C:0x000F EF MOV A,R7C:0x0010 1F DEC R7C:0x0011 AC06 MOV R4,0x06C:0x0013 7001 JNZ C:0016C:0x0015 1E DEC R6 C:0x0016 4C ORL A,R4C:0x0017 70F6 JNZ delay(C:000F)第5条语句在循环时不执行每循环一次,执行六条汇编语句。在单片机晶振为12MHz下观察有的语句执行一条要1us,有的语句执行一条要2us。所以总时间并不是480us,而是727us我认为延时480us是按一次循环6条汇编语句,6*80等于480这样得出的。但就如我上面所说,结果并非如此。本程序的耗时计算如下: 1 + [1 + (1 + 1 + 2) * 249 + 2] * 5 + 2 = 4998 t如果再算上主程序中的调用指令的2t,总共延时5000t。如果时钟频率是6mhz,那么正好延时10ms。你提的问题很不清楚,因为不同的单片机,时钟频率不一样,那么,延时时间也不一样,而且按照理论的计算公式来计算,也有近似的误差,所以最好的是在仿真上查看,然后得出结果。这个根据单片机的晶振频率来算的,你先看看晶振周期是多大,然后一个机器周期是多少个晶振,一个机器周期就是一条代码执行的周期51的指令周期是对晶振12分频 如果晶振是12M 那么执行一条一个机器周期的的指令就是1US 即1S/(12M/12分频) =1US一个机器周期是12个时钟周期你查一下这段函数里的while(i--)的反汇编代码是什么然后,将该段代码中每条指令的指令周期数(不同指令的执行周期数不同)相加(比如:总数为N)然后根据单片机的晶振频率和指令周期换算公式(有些是12:1,有些是1:1)计算出每个指令周期的时间最后,N*指令周期=延时
7,单片机程序 计算延时多长时间
先给你一个实例:石英晶体为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 若要精确计算的话要加上上面赋值的时间和子程序返回的时间。不过一般只要计算到上面就行了,因为赋值和返回指令的时间很短(相对于整个延时程序来说)希望对你有所帮助...
文章TAG:
单片机delaya延迟多少单片机 延迟 多少
相关文章推荐
- BA6208是什么芯片,BA6247是什么芯片?
- 松下npm贴片机多少钱,买松下贴片机多少钱
- A9智能电视处理器能跑多少分,A9频率14怎么442系统和422系统安兔兔跑分一样
- 03db是多少,30wt等于多少
- 占空比多少有意义,占空比控制有什么优点
- 电路正负极颠倒危害,锂电池正负极接反
- 电路图中网孔,电路中网格的概念
- 电路板的硬件调试,简述硬件电路的设计流程
- 安桥818音箱设置多少,安桥818音频输入如何设置
- mos管电压等级,关于mos管的导通电压
- 正负极交换芯片,芯片的正负极
- 消除反电动势电压,反电动势消除电路
- 57AY161是什么芯片,A5657N是什么芯片?
- 安全芯片应用原理,什么是安全芯片?
- hx48电路图,xh-m401电路图