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