
正文
单片机c语言延时程序怎么算,单片机延时程序的延时时间
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
单片机C语言延时程序,延时时间是怎样计算的
T = tc + k * t0,tc是任何一次调用都具有的调用开销。t0时k=1时去掉调用开销tc的循环体执行时间。给两个不同的k得到两个不同的T,就可以确定这两个参数 tc和t0。 从而就可以根据谣言吃的时间和容易的计算出k的值。
单片机的延时程序通过执行指令来达到延时效果,这个时间等于执行的指令需要的时间,而一个指令需要的时间叫做指令周期,这个时间等于若干个机器周期。
计数器初值可以通过以下公式计算:计数器初值 = 256 - 延时所需指令数 + 2。因此,计数器初 1,333,333 + 2 = 0x0F。以上程序中使用了一个8位计数器,所以最大可以延时255个机器周期(即85ms左右)。如果需要更长的延时时间,可以使用16位计数器或者多次调用延时函数来实现。
相关问答
Q1: 单片机中延时时间怎样计算?
1、计数器初值可以通过以下公式计算:计数器初值 = 256 - 延时所需指令数 + 2。因此,计数器初 1,333,333 + 2 = 0x0F。以上程序中使用了一个8位计数器,所以最大可以延时255个机器周期(即85ms左右)。如果需要更长的延时时间,可以使用16位计数器或者多次调用延时函数来实现。
2、单片机开发者在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。有时还要求有很高的精度,如使用单总线芯片DS18B20时,允许误差范围在十几微秒以内[2],否则,芯片无法工作。
3、时间精确的延时程序要用汇编语言来编写。计算延迟时间要查询每一条程序的执行周期数,然后加起来就是了。
4、如果FOSC=12MHZ单片机,那么一个机器周期为12/12M=1us 如果是汇编语言的话:L1:MOV R7,#100 L2:MOV R6,#100 L3:MOV R5,#50 DJNZ R5,$;此句两个机器周期也就是2T DJNZ R6,L3 DJNZ R7,L2 RET 2T*50*100*100=1,000,000us(共一秒),这是粗略算法,有误差,但不是太大。
5、如果单片机晶振为6M,机器周期即为2us=12/fosc 汇编语句对时间的把握精确于C语言,所以参考不同指令的长度,就可以算出你的延迟时间。
6、单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms()。普通延时法这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。下面的代码是在网上搜到的,经测试延时比较精准。
Q2: 哪位单片机高手详细的告诉我一下:单片机中的延时程序的延时时间怎样计算...
1、单片机的延时程序通过执行指令来达到延时效果,这个时间等于执行的指令需要的时间,而一个指令需要的时间叫做指令周期,这个时间等于若干个机器周期。
2、单片机开发者在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。有时还要求有很高的精度,如使用单总线芯片DS18B20时,允许误差范围在十几微秒以内[2],否则,芯片无法工作。
3、计数器初值可以通过以下公式计算:计数器初值 = 256 - 延时所需指令数 + 2。因此,计数器初 1,333,333 + 2 = 0x0F。以上程序中使用了一个8位计数器,所以最大可以延时255个机器周期(即85ms左右)。如果需要更长的延时时间,可以使用16位计数器或者多次调用延时函数来实现。
4、以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
5、如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用1059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。
6、单片机编程时延时程序其实就是一些循环指令组成的集合。
Q3: C语言delay延时时间怎么算,说的详细点谢谢
void Delay(unsigned int nDelay){ unsigned int i,j,k;for ( i=0;inDelay;i++ )for ( j=0;j6144;j++ )k++;} 用法:#include system.h 功能:短暂延时 说明:延时msec*4毫秒所以,delay的延迟时间是和你的cpu时钟周期相关的。
delay(1000),delay(1000)即--cnt这条指令运行1000次,消耗1000个机器周期,即1ms。在这个程序上运行消耗1ms时间,相当于延时1ms。
首先你要延时多长时间,us级别的必须使用汇编,C误差很大,10-100us级别的可以用C控制,单必须考虑C出栈入栈时间。ms以上的用时间除以机器周期(除以你则个1us是不行的,误差大)。另外,看着你好像用的是keil,keil里边单步调试里边不是有时间吗,你可以看一下算算CPU空跑的次数,很简单。
Q4: 单片机延时时间计算。c语言,晶振频率是12MHZ
单片机常用的编程语言有汇编语言、C语言等。以下是使用汇编语言实现延时1s的程序:以上程序中,使用了一个8位计数器来实现延时功能。由于单片机晶振频率为12MHz,每个指令需要执行12/4=3个机器周期(其中4代表指令周期),因此可以通过调整计数器初值来实现不同的延时时间。
循环的 编译,不同编译器的编译结果不尽 相同;对不同 单片机系列,编译结果也不尽相同。
首先要明白,晶振12MHz时,机器周期1μs。
包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是10592MHz和10000MHz的晶振,而在AVR单片机上常用的有000MHz和000MH的晶振所以在网上查找程序时如果涉及到精确延时则应该注意晶振的频率是多大。
延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1/12M s。那么再来看看单片机执行一次自减所需要的振动次数是96次,假如我们对时间要求不是特别精确的话,可以约等于100来计算。
系统晶振频率是12M,则机器周期=12/12=1us;定时1ms=1*1000=1000us;工作在方式0下:最大计数值是2^13=8192;定时初值=8192-(1*1000)=7192;换算成十六进制数为:定时初值=1C18H。定时器中断是由单片机中的定时器溢出引起的中断,51单片机中有两个定时器t0和t1。
Q5: 单片机中的延时程序的延时时间怎样计算的?
1、如果FOSC=12MHZ单片机,那么一个机器周期为12/12M=1us 如果是汇编语言的话:L1:MOV R7,#100 L2:MOV R6,#100 L3:MOV R5,#50 DJNZ R5,$;此句两个机器周期也就是2T DJNZ R6,L3 DJNZ R7,L2 RET 2T*50*100*100=1,000,000us(共一秒),这是粗略算法,有误差,但不是太大。
2、单片机的延时程序通过执行指令来达到延时效果,这个时间等于执行的指令需要的时间,而一个指令需要的时间叫做指令周期,这个时间等于若干个机器周期。
3、计数器初值可以通过以下公式计算:计数器初值 = 256 - 延时所需指令数 + 2。因此,计数器初 1,333,333 + 2 = 0x0F。以上程序中使用了一个8位计数器,所以最大可以延时255个机器周期(即85ms左右)。如果需要更长的延时时间,可以使用16位计数器或者多次调用延时函数来实现。
4、C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
5、第一步:在延时程序没行后边标注该指令执行的机器周期第二步:在机器周期后边乘以该指令循环的次数第三步:计算总共用的机器周期数第四步:计算总延时时间。
关于单片机c语言延时程序怎么算和单片机延时程序的延时时间的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






