我是新手,遇到一些关于定时器的问题,希望高手帮忙
时间:10-02
整理:3721RD
点击:
我打算用1602写一个电子钟+秒表的程序,但不知道出了什么问题,时间走得很快,秒表启动不了,下面是部分关于定时器的程序,希望高手帮一下忙
char data hour,minute,second,sec;//时、分、秒、百分之一秒
uchar data shour,sminute,ssecond,ssec;//秒表时、分、秒、百分之一秒
void pro_timedate()//时间和日期处理程序
{
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
day++;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
if (day>31)
{day=1;month++;} //大月31天
if (month==4||month==6||month==9||month==11)
if (day>30)
{day=1;month++;} //小月30天
if (month==2)
{
if((year%4==0&&year%100!=0)||year%400==0) //闰年的条件
{
if (day>29)
{day=1;month++;}//闰年2月为29天
}
else
{
if (day>28)
{day=1;month++;}//平年2月为28天
}
}
if (month>12)
{month=1;year++;}
if (year>99)
year=0;
}
}
}
}
void init_timer()
{
TMOD=0x11;
IE=0x8f;
TH0=0x0dc;
TL0=0x00;
TH1=0x0dc;
TL1=0x00;
TR0=1;
TR1=0;
}
void timer0() interrupt 1 //Time0中断处理程序,秒的产生
{
TH0=0xdc; //Timer0置10ms 定时初值dc00H(2^16=65536D,dc00H=56320D)
TL0=0x00; //定时时间=(65536-56320)*(1/11.0592)*12=10ms (f0=11.0592Mhz)
sec++;
if(sec==100) //1秒时间(100*10ms=1000ms=1s)
{
sec=0;
pro_timedate(); //调用时间和日期处理程序
}
update_disbuf();
pro_display1();
}
void timer1() interrupt 3//Timer1中断处理程序,秒表
{
TH1=0xdc;
TL1=0x00;
ssec++;
if(ssec==100)
{
ssec=0;
ssecond++;
if(ssecond==60)
{
ssecond=0;
sminute++;
if(sminute==60)
{
sminute=0;
shour++;
}
}
}
update_disbuf();
pro_display3();
}
char data hour,minute,second,sec;//时、分、秒、百分之一秒
uchar data shour,sminute,ssecond,ssec;//秒表时、分、秒、百分之一秒
void pro_timedate()//时间和日期处理程序
{
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
day++;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
if (day>31)
{day=1;month++;} //大月31天
if (month==4||month==6||month==9||month==11)
if (day>30)
{day=1;month++;} //小月30天
if (month==2)
{
if((year%4==0&&year%100!=0)||year%400==0) //闰年的条件
{
if (day>29)
{day=1;month++;}//闰年2月为29天
}
else
{
if (day>28)
{day=1;month++;}//平年2月为28天
}
}
if (month>12)
{month=1;year++;}
if (year>99)
year=0;
}
}
}
}
void init_timer()
{
TMOD=0x11;
IE=0x8f;
TH0=0x0dc;
TL0=0x00;
TH1=0x0dc;
TL1=0x00;
TR0=1;
TR1=0;
}
void timer0() interrupt 1 //Time0中断处理程序,秒的产生
{
TH0=0xdc; //Timer0置10ms 定时初值dc00H(2^16=65536D,dc00H=56320D)
TL0=0x00; //定时时间=(65536-56320)*(1/11.0592)*12=10ms (f0=11.0592Mhz)
sec++;
if(sec==100) //1秒时间(100*10ms=1000ms=1s)
{
sec=0;
pro_timedate(); //调用时间和日期处理程序
}
update_disbuf();
pro_display1();
}
void timer1() interrupt 3//Timer1中断处理程序,秒表
{
TH1=0xdc;
TL1=0x00;
ssec++;
if(ssec==100)
{
ssec=0;
ssecond++;
if(ssecond==60)
{
ssecond=0;
sminute++;
if(sminute==60)
{
sminute=0;
shour++;
}
}
}
update_disbuf();
pro_display3();
}
i don't know
TR1=1吧
秒表不起作用是因为你定时器1没开