[an error occurred while processing this directive] [an error occurred while processing this directive]
В теле ответа для MCS-51 и КEILа...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Вопросик 0 04 июня 2002 г. 08:10
В ответ на: часы реального времени ds1302 и AT90s8515 отправлено eXeC001er 03 июня 2002 г. 19:52

//Файл 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