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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机求一用C编写的延时1小时的子程序,要精确到秒级别相关的知识,希望对你有一定的参考价值。

参考技术A 计时1小时差小于1秒,也就是误差要求小于1/3600普通的晶振很难有这个精度,使用外部时钟比较有把据。你要的是软件就给你一个吧,能不能达到精度要求就看单片机的时钟部分,跟软件没有关系。
/*****************************************/
/*广州一丁自动化设备有限公司020-28969088
*/
/*****************************************/
#include
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小时


参考技术B 你用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;

c++计算时间差(精确到秒)

如输入开始时间01:30:45
输出时间02:15:50
会输出:2705秒

参考技术A 包含头文件#include <time.h>
然后调用clock()函数,返回程序启动到调用代码处的时间,默认是毫秒,比如
int st = clock();
其他代码
int ct = clock() - st;
ct就是这期间的耗时,如果想精确到秒,就除以1000即可
参考技术B 开始时间:输入的小时转化为秒+输入的分钟转化为秒+输入的秒
输出时间:开始时间的小时转化为秒+开始时间的分钟转化为秒+开始时间的输入的秒
输出结果:输出时间-开始时间
int CountSecond(int H,int M,int S)

return (H*3600+M*60+S);

int main(void)

int KSTimer=0;
int SCTimer=0;
KSTimer=CountSecond(1,30,45);
SCTimer=CountSecond(2,15,50);
cont>>(SCTimer-KSTimer);
本回答被提问者采纳
参考技术C 调用系统时间进行计算。追问

怎么调用?

追答

GetLocalTime

以上是关于单片机求一用C编写的延时1小时的子程序,要精确到秒级别的主要内容,如果未能解决你的问题,请参考以下文章

89c51单片机延时问题,怎么求出延时是100ms,求详细回答。

C语言怎么写延时函数,精确到毫秒

求一个51单片机延时1秒的程序,用汇编!!

关于keil延时函数的问题,和硬件不一致

请问51单片机定时器延时的调用是怎么调用的我有点不明白,谢谢

c++计算时间差(精确到秒)