51单片机中怎么得到精确延时?
1、单片机精确延时有两个办法:采用定时器来延时。用汇编语言来编制延时程序。
2、单片机的延时程序通过执行指令来达到延时效果,这个时间等于执行的指令需要的时间,而一个指令需要的时间叫做指令周期,这个时间等于若干个机器周期。
3、只有汇编语言才能得到精确的时间。C编译成汇编时,不同的编译器,不同的编译策略都会使最终的程序不一样。***如果短时间的延时,可以利用_nop_()来控制,如果是长时间的可以用定时器中断来控制。
4、延时函数很常见:Delay1mS(unsigned***int***tt)******//延时1ms***{***unsigned***char***i;while(tt--)***for(i***=***113;***i***0;***i--);}***反复多次调用即可。但是,用软件延时,观察起来,就像死机一样,经常会误事的。
5、u16***i,这是定义一个16位整型的形参变量***i***,其实,u16***并不是C51的变量类型,而是在程序的前面用#define***u16***unsigned***int***宏定义的。
请帮忙在51系列单片机系统中,编写一个延时1ms的子程序。谢谢。。_百...
1、最后,将延时语句全部添加进去,代码按照图中所示的直接敲入即可。最后,点击编译,生成HEX文件就可以了,这样51单片机延时语句就完成了。
2、下面为你写出1ms的程序:用的是10592M的,你如果真的需要是12M的,那自己直接修改成12M就可以了。
3、要看你的时钟周期,如果是12Mhz的话,每个时钟周期MC=6*2/12***M***=1us,所以延迟是让机器计数1000000下,上面那个公式你自己套用24Mhz的就是2000000下。c语言的循环次数你自己算,每条指令一个周期,所以楼上的程序在12Mhz下是1s延迟。
4、void***delay(uint***n){***uint***i,j;for(i=n;i0;i--){***for(j=110;j0;j--);}***}***当n=1是延时大约是1ms,就是说n等于都少就延时多少ms,当然n的值不超过uint的最大值。
51单片机C语言程序中延时函数delay的原理是什么?
1、在C语言中,可以使用delay函数来实现程序的延时功能。delay函数可以使程序暂停执行一段时间,定义一个delay函数,函数的参数为延时的时间,单位为毫秒。
2、单片机中的delay()的单位时间不是系统提供的,而是用户自己编制的。如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。
3、你这种延时是一种不精确的延时,也就是单片机当执行到你这个delay(void)延时函数的时候它需要运算完,然后才能执行下面的函数,这样就能延时一段时间了,而延时的长短取决于单片机的运算速度,也就是与晶振有关。
4、delay函数是一般自己定义的一个延时函数。c语言定义延时函数主要通过无意义指令的执行来达到延时的目的。下面给出一个经典的延时函数。
本文转载自互联网,如有侵权,联系删除