📄 timer.c
字号:
#include "type.h"
#include "reg52.h"
#include "common.h"
#include "timer.h"
static S_BYTE data TimerCount;
volatile S_DATETIME idata dt;
volatile S_WORD data TickCounter;
S_CHAR code DaysOfMon[2][12] =
{
31,28,31,30,31,30,31,31,30,31,30,31, 31,29,31,30,31,30,31,31,30,31,30,31
};
S_VOID InitDateTime(S_VOID)
{
dt.second = 0;
dt.minute = 0;
dt.hour = 0;
dt.day = 1;
dt.mon = 1;
dt.year = 0;
}
S_VOID InitTimer0(S_VOID)
{
TimerCount = 0;
TMOD = (TMOD&0xF0)|0x01; //timer 0, mode 1
TH0 = (65536-50000)/256;//set value: 50ms every time
TL0 = (65536-50000)%256;
TR0 = 1;//start
ET0 =1;
EA =1;
}
void Timer0ISR() interrupt 1
{
bit leap = 0;
TH0 = (65536-50000)/256;//set value: 50ms every time
TL0 = (65536-50000)%256;
TickCounter++;
if (++TimerCount < 20)
return;
TimerCount = 0;
if (dt.second < 59)
{
dt.second++;
return;
}
dt.second = 0;
if (dt.minute < 59)
{
dt.minute++;
return;
}
dt.minute = 0;
if (dt.hour < 23)
{
dt.hour++;
return;
}
dt.hour = 0;
if ((dt.year+BASEYEAR) % 4 == 0)
{
if (((dt.year+BASEYEAR) % 100 != 0) || ((dt.year+BASEYEAR) % 400 == 0))
leap = 1;
}
if (dt.day < DaysOfMon[leap][dt.mon-1])
{
dt.day++;
return;
}
dt.day = 1;
if (dt.mon < 12)
{
dt.mon++;
return;
}
dt.mon = 1;
dt.year++;
}
#if (DATETIME_SETUP_BY_MACRO==0)
S_BYTE GetSecond(S_VOID)
{
return dt.second;
}
S_BYTE GetMinute(S_VOID)
{
return dt.minute;
}
S_BYTE GetHour(S_VOID)
{
return dt.hour;
}
S_BYTE GetDay(S_VOID)
{
return dt.day;
}
S_BYTE GetMon(S_VOID)
{
return dt.mon;
}
S_BYTE GetYear(S_VOID)
{
return dt.year;
}
S_VOID SetSecond(S_BYTE second)
{
dt.second = second;
}
S_VOID SetMinute(S_BYTE minute)
{
dt.minute = minute;
}
S_VOID SetHour(S_BYTE hour)
{
dt.hour = hour;
}
S_VOID SetDay(S_BYTE day)
{
dt.day = day;
}
S_VOID SetMon(S_BYTE mon)
{
dt.mon = mon;
}
S_VOID SetYear(S_BYTE year)
{
dt.year = year;
}
#endif
S_WORD GetTimeTick(S_VOID)
{
S_WORD TimeTick;
while (TimeTick != TickCounter)
TimeTick = TickCounter;
return TimeTick;
}
#pragma disable
S_VOID SetTimeTick(S_WORD TimeTick)
{
TickCounter = TimeTick;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -