在嵌入式系統(tǒng)中,實時時鐘單元可以提供可靠的時鐘,包括時、分、秒、年、月、日??梢蕴峁┖撩爰壍臅r鐘中斷。
與實時時鐘相關的寄存器:
實時時鐘控制寄存器(RTCCON):
實時時鐘控制設置。
告警控制寄存器:
年、月、日、時、分、秒告警使能標志,當告警時間寄存器時間到達時引發(fā)實時時鐘報警中斷。
實時時鐘計數器:
用與存儲時鐘計數值,每過一個時鐘減一,到零時引發(fā)實時時鐘時間滴答中斷。
告警時間寄存器:
存儲告警時間的年、月、日、時、分、秒值
實時時鐘寄存器:
保存實際時間。
實時時鐘編程步驟:
1、初始化時鐘
2、向實時時鐘寄存器寫入當前的時間,即效表
3、讀取時間顯示
下面為試驗代碼
struct time
{
unsigned char year;
unsigned char mon;
unsigned char day;
unsigned char weekday;
unsigned char hour;
unsigned char min;
unsigned char sec;
};
void inittime()
{
rRTCCON=0x0;
}
void settime(struct time *t)
{
rRTCCON|=0x01;
rBCDYEAR=t->year;
rBCDMON=t->mon;
rBCDDAY=t->weekday;
rBCDDATE=t->day;
rBCDHOUR=t->hour;
rBCDMIN=t->min;
rBCDSEC=t->sec;
rRTCCON&=0xFE;
}
void gettime(struct time *t)
{
rRTCCON|=0x01;
while(1)
{
t->year=rBCDYEAR;
t->mon=rBCDMON;
t->weekday=rBCDDAY;
t->day=rBCDDATE;
t->hour=rBCDHOUR;
t->min=rBCDMIN;
t->sec=rBCDSEC;
if(t->sec !=0)
break;
}
rRTCCON&=0xFE;
}
void enabletimeint(char value)
{
rRTCCON|=0x01;
value|=0x80;
rTICNT=value;
rRTCCON&=0xFE;
}
void disenabletimeint(void)
{
rRTCCON|=0x01;
rTICNT&=0x7f;
rRTCCON&=0xFE;
}
void setrtcalm(char value)
{
rRTCCON|=0x01;
rRTCALM=value;
rRTCCON&=0xFE;
}
void setalmtime(struct time *t)
{
rRTCCON|=0x01;
rALMYEAR=t->year;
rALMMON=t->mon;
rALMDATE=t->day;
rALMHOUR=t->hour;
rALMMIN=t->min;
rALMSEC=t->sec;
rRTCCON&=0xFE;
}
void printtime(struct time *t)
{
char h,l;
l=t->year&0x0F;
h=t->year&0xF0;
h=h>>4;
uart0_sendchar('2');
uart0_sendchar('0');
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar('.');
l=t->mon&0x0F;
h=t->mon&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar('.');
l=t->day&0x0F;
h=t->day&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar(' ');
uart0_sendchar(' ');
l=t->hour&0x0F;
h=t->hour&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar(':');
l=t->min&0x0F;
h=t->min&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar(':');
l=t->sec&0x0F;
h=t->sec&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar('r');
uart0_sendchar('n');
}