ploop писал(а):Ждём
Ёрш-твою-мышь, пушистый.. ты ещё скажи, что мя те всю работу застопорил..
Мастер Ломастер писал(а):жду с нетерпением
Мя конечно написал на скорую лапу и не причёсывал, но думаю, что сам принцип будет и так понятен:
Код: Выделить всё
$MOD51
$NOLIST
$LIST
$TITLE(RTC)
$PAGEWIDTH(132)
$NOPAGING
;
seconds data 30h ; регистр хранения текущего значения секунд
minuts data 31h ; регистр хранения текущего значения минут.
hours data 32h ; регистр хранения текущего значения часов.
;
;----------------------------------------------------------------------
; Подпрограмма обработки RTC по методу "Объёмного перехода".
;----------------------------------------------------------------------
org 0h
;
;
;-----------------------------------------------------------------------
;
RTC: clr c ; сбрасываем битовый аккумулятор.
;
mov a,seconds ; читаем текущее значение секунд.
inc a ; прибавляем к нему единицу.
mov b,a ; сохраним пока промежуточный результат секунд.
xrl a,#60 ; сравниваем его с максимальным+1.
addc a,#0FFh ; если равен - получаем признак, в виде CY=1.
mov f0,c ; сохраним пока признак необходимости инкремента минут.
clr a ; вычисление маски для байта секунд.
cpl c ;
addc a,#0FFh ;
anl a,b ; вычисляем новое значение секунд.
mov seconds,a ; сохраняем новое значение секунд.
;
mov c,f0 ; получаем бит-флаг команды инкремента минут.
cpl c
clr a ; преобразуем бит-флаг в байтовый формат.
rlc a ;
addc a,minuts ; получаем новое значение минут.
mov b,a ; сохраним пока промежуточный результат минут.
xrl a,#60 ; сравниваем его с максимальным+1.
addc a,#0FFh ; если равен - получаем признак, в виде CY=1.
mov f0,c ; сохраним пока признак необходимости инкремента часов.
clr a ; вычисление маски для байта минут.
cpl c ;
addc a,#0FFh ;
anl a,b ; вычисляем новое значение минут.
mov minuts,a ; сохраняем новое значение минут.
;
mov c,f0 ; получаем бит-флаг команды инкремента часов.
cpl c
clr a ; преобразуем бит-флаг в байтовый формат.
rlc a ;
addc a,hours ; получаем новое значение часов.
mov b,a ; сохраним пока промежуточный результат часов.
xrl a,#24 ; сравниваем его с максимальным+1.
add a,#0FFh ; если равен - получаем признак, в виде CY=1.
mov f0,c ; сохраним пока признак необходимости инкремента суток.
clr a ; вычисление маски для байта часов.
cpl c ;
addc a,#0FFh ;
anl a,b ; получаем новое значение часов.
mov hours,a ; сохраняем новое значение часов.
ret
;-----------------------------------------------------------------------
;
end
Мастер Ломастер, мож в симулятор "запихать" и проверить.. но мя те скажу - оно работает..
P.S. Если будет интересно ещё про алгоритмы "Объёмного перехода", как мя их называю, могу отдельную тему сделать, там и помяукаем..
Что-б пушистому
ploop-у тему про RTC не раздувать..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]