用单片机做一个时钟,定时中断的代码该怎么写?如何解决时间太快的问题?已解答。
小石—哈尔滨:求大神指教,想弄个定时器,为什么时间跑的飞快? 以下是定时中断的代码:
void time1() interrupt 3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
num1++;
if(num1==2)
{
num1=0;
shi=t1/10;
ge=t1%10;
t1++;
if(t1==100)
{
t1=0;
qian=t2/10;
bai=t2%10;
t2++;
if(t2==60)
{
t2=0;
}
}
}
鸿哥-深圳:
我帮你修改如下:
#define const_1s1000//你自己慢慢调整这个数字,直到它大概产生1秒钟左右为止
unsigned int uiTimeCnt=0; //多增加这个变量,目的就是让它产生一个时间基准
void time1() interrupt 3
{
TH1=(65536-5000)/256; //不要这样写公式,涉及运算可能会耗时间,应该直接写它的结果TH1=0xec;
TL1=(65536-5000)%256; //不要这样写公式,涉及运算可能会耗时间,应该直接写它的结果TL1=0x78;
uiTimeCnt++; //多增加这个变量,目的就是让它产生一个时间基准
if(uiTimeCnt>const_1s)//const_1s是一个宏定义常量,你自己慢慢调整这个数字,直到它大概产生1秒钟左右为止
{
uiTimeCnt=0; //及时清零,为下一个时基做准备
num1++;
if(num1==2)
{
num1=0;
shi=t1/10;
ge=t1%10;
t1++;
if(t1==100)
{
t1=0;
qian=t2/10;
bai=t2%10;
t2++;
if(t2==60)
{
t2=0;
}
}
}
}
}
页:
[1]