单片机求一用C编写的延时1小时的子程序,要精确到秒级别

晶振12MHZ的和24MHZ的两种

计时1小时差小于1秒,也就是误差要求小于1/3600普通的晶振很难有这个精度,使用外部时钟比较有把据。你要的是软件就给你一个吧,能不能达到精度要求就看单片机的时钟部分,跟软件没有关系。

/*****************************************/
/*广州一丁自动化设备有限公司020-28969088 */
/*****************************************/

#include <reg52.h>

sbit led=P1^0;// led灯

unsigned int num=0;

unsigned int num1=0;

void time0() interrupt 1
{

TH0=(65536-50000)/256; //12M/6=2M,50000/2M=0.025秒(6M把50000改为25000)
TL0=(65536-50000)%256;
num++;//0.025秒加1

}

void main()
{

TMOD=0x01;//定时器0工作于方式1
TH0=(65536-50000)/256;//赋初值
TL0=(65536-50000)%256;

EA=1;//开总中断
ET0=1;//开定时器0
TR0=1;//运行定时器0

while(1)
{

if(num==40)//40个0.025秒等于1秒
{
num=0;
num1++;
if(num1==3600)//24M改7200
{
num1=0;
led=~led;//P1.0LED灯亮1小时灭1小时
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-22
你用C语言来编制有精度要求的延时子程序,这太不现实了。不过可以用定时器来做。
void delay1s()
{
int i;
TMOD=0x01;
TH0=(65536-50000)/256;

TL0=(65536-50000)*256;

TR0=1;

for(i=0;i<20;i++)
{
TH0=(65536-50000)/256;

TL0=(65536-50000)*256;

while(TF0==0);

TF0=0;

}

}本回答被网友采纳
第2个回答  2011-09-12
首先定一个2ms基准时钟,然后设定相应的寄存机计数;
第3个回答  2011-09-13
11.0592的晶振,很熟悉,51系列单片机经常用,建议多看下书,我说下大致的原理,fosc=11.0592m,一条指令的时间是多少?可能有分频,可以设置,具体的单片机不一样,反正你要得到执行一条指令的时间,比如是1us,那么1usx1000=1ms,例如:
for(i=0;i<998,i++)
{
nop;
}
第4个回答  2011-09-12
用定时器来定时,就可以了。