基于51单片机的C语言延时函数程序编写

晶振为12MHz,需要写一个5分钟的C语言延时函数程序
希望有高手能指点一二
谢谢
是不是必须用到多重嵌套循环语句?
我好想有看到,网上说的:循环语句内的赋值不得大于255,不知道是什么原因?

第1个回答  2012-05-06
12M晶振延时5s的程序如下:
void delayus2x(char n)//延时nx2 us
{
while(--n);
}
void delayms(unsigned int t)//延时 t x 1ms
{
while(t--)
{
delayus2x(245);
delayux2x(245);
}
}
delayms(50000);//调用此句延时5s
至于不能大于255,因为你的数据类型为char型,及8字节,最大值为255,2的8次方减一。追问

谢谢!

第2个回答  2012-05-06
for循环的嵌套
如for(i=0,i<a;i++)
for(j=1;j<b;j++)
也就是让第一个循环一次,下面一个循环b-1次
至于a和b的值是根据你的需要来定的
同样的你也可以利用定时器来确定延时的时间
第3个回答  2012-05-06
记得有这样子的一个小软件的可以计算的,好久没触碰C了,可以百度下,单片机延时软件下载追问

汗,那个软件要缴费注册

追答

没有的吧,我以前都要有下载的,我找找看,我电脑里好像也有的

追问

谢谢哈,在网上找到一个完美的破解

追答

不用客气

第4个回答  2012-05-06
Delay2(300 000);

/*************************/
Delay1(unsigned int x)
{
while(x--);
}
Delay2(unsigned long int y)
{
while(y--)
{
Delay1(245);
Delay1(245);
}
}
/*********************/追问

延时函数里面一般好像都是无符号的整型或者字符型,也可以是长整型或者长的字符型么?之前学习C语言的时候,没涉及到相关的,有点搞不清楚

追答

没规定不行吧,因为300 000超过了65536,所以只能定义位长整形了。

第5个回答  2012-05-06
用中断更好写追问

定时器+计数器?

追答

恩 ,是的。

追问

哦,谢谢
能请问一下:
void delay(unsigned long int i)
{
while(--i);
}
这个如何计算延时时间哦?在网上找的延时时间计算,基本上都是for循环的,while的没见到过

追答

如果是用来作为硬件的延时,可以利用仿真来计算他的具体时间,精度很高,微秒级。如果只是想知道这条语句执行多长时间,可能与编译环境和运算速率有关。

追问

哦,谢谢哈

本回答被提问者采纳