Oprava RTC
Moderátor: Moderátoři
Oprava RTC
Kód: Vybrat vše
void
reset_clk (void) {
RTC_CLOCK = 0;
RTC_SEL = 0;
RTC_SEL = 1;
}
void
reset_rtc (void) {
unsigned char jj;
;
RTC_SEL = 0;
RTC_CLOCK = 0;
RTC_DATA = 1;
delay(100);
zapis_rtc(CTRL_WR,RTC_UNLOCK);
jj = citaj_rtc(SEK_RD);
if ((jj & 0x80)!=0)
zapis_rtc(SEK_WR, 0);
}
void
zapis_rtc (unsigned char POVEL_WR, unsigned char HODNOTA) {
reset_clk();
zapis_bajt(POVEL_WR);
zapis_bajt(HODNOTA);
reset_clk();
}
void
zapis_bajt (unsigned char HODNOTA) {
unsigned char jj;
for (jj=8; jj>0; jj--) {
RTC_DATA = 0;
if (HODNOTA & 0x01)
RTC_DATA = 1;
RTC_CLOCK = 0;
RTC_CLOCK = 1; // hrana dela zapis
HODNOTA >>= 1;
}
}
unsigned char
citaj_bajt (void) {
unsigned char HODNOTA, POMOC, jj;
;
HODNOTA = 0x00;
RTC_DATA = 1;
for (jj=0; jj<8; jj++) {
RTC_CLOCK = 1;
RTC_CLOCK = 0;
POMOC = 0;
POMOC |= RTC_DATA;
POMOC <<= 7;
HODNOTA >>= 1;
HODNOTA |= POMOC;
}
return HODNOTA;
}
unsigned char
citaj_rtc (unsigned char POVEL_RD) {
unsigned char POMOC = 0;
reset_clk();
zapis_bajt (POVEL_RD);
POMOC = citaj_bajt();
reset_clk();
return POMOC;
}
void
set_clock (void) {
;
reset_rtc ();
zapis_rtc(SEK_WR,0x80);
zapis_rtc(MIN_WR,DATUM_CAS [1]);
zapis_rtc(HOD_WR,DATUM_CAS [2]);
zapis_rtc(DEN_WR,DATUM_CAS [3]);
zapis_rtc(MES_WR,DATUM_CAS [4]);
zapis_rtc(DOW_WR,DATUM_CAS [5]);
zapis_rtc(ROK_WR,DATUM_CAS [6]);
zapis_rtc(SEK_WR,DATUM_CAS [0]);
}
Jestli ti to pomůže netuším.