1,单片机延时计算方法

以C51为例,12MHZ晶振的话,1个时钟周期为1/12微秒,1个机器周期=12个时钟周期,定时器每个机器周期可延时12*1/12微秒=1微秒。如果晶振为8MHZ的话,定时器每个机器周期可延时12*1/8微秒=1.5微秒

单片机延时计算方法

2,单片机定时器延时

#include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar tt; void timer0() interrupt 1 void init() void main()

单片机定时器延时

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

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

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

4,单片机延时小问题

a是子程序名 //之后的fosc=12mhz是表示晶振是12m的 x=1的时候 a子程序里面循环91次 所花费的时间是根据12m晶振的机器周期来计算的 但12m的晶振 我们一般是用循环120次代表1ms 这个的计算方法就不知道了 要么这个晶振不是12m的 而是11m+的
你先使用一个大点的数写一个延时循环函数,执行前打开定时器,执行完后关闭定时器,看看定时器的值是多少,然后大概就估算出单个循环的时间,比如: void delay() unsigned int i; i=1000; while(i>0)i--; }void main() TMOD=0x01; TH0=0;TL0=0; TR=1; delay(); TR=0;} delay()的执行时间 (TH0*255+TL0)*1us 然后就算出每执行一次的大概时间为; (TH0*255+TL0)*1us/1000;然后调整i的值,我就是这样处理延时的,对于延时要求高的!你试试!
你用的是什么单片机如果是51的话,每一个nop指令就是1us

5,单片机延时问题下面的程序延时大约是多少

如果选用标准单片机,12振荡一个机器周期,正常模式,12M晶振,采用内部直接寻址寄存器(data),其它编译控制项为缺省设置时,一句while( --num ) 的执行时间是8us,Delay函数的执行时间就是num * 8us。详细说明如下:这段程序的延时与选用的单片机型号(有12振荡一个机器周期和单振荡一个机器周期的芯片)、工作方式(正常还是倍频模式)、晶振、编译模式(变量选择内部寄存器还是外部寄存器及优化模式),num初值等都有关系。另外多说一句,num参数数据类型也是一个因素,选择ulong、uint、uchar时间是不一样的,long时间最长,char最短ulong:40usuint:8usuchar:2us差别很大的。
很少的机器周期耗费了一点时间,单时间增大的时候,它把损耗的时间减小了,所以后来就变小了其实就好比一个分数一样,当分子分母同时增加的时候的那种意思差不多楼主可以好好理解一下你要是知道汇编的话,你就知道为什么这样的建议你去看下汇编的延时计算,你就很清楚 了
初学一般都用的12M的晶振,以上是一个带形参的函数,写程序调用是应写成void Delay(1) 括号里面任写一数 延时时间为1.6us乘以括号里的数。一般我们认为void Delay(3)为5微妙延时。在不需要精确度的时候可以这样用延时函数,精准度高的时候必须用定时器。
和选用的单片机、晶振、编译器有关。这个的话12M,stc单片机 不到1us

6,关于51单片机长时间定时

使用T2定时器的16位重载方式,并且使用中断。当T2溢出时发生中断并进入中断程序。在中断程序中使用DPTR作为计数器,因此最大可以延时2的32次方个机器周期(2^32=4294967296)……够用了吧?当使用12MHz的晶振时,可以延时大约4295秒。
软件方式,就用多重循环吧,理论上能延时无限长
给你举个例子吧 80C51已知fosc=6MHZ,下面延时子程序的延时时间大约为10ms精确的时间为:DELAY: MOV R6,#10 ;2us D1: MOV R7,#250 ;20us,重复了10次,一次2usD2: DJNZ R7,D2 ;1ms,250*2*2 usDJNZ R6,D1 ;40us ,10*2*2usRET ;4us虽然一次只累计250次但通过循环10次的250次累计,就可以达到长时间的定时所以上面的精确时间为10ms+66us(忽略不计)这么详细了没明白?直说了吧这程序段,你给R6:10,他就延时10ms你给R6:20,他就延时20ms你给R6:200,他就延时200ms在R6=200的基础上,在加两句,让200ms循环5次,就可以得到1s的延时,10次就是2s这样够不够?那我给你解释下上面的那段延时程序吧.DELAY: MOV R6,#10;给R6预设10,循环10次用D1: MOV R7,#250;给R7预设250,D2: DJNZ R7,D2;R7减1,判断R7是否为0,不为0,则跳转D2(原地踏步),R7=0的话则继续执行下一条(R7已从250减到0了)DJNZ R6,D1;R6减1,判断R6是否为0,不为0,跳D1,而D1又是从R7重赋250,这样,不断循环,直到R6=0,才循环结束RET
我明白了,你刚学单片机。定时器肯定还不是很懂! 你要的是纯软件定时的吧。 我随便写个: delay: mov r7,#00 ;00d 当r7为00时,djnz下自然成ff。也就是256 d_1: mov r6,#00 ;明白了吧 djnz r6,$ ;这个能看明白吧~~ djnz r7,d_1 ;这就是所谓的多重循环。 ret 如果要用硬件定时的可以参考一楼的哥们,我就不在重复了

