关于KEILC51单片机延时问题
kuaidi.ping-jia.net 作者:佚名 更新日期:2024-08-30
执行空语句执行124次,大概就能延时到1秒.不是很准的.经验值。
如要算的话:
比如51,mdelay函数想延时1ms,而执行for(i=0;i<124;i++),假设4个机器周期,每个机器周期时长为[12*(1/晶振频率)秒],若晶振为6MHz时,每个机器周期为2us,这样124*4*2是992us,加上for(;Delay>0;Delay--)需要的8us,正好延时1ms
C51这个延时程序,晶振是12M的还是11.05926MHz的
答:你可以用keil 设置断点来看运行的时间不就知道了 void delay(uint t){ uint i;for(;t>0;t--)for(i=0; i<125; i++);} 在这段程序之前和之后设置一个断点 比如说 ...delay(1);//此行设置断点 ...//此行设置断点 分别设置断点看运行时间。这两个断点之间运行的时间就是延时时间 你...
关于对单片机延时时间的疑惑(谁来解释一下,解释的好追加50分)_百度知 ...
答:仿照楼主的问题,进行了程序调试,C调用汇编的时间,可以看插图。实验证明了三个问题。1. 使用 RETI 是不必要的,使用 RET 并不报错。2. C调用这个汇编函数的时间,是 (5 + 5 * n)us。(假设机器周期T=1us)。3. 从仿真调试过程中,没有看到楼主所说“衰减”的现象。分析说明如下:主函数传值...
c51单片机定时十分钟怎么做
答:51定时最大为65ms;你可以定时50ms,然后定时20次为1s,再定时600次就是十分钟,呵呵,一次次累乘就可以了,希望你能成功
keil单片机编写的延时函数,第二个for循环没起作用?
答:你的延时函数所传递的参数定义为一个字节;那么 而你要传递的参数为1000,已经超过一个字节所能表达的最大值了;
C语言单片机怎么调用延时指令???
答:for(i=0;i<5000;i++){;} 具体延时时间,是先设置好晶振频率,用 KEIL C51 单步运行,watchstop 里面的秒表有显示 ,多少个指令 和 消耗多少微秒.
keil c51 晶振是11.0592mhz 我写的是 delay(uchar i) { while(--i...
答:谁知道你的 i 是多少呀???诶,这个没人知道。可以用keil仿真直接得到答案,也可以参考下面的自己改。下面几个是单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0000MHz的晶振,而...
单片机 编写延时一分钟程序 fosc=6Mhz
答:自己编。。。 精确到1微秒没有意义 Keil C51程序设计中几种精确延时方法1 0 推荐 摘要 实际的单片机应用系统开发过程中,由于程序功能的需要,经常编写各种延时程序,延时时间从数微秒到数秒不等,对于许多C51开发者特别是初学者编制非常精确的延时程序有一定难度。本文从实际应用出发,讨论几种实用的编...
如何用单片机的delay实现延时?
答:单片机中的delay()的单位时间不是系统提供的,而是用户自己编制的。如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振...
单片机delay函数延迟时间计算,delay(80);为什么是600us左右?
答:只有汇编语言才能得到精确的时间。C编译成汇编时,不同的编译器,不同的编译策略都会使最终的程序不一样。如果短时间的延时,可以利用_nop_()来控制,如果是长时间的可以用定时器中断来控制。你自己写函数的话,可以在KEIL调试模式下,单步运行,看左侧窗口中的second,那个是程序从复位到当前的运行秒数...
编写一段延时1秒的程序(fosc=6MHz)学习单片机的~
答:装个KEIL C51 ,自己编一个,如果C语言,for(i=0;i<5000;i++){;} 自己仿真一下,设个断点,用里面的跑表,看看,那个5000改一下,就知道多少秒了
如要算的话:
比如51,mdelay函数想延时1ms,而执行for(i=0;i<124;i++),假设4个机器周期,每个机器周期时长为[12*(1/晶振频率)秒],若晶振为6MHz时,每个机器周期为2us,这样124*4*2是992us,加上for(;Delay>0;Delay--)需要的8us,正好延时1ms
答:你可以用keil 设置断点来看运行的时间不就知道了 void delay(uint t){ uint i;for(;t>0;t--)for(i=0; i<125; i++);} 在这段程序之前和之后设置一个断点 比如说 ...delay(1);//此行设置断点 ...//此行设置断点 分别设置断点看运行时间。这两个断点之间运行的时间就是延时时间 你...
答:仿照楼主的问题,进行了程序调试,C调用汇编的时间,可以看插图。实验证明了三个问题。1. 使用 RETI 是不必要的,使用 RET 并不报错。2. C调用这个汇编函数的时间,是 (5 + 5 * n)us。(假设机器周期T=1us)。3. 从仿真调试过程中,没有看到楼主所说“衰减”的现象。分析说明如下:主函数传值...
答:51定时最大为65ms;你可以定时50ms,然后定时20次为1s,再定时600次就是十分钟,呵呵,一次次累乘就可以了,希望你能成功
答:你的延时函数所传递的参数定义为一个字节;那么 而你要传递的参数为1000,已经超过一个字节所能表达的最大值了;
答:for(i=0;i<5000;i++){;} 具体延时时间,是先设置好晶振频率,用 KEIL C51 单步运行,watchstop 里面的秒表有显示 ,多少个指令 和 消耗多少微秒.
答:谁知道你的 i 是多少呀???诶,这个没人知道。可以用keil仿真直接得到答案,也可以参考下面的自己改。下面几个是单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0000MHz的晶振,而...
答:自己编。。。 精确到1微秒没有意义 Keil C51程序设计中几种精确延时方法1 0 推荐 摘要 实际的单片机应用系统开发过程中,由于程序功能的需要,经常编写各种延时程序,延时时间从数微秒到数秒不等,对于许多C51开发者特别是初学者编制非常精确的延时程序有一定难度。本文从实际应用出发,讨论几种实用的编...
答:单片机中的delay()的单位时间不是系统提供的,而是用户自己编制的。如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振...
答:只有汇编语言才能得到精确的时间。C编译成汇编时,不同的编译器,不同的编译策略都会使最终的程序不一样。如果短时间的延时,可以利用_nop_()来控制,如果是长时间的可以用定时器中断来控制。你自己写函数的话,可以在KEIL调试模式下,单步运行,看左侧窗口中的second,那个是程序从复位到当前的运行秒数...
答:装个KEIL C51 ,自己编一个,如果C语言,for(i=0;i<5000;i++){;} 自己仿真一下,设个断点,用里面的跑表,看看,那个5000改一下,就知道多少秒了