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

晶振12MHZ的和24MHZ的两种... 晶振12MHZ的和24MHZ的两种 展开
 我来答
钟承曦
2011-09-13 · TA获得超过2384个赞
知道小有建树答主
回答量:1021
采纳率:0%
帮助的人:702万
展开全部
计时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小时
}
}
}
zhxiufan
推荐于2017-10-22 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38388
国家科技进步奖

向TA提问 私信TA
展开全部
你用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;

}

}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jari_qian
2011-09-12 · TA获得超过188个赞
知道小有建树答主
回答量:267
采纳率:100%
帮助的人:165万
展开全部
首先定一个2ms基准时钟,然后设定相应的寄存机计数;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
司马谷槐
2011-09-13 · TA获得超过346个赞
知道答主
回答量:473
采纳率:100%
帮助的人:93.4万
展开全部
11.0592的晶振,很熟悉,51系列单片机经常用,建议多看下书,我说下大致的原理,fosc=11.0592m,一条指令的时间是多少?可能有分频,可以设置,具体的单片机不一样,反正你要得到执行一条指令的时间,比如是1us,那么1usx1000=1ms,例如:
for(i=0;i<998,i++)
{
nop;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lalahu007
2011-09-12 · TA获得超过266个赞
知道小有建树答主
回答量:297
采纳率:100%
帮助的人:135万
展开全部
用定时器来定时,就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式