单片机C语言延时程序计算

void delay(uchar i)
{
uchar k,j;
for(;i>0;i--)
for(k=255;k>0;k--)
{
for(j=255;j>0;j--)
;
;
}
}

试问:当i取10时,这个函数延时多长时间呢?希望给出详细讲解过程。(晶振为12MHz)

这个是看你用什么单片机了,不同单片机速度不一样的,而且想用理论计算的话,就必须反汇编一下(我只知道这样),因为只有每条的汇编语句才知道要多少时钟周期,才好计算。如果想要结果呢就简单了,用KEILC里面的仿真,选好片子和晶振,前后打上断点运行,旁边有时间记录的
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-25
keil 可以看仿真时间的,

计算的话我只知道51单片机的

假设晶振频率为x

那么用_nop_()精确延时

执行一条_nop_()需要的时间为t=12/x;
第2个回答  2010-07-17
编译完成后,点击keil菜单栏里的红色B标志,进入仿真。在主函数里,写
void main()
{
delay(10);
}
在delay(10);上设置断点,测设就可以了
第3个回答  2010-07-17
#include<stdio.h>
void main()
{ int i;
scanf("%d",i);
sleep(i);
}

这样可以延长时间i为几 暂停几秒
第4个回答  2010-07-17
用仿真来计算

单片机延时c语言程序怎么写?
void delay(){ uint i;for(i=0;i<20000;i++);} 这里,`20000`是一个预定义的值,用于控制延时的长度。要计算这个函数的具体延时时间,可以将其转换为十六进制形式,即 `4E20`。接着将高字节 `4E` 乘以 `6` 得到 `468D`,再将 `468D` 加上 `2` 得到 `470D`,然后 `470D` 乘以 ...

如何用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(k=81;k>0;k--);}

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

单片机c语言延时程序
C:0x6809 9400 SUBB A,#0x00 C:0x680B EE MOV A,R6 C:0x680C 9400 SUBB A,#0x00 C:0x680E 400E JC C:681E 282: for(i=0;i<200;i++)_nop_();C:0x6810 E4 CLR A C:0x6811 FD MOV R5,A C:0x6812 00 ...

51单片机求10微秒的延时函数 C语言(晶振11.0592MHz)
MOV TH0,#3CH DJNZ R7,HERE CLR TR0 ;定时器要软件清零 SETB EX0 RET 3、C语言延时程序:10ms延时子程序(12MHZ)void delay10ms(void){ unsigned char i,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--)for(k=248;k>0;k--);} 1s延时子程序(12MHZ)void delay1s(void)...

单片机C语言中,怎么通过循环次数计算延迟函数的延迟时间?
你可以用keil里在线反汇编命令看看你的循环编译成机器语言后到底是几个指令周期 这样就知道了延迟时间 当然你取近似值也可以的 比如 for(i=0,i<255,i++){x=2} 这里x=2是一个指令周期 而执行了255次 假如你的晶振是12MHZ的 则你执行一个指令周期是1us 255次是0.255ms ...

求一个10ms的单片机C语言延时程序《p1按键按下p1-1灯亮延时10秒p1-1灭...
10ms 用晶振频率换算一下10ms的延时 用定时器 65536减一下 就可以设计10秒的 循环次数 然后将p1键连一个单片机I\/0口 设置 此口有按下信号 便做让 p1-1端口 所连另一个I\/0口亮灯10s的流程 便可以 实现

51单片机用c语言怎么写延时函数?
现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1\/12M *100(s),即1\/120000 s,逆向计算一下,每1ms需要自减多少次?120次对吧。所以一个简单的延时功能就诞生了,我们只需要自减120次,就可以延时1ms,如果我们要延时50ms呢,那就自减50*120=6000次。那么在程序上如何表达...

求C语言单片机延时10分钟子程序
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-50000...

单片机C语言延迟程序
下面的延时的基本程序(中断加计数器)void T0_int(void)interrupt 1 { TH0 = 0x4C;\/\/重新装载,50MS定时器初值 TL0 = 0x00;T0_count++;if(T0_count==20)\/\/1S到 { T0_count = 0;\/\/在这写程序 } } main(){ TMOD = 0x01;\/\/定时器0,工作方式1,16位计数 TH0 = 0x4C;\/\/50MS...

相似回答