永发信息网

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

答案:5  悬赏:80  手机版
解决时间 2021-03-17 03:25
  • 提问者网友:山高云阔
  • 2021-03-16 15:18
单片机求一用C编写的延时1小时的子程序,要精确到秒级别
最佳答案
  • 五星知识达人网友:独钓一江月
  • 2021-03-16 16:42
你用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;

}

}
全部回答
  • 1楼网友:不想翻身的咸鱼
  • 2021-03-16 19:20
用定时器来定时,就可以了。
  • 2楼网友:愁杀梦里人
  • 2021-03-16 18:37
首先定一个2ms基准时钟,然后设定相应的寄存机计数;
  • 3楼网友:一袍清酒付
  • 2021-03-16 17:08
11.0592的晶振,很熟悉,51系列单片机经常用,建议多看下书,我说下大致的原理,fosc=11.0592m,一条指令的时间是多少?可能有分频,可以设置,具体的单片机不一样,反正你要得到执行一条指令的时间,比如是1us,那么1usx1000=1ms,例如:
for(i=0;i<998,i++)
{
nop;
}
  • 4楼网友:不如潦草
  • 2021-03-16 16:51
计时1小时差小于1秒,也就是误差要求小于1/3600普通的晶振很难有这个精度,使用外部时钟比较有把据。你要的是软件就给你一个吧,能不能达到精度要求就看单片机的时钟部分,跟软件没有关系。





#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小时
}
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