如何用C语言对单片机进行精确延时

KeilC51中,如何精确的计算时间,比如每条指令的指令周期,循环所用的时间等等,我是初学单片机,希望有高手们指点(说的具体点),谢谢了,有加分

用 定时器/计数器 实现, 给定时器 寄存器设个初值, 选个工作方式,

时间一到 溢出 产生中断, 在中断 子程序中 调用串口 可以输出延时的时间.

至于初值 设为多少, 那就要看你到底定时多少了.

12M晶震 的机器周期 是 1us
自己算酸

分单字节单周期指令, 双字节单周期指令, 单字节双周期指令.

单片机在执行 指令时 首先要取指令和执行指令2步.

单周期指令的执行时间 为一个机器周期.
比如:
如果想要知道 for(;;)这个循怀 到底用了多长时间来执行. 那么你可以 查编译器 这条语句所对应的 操作码和操作数. 然后再区分其到底是什么类型的指令.最后把时间加加 就可以了 .
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-09-04
首先你要先知道每个指令的周期,然后基本就是加法运算了,如果遇到循环就乘。
第2个回答  2008-09-04
用定时器!
设定定时器的初值 设变量C为0 开启定时器中断
定时器中断程序里 置变量C为1

在需要延时的时候 启动定时器
然后用WHILE(!c);等待定时器触发中断后跳出WHILE。

这就可以实现精确延时了 如果需要延时很长 可以在定时器中断程序里 循环调用演示程序

比如延时1分钟 每次定时器触发的时间是1秒 那么 在定时器中断程序里计数 每触发1次 NUM++
如果NUM++ = 60 C=1
第3个回答  2008-09-04
主要依靠晶振

单片机延时c语言程序怎么写?
在C语言中,也可以嵌入汇编代码来实现更精确的延时。单片机通常会提供多个定时器选项,可以在定时器中断服务程序中实现延时。例如,使用定时器工作方式2,可以实现自动重新装载计数器,实现更精确的延时,甚至达到纳秒级的精度。尽管C语言可能不是实现精确延时的最佳选择,但通过使用定时器结合C语言编程,仍然...

如何用c语言实现单片机延时?
几个精确延时程序:在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响。500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)void delay500ms(void){ unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(...

如何用C语言对单片机进行精确延时
首先要取指令和执行指令2步.单周期指令的执行时间 为一个机器周期.比如:如果想要知道 for(;;)这个循怀 到底用了多长时间来执行.那么你可以 查编译器 这条 语句 所对应的 操作码和操作数.然后再区分其到底是什么类型的指令.最后把时间加加 就可以了 .

怎么用C语言做单片机的精确延时
Keil C51的编程语言常用的有2种: 一种是汇编语言;另一种是C 语言。用汇编语言写单片机程序时,精确时间延时是相对容易解决的。比如,用的是晶振频率为12 MHz的AT89C51,打算延时20 μs,51单片机的指令周期是晶振频率的1\/12,即一个机器周期为1 μs;“MOV R0,#X”需要2个机器周期,DJNZ也需要...

哪位高手知道 单片机精确延时1秒得C语言子程序 谢谢了
下面几个是单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0000MHz的晶振,而在AVR单片机上常用的有8.000MHz和4.000MH的晶振所以在网上查找程序时如果涉及到精确延时则应该注意晶振的...

单片机延时1秒如何计算要最详细一点的要过程用C语言
\/\/do something,如果一秒延时标志为1,则清除此标志,等待下次1秒,在此处 \/\/执行需要执行的程序 } } } \/* 定时器50ms产生一次中断 *\/ void Timer(void) interrupt 3 { \/* 重新载入T1参数 *\/ TH1=0x3C;TL1=0xAF;\/* 一秒累加 *\/ rSecondCount++;\/\/秒计时+1 if (rSecondCount==20) \/\/1...

怎么样用C语言实现精确延时
要自己构造,步骤1,检查单片机的说明书,知道执行一条指令要多少时钟周期,2, 12M的时钟频率就是一个始终周期83.3ns,3,你要1毫秒,就是要延迟12000个时钟周期,做一个For循环,在里面做4000次加法运算就可以了(假设你的单片机一个指令用一个时钟)...

求C语言单片机延时10分钟子程序
c void main{ TMOD=0x01;\/\/设置定时器0为工作方式1 TH0=(65536-50000)\/256;TL0=(65536-50000)%256;EA=1;\/\/开总中断 ET0=1;\/\/开定时器0中断 TR0=1;\/\/启动定时器0 c=0;while(1){ if(c==12000){c=0;} \/\/10分钟 很精确 } } void time0()interrupt 1 { c++;TH0=(65536-...

单片机c语言编程怎么去延时?
在单片机的C语言编程中,可以使用循环结构来实现延时操作。具体而言,可以使用一个for循环来实现一段时间的延时。以下是一个简单的延时函数的示例代码:void delay_ms(unsigned int ms){ unsigned int i,j;for(i=0;i<ms;i++)for(j=0;j<1000;j++);} 上述代码定义了一个名为delay_ms的函数,...

单片机C语言延时的方法。最好能够详细说明原理
如果用C51来编写延时程序,一般都用循环语句:例:void delay(unsigned int num){ unsigned int i;for (i=0; i<num; i++){ ; \/\/ 程序什么都不做 } } 原理很简单,程序什么都不做,只是不段的比较,直到比较完,这样就起到延时的作用了。至于它延时了多少时间,则需要编译后,看实际的...

相似回答
大家正在搜