[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
//Файл rtcwrite.a51
?PR?_RTCWrite?clock SEGMENT CODE
EXTRN CODE (?C_STARTUP)
PUBLIC _RTCWrite
RSEG ?PR?_RTCWrite?clock
USING 0
rtcsclk bit p3.5
rtcio bit p3.4
rtcrst bit p3.7
_RTCWrite:
setb rtcrst
mov a, r7
mov b, #8
yetb0: rrc a
mov rtcio, c
setb rtcsclk
clr rtcsclk
djnz b,yetb0
clr rtcio
mov a, r5
mov b, #8
yetb1: rrc a
mov rtcio, c
setb rtcsclk
clr rtcsclk
djnz b, yetb1
clr rtcrst
ret
end
// Файл rtcread.a51
?PR?_RTCRead?clock SEGMENT CODE
EXTRN CODE (?C_STARTUP)
PUBLIC _RTCRead
RSEG ?PR?_RTCRead?clock
USING 0
rtcsclk bit p3.5
rtcio bit p3.4
rtcrst bit p3.7
_RTCRead:
setb rtcrst
mov a, r7
mov b, #8
yetb0: rrc a
mov rtcio, c
setb rtcsclk
clr rtcsclk
djnz b, yetb0
mov b, #8
yetb1: mov c, rtcio
rrc a
setb rtcsclk
clr rtcsclk
djnz b, yetb1
clr rtcrst
mov r7, a
setb rtcio
ret
end
//Инициализация часов... в, например, функйии main...
// Была выдана команда на сброс часов
if(clearTime)
{
// В регистр управления - 0
RTCWrite(0x8e, 0x00);
// Включть схему заряда через один диод и резистор 2.2 kОм
RTCWrite(0x90, 0xa5);
// Обнулить секунды
RTCWrite(0x80, 0x00);
clearTime = false;
}
// Работа с часами
rtcSeconds = RTCRead(0x81);
rtcMinutes = RTCRead(0x83);
rtcHours = RTCRead(0x85);
// Вычислить секунды
seconds = rtcSeconds & 0x0f;
seconds += (rtcSeconds >> 4) * 10;
// Вычислить минуты
minutes = rtcMinutes & 0x0f;
minutes += (rtcMinutes >> 4) * 10;
// Вычислить часы
hours = rtcHours >> 4 & 0x03;
hours *= 10;
hours += rtcHours & 0x0f;
// Объявления функций
unsigned char RTCRead(unsigned char address);
void RTCWrite(unsigned char address, unsigned char byte);
// При вызове функции типа RTCWrite первый параметр передается в регистре R7, второй параметр в R5...
// При вызове функции типа RTCRead первый параметр передается в регистре R7, возвращаемое значение в аккумуляторе...
E-mail: info@telesys.ru