单片机C语言中,怎么通过循环次数计算延迟函数的延迟时间?
发布网友
发布时间:2022-05-29 18:25
我来回答
共4个回答
热心网友
时间:2023-11-02 20:43
首先你要知道一个指令周期是几秒
算法是1/(晶振频率除以12)
然后你要知道循环究竟执行了几个指令周期
你可以用keil里在线反汇编命令看看你的循环编译成机器语言后到底是几个指令周期
这样就知道了延迟时间
当然你取近似值也可以的
比如
for(i=0,i<255,i++){x=2}
这里x=2是一个指令周期
而执行了255次
假如你的晶振是12MHZ的
则你执行一个指令周期是1us
255次是0.255ms
热心网友
时间:2023-11-02 20:44
如果使用普通的for或者if语句做延时程序,就使用编译器进行软件仿真,将编写好的程序编译之后进入软件调试模式,进入延时函数之后,在函数最后设置断点,然后快速运行,一般编译器都可以看到函数的执行时间,你可以通过更改数字来微调延时时间。如果开中断的话,可以使用全局变量,进入中断之后自加一,以此来实现延时。
热心网友
时间:2023-11-02 20:44
首先你要知道一个指令周期是几秒算法是1/(晶振频率除以12)
然后你要知道循环究竟执行了几个指令周期你可以用keil里在线反汇编命令看看你的循环编译成机器语言后到底是几个指令周期这样就知道了延迟时间当然你取近似值也可以的
比如
for(i=0,i<255,i++){x=2}
这里x=2是一个指令周期而执行了255次假如你的晶振是12MHZ的则你执行一个指令周期是1us255次是0.255ms
热心网友
时间:2023-11-02 20:45
首先你要知道一个指令周期是几秒
算法是1/(晶振频率除以12)
然后你要知道循环究竟执行了几个指令周期
你可以用keil里在线反汇编命令看看你的循环编译成机器语言后到底是几个指令周期
这样就知道了延迟时间
当然你取近似值也可以的
比如
for(i=0,i<255,i++){x=2}
这里x=2是一个指令周期
而执行了255次
假如你的晶振是12MHZ的
则你执行一个指令周期是1us
255次是0.255ms
单片机C语言中,怎么通过循环次数计算延迟函数的延迟时间?
首先你要知道一个指令周期是几秒 算法是1/(晶振频率除以12)然后你要知道循环究竟执行了几个指令周期 你可以用keil里在线反汇编命令看看你的循环编译成机器语言后到底是几个指令周期 这样就知道了延迟时间 当然你取近似值也可以的 比如 for(i=0,i<255,i++){x=2} 这里x=2是一个指令周期 而执...
单片机循环延时函数
这个延时是通过三个for循环数数实现的,数了20*20*248次,时间刚好是0.2秒,因为单片机每执行一条指令,需要一定的时间。其实,根据不同的晶振产生的时钟,执行每条指令的时间会不一样,用keil软件进行仿真调试能得到一些较精确的延时!
单片机延时程序的延时时间怎么算的?
单片机的延时程序通过执行指令来达到延时效果,这个时间等于执行的指令需要的时间,而一个指令需要的时间叫做指令周期,这个时间等于若干个机器周期。
51单片机用c语言怎么写延时函数?
120次对吧。所以一个简单的延时功能就诞生了,我们只需要自减120次,就可以延时1ms,如果我们要延时50ms呢,那就自减50*120=6000次。那么在程序上如何表达呢?我们可以用两套for循环 void delay(int i){ int x,y;for(x=i;x>0;x--){ for(y=120;y>0;y--)} } 参数 i 代表该函...
单片机C语言中while的延时时间?
用KEIL软件可以计算时间,将while的起始位置和终止位置加红点(双击即可);然后左侧的SEC后面的就是执行的时间。再给你几个延时程序做参考:软件延时:(asm)晶振12MHZ,延时1秒 程序如下:DELAY:MOV 72H,#100 LOOP3:MOV 71H,#100 LOOP1:MOV 70H,#47 LOOP0:DJNZ 70H,LOOP0 NOP DJNZ 71H,LOOP...
51单片机C语言for循环延时程序时间计算
不可能的,是不是你的编译有错的啊 我改的晶振12M,在KEIL 4.0 里面编译的,为你得出的结果最大也就是40ms,这是软件的原因,不可能出现100ms那么大的差距,是你的软件的原因。不信你实际编写一个秒钟,利用原理计算编写一个烧进单片机和利用软件测试的秒程序烧进单片机,你会发现原理计算的程序...
51单片机C语言程序中延时函数delay的原理是什么?
关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大多数情况下,程序员是经验值。当然,如果你在汇编中编程,情况就不同了,因为每条指令使用一定数量的机器周期,你当然可以根据所有指令使用的总时间来计算特定延迟的总时间。
单片机C语言如何让一个数组内的元素延迟时间?
这个很简单,用软件延时和定时器中断延时都可以,具体说就是在数组循环送显环节中加入延时程序就OK。
基于51单片机的C语言延时函数程序编写
12M晶振延时5s的程序如下:void delayus2x(char n)//延时nx2 us { while(--n);} void delayms(unsigned int t)//延时 t x 1ms { while(t--){ delayus2x(245);delayux2x(245);} } delayms(50000);//调用此句延时5s 至于不能大于255,因为你的数据类型为char型,及8字节,最大值...
51单片机12HZ的,怎么计算延时时间?
2 * 248 = 496 T DJNZ R1,F (2 + 496 + 1) * 60 = 29940T RET 2 + 29940 + 1 = 29943T 总共是: 29943T。如果是 12MHz,时间就是:29943us。另外,执行这个程序,还需要一条 CALL 指令,应该再加上 2T。--怎么样实现5S的延时?慢慢算呗。