7,单片机中 定时器计数器 的计数初值是怎么计算得出的计数和定时

计数初值的计算:定时或计数方式下计数初值如何确定:定时器选择不同的工作方式,不同的操作模式其计数值均不相同。若设最大计数值为M,各操作模式下的M值为:模式0 : M=2^13 =8192模式1: M=2^16=65536模式2:M=2^8=256模式3: M=256,定时器T0分成2个独立的8位计数器,所以THO、TLO 的M均为256。因为MCS-51 的两个定时器均为加1计数器,当初值到最大值( 00H或0000H )时产生溢出,将TF位置1,可发出溢出中断,因此计数器初值X的计算式为: X=M- 计数值。式中的M由操作模式确定,不同的操作模式计数器的长不相同,故M值也不相同。而式中的计数值与定时器的工作方式有关。1、计数工作方式时计数工作方式时,计数脉冲由外部引入,是对外部冲进行计数,因此计数值根据要求确定。其计数初值: X=M- 计数值。2、定时工作方式时定时工作方式时,计数脉冲由内部供给,对机器周期进行计数,计数脉冲频率fcont=fosc*1/12、计数周期T=1/fcont=12/fosc定时工作方式的计数初值X等于:X=M-计数值=M-t/T=M-(fosc*t)/12式中:fosc为振荡器的振荡频率,t为要求定吋的时间。扩展资料:定时器工作方式的设定:定时器有两种工作方式:定时和计数。由TMOD的D6位和D2位决定,其中D6位决定T1的工作方式,D2位决定T0的工作方式。值为0时工作在定时方式,值为1时工作在计数方式。并且有四种操作模式:1、模式0:13位计数器,TLi只用低5位。2、模式1:16位计数器。3、模式2:8位自动重装计数器,THi的值在计数中不变, TLi 溢出时,THi中的值自动装入TLi中。4、模式3:T0分成2个独立的8位计数器,T1停止计数。
用定时器来及频率,你只需将定时器定时为1秒,1秒内的脉冲个数就是频率了。如果你一定要公式,非常简单,用计数器计到的脉冲个数除以定时时间就是频率了。其中定时器每计一次的时间是晶振的十二分之一,例如,12m晶振就是(12*10^6)*(1/12)=1us.
定时器的初值是通过你想定时的时间来确定的,计数是对某个IO口的脉冲进行计数。
定时器是通过设定初值,然后单片机在你设定的初值上每个指令周期加1,直到溢出,设置溢出标志位,而计数是对某个IO口的脉冲进行计数。两者最关键区别是定时器的计数脉冲是单片机内部的,计数器的计数脉冲来自输入引脚。定时器的初值的计算如下:在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数。若选择12M晶振,则定时器的计数频率为1MHZ。假设定时时间为T,机器周期为T1,即12/晶振频率。X为定时器初值。则 X=2^n-T/T1。方式0,n=13,方式1时,n=16,方式2和方式3,n=8

文章TAG:单片机定时器最高可以延时多少钱单片机  定时  定时器  
下一篇