Смекни!
smekni.com

Разработка микропроцессорной системы цифрового термометра на базе микроконтроллера (стр. 8 из 9)

CALLJEKOM;

CALLSTROB;

GOTOMYLTIK;НАРАСПРЕДЕЛИТЕЛЬ.

;=========================================

; 33. ФОРМИРОВАНИЕ СТРОБИРУЮЩЕГО ИМПУЛЬСА.

;=========================================

STROB

BSF PORTB,E ;ВКЛЮЧАЕМ СТРОБ-ИМПУЛЬС.

NOP

BCF PORTB,E ;ВЫКЛЮЧАЕМ СТРОБ.

RETURN ;ВЕРНЕМСЯ.

;===============================================

; 34. ПЕРЕДАЧА КОМАНДЫ В ЖКИ.

;===============================================

JEKOM

MOVWF TEMP ;ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.

ANDLW B'11110000';ЗАМАСКИРУЕМ МЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.

MOVWF PORTB ;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "В".

CALL STROB ;ПРОСТРОБИРУЕМ.

CALL PAUSA ;ПАУЗА.

MOVFW TEMP

SWAPF TEMP,W ;ПОМЕНЯЕМ МЕСТАМИ ПОЛУБАЙТЫ.

ANDLW B'11110000';ЗАМАСКИРУЕМ СТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.

MOVWF PORTB ;ПЕРЕПИШЕМ В ПОРТ "В".

CALL STROB ;ПРОСТРОБИРУЕМ.

PAUSA

MOVLW .255;1 МС. ПАУЗА ДЛЯ ЗАПИСИ КОМАНДЫ.

ADDLW -1

BTFSS STATUS,2

GOTO $-2

RETURN

;=====================================

; 35. ЗАПИСЬДАННЫХВЖКИ.

;=====================================

JEDAT

MOVWF TEMP;ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.

ANDLW B'11110000';ЗАМАСКИРУЕМ МЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.

ADDLW 30;ПЕРЕВОД В КОД ASCII, ТОЛЬКО ДЛЯ ЦИФР!

MOVWF PORTB;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "В".

BSF PORTB,RS;УСТАНОВИМ R/S НА РАЗРЕШЕНИЕ ЗАПИСИ ДАННЫХ.

CALL STROB;ПРОСТРОБИРУЕМ.

CALL PAUS;ПАУЗА ДЛЯ ОСВОБОЖДЕНИЯ ЖКИ ОТ ЦИКЛА ЗАПИСИ.

MOVFW TEMP;

SWAPF TEMP,0;ПОМЕНЯЕМ МЕСТАМИ ПОЛУБАЙТЫ.

ANDLW B'11110000';ЗАМАСКИРУЕМ СТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.

MOVWF PORTB;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "В".

BSF PORTB,RS;УСТАНОВИМ R/S НА РАЗРЕШЕНИЕ ЗАПИСИ ДАННЫХ.

CALL STROB;ПРОСТРОБИРУЕМ.

PAUS

MOVLW .10;40 МКС. ПАУЗА ДЛЯ ЗАПИСИ ДАННЫХ.

ADDLW -1

BTFSS STATUS,2

GOTO $-2

RETURN

;========================================

; 36. ПЕРЕЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.

;========================================

CTP1

BTFSCFLAG2,0;

GOTOTEK1;ТЕКУЩАЯ ИНДИКАЦИЯ.

BTFSCFLAG2,1;

GOTOINDYC1;УСТАНОВКА ЧАСОВ И ДНЕЙ.

GOTOCMOTP1;ПРОСМОТР.

CTP2

BTFSCFLAG2,0;

GOTOTEK2;ТЕКУЩАЯ ИНДИКАЦИЯ.

BTFSCFLAG2,1;

GOTOINDYC2;УСТАНОВКА ЧАСОВ И ДНЕЙ.

GOTOCMOTP2;ПРОСМОТР.

TEK1

MOVFWDHUDI;ТЕКУЩАЯ ИНДИКАЦИЯ 1 СТРОКИ, ДЕСЯТКИ ДНЕЙ.

MOVWFR1;

MOVFWDHUEI;ЕДИНИЦЫ ДНЕЙ.

MOVWFR2;

MOVLW.240;ПУСТО.

MOVWFR3;

MOVWFR9;

MOVFWHOUH;ДЕСЯТКИ ЧАСОВ.

MOVWFR4;

MOVFWHOUL;ЕДИНИЦЫ ЧАСОВ.

MOVWFR5;

MOVLW.240;ПУСТО.

BTFSCCEK,0;ДВОЕТОЧИЕ ВКЛЮЧАЕТСЯ ЧЕРЕЗ 1 СЕКУНДУ.

MOVLW.10;ДВОЕТОЧИЕ.

MOVWFR6;

MOVFWMINH;ДЕСЯТКИ МИНУТ.

MOVWFR7;

MOVFWMINL;ЕДИНИЦЫ МИНУТ.

MOVWFR8;

MOVFWSOT1;ЗНАК.

MOVWFR10;

MOVFWDES1;ДЕСЯТКИ ТЕМПЕРАТУРЫ 1.

MOVWFR11;

MOVFWEDI1;ЕДИНИЦЫ ТЕМПЕРАТУРЫ 1.

MOVWFR12;

MOVLW.252;ЗАПЯТАЯ 1.

MOVWFR13;

MOVFWDST1;ДЕСЯТЫЕ ТЕМПЕРАТУРЫ 1.

MOVWFR14;

MOVLW.14;>.

MOVWFR15;

MOVLW.1;1.

MOVWFR16;

RETURN

TEK2

MOVFWMECDI;ТЕКУЩАЯ ИНДИКАЦИЯ 2 СТРОКИ, ДЕСЯТКИ МЕСЯЦА.

MOVWFR1;

MOVFWMECEI;ЕДИНИЦЫ МЕСЯЦА.

MOVWFR2;

MOVLW.240;ПУСТО.

MOVWFR3;

MOVWFR4;

MOVWFR5;

MOVWFR6;

MOVWFR7;

MOVWFR8;

MOVWFR9;

MOVFWSOT2;ЗНАК 2.

MOVWFR10;

MOVFWDES2;ДЕСЯТКИ ТЕМПЕРАТУРЫ 2.

MOVWFR11;

MOVFWEDI2;ЕДИНИЦЫ ТЕМПЕРАТУРЫ 2.

MOVWFR12;

MOVLW.252;ЗАПЯТАЯ 2.

MOVWFR13;

MOVFWDST2;ДЕСЯТЫЕ ТЕМПЕРАТУРЫ 2.

MOVWFR14;

MOVLW.14;>.

MOVWFR15;

MOVLW.2;2.

MOVWFR16;

RETURN

INDYC1

BTFSSPORTA,HOL;ЕСЛИ НАЖАТА КНОПКА "СБРОС",

CALLYC00;ТО ОБНУЛИМ СЕКУНДЫ И МИНУТЫ.

MOVLW.123;УСТАНОВКА ЧАСОВ И ДАТЫ 1 СТРОКА.

MOVWFR1;Ч.

MOVLW.17;А.

MOVWFR2;

MOVLW.19;С.

MOVWFR3;

MOVLW.126;Ы.

MOVWFR4;

MOVLW.240;ПУСТО.

MOVWFR5;

MOVWFR11;

MOVWFR12;

MOVWFR13;

MOVWFR14;

MOVWFR15;

MOVWFR16;

MOVFWHOUH;ТЕКУЩИЕ ЗНАЧЕНИЯ: ДЕСЯТКИ ЧАСОВ,

MOVWFR6;

MOVFWHOUL;ЕДИНИЦЫ ЧАСОВ.

MOVWFR7;

MOVLW.10;ДВОЕТОЧИЕ.

MOVWFR8;

MOVFWMINH;ДЕСЯТКИ МИНУТ.

MOVWFR9;

MOVFWMINL;ЕДИНИЦЫ МИНУТ.

MOVWFR10;

RETURN

INDYC2

MOVLW.176;Д.

MOVWFR1;

MOVLW.17;А.

MOVWFR2;

MOVLW.36;Т.

MOVWFR3;

MOVLW.17;А.

MOVWFR4;

MOVLW.240;ПУСТО.

MOVWFR5;

MOVWFR11;

MOVWFR12;

MOVWFR13;

MOVWFR14;

MOVWFR15;

MOVWFR16;

MOVFWDHUDI;ДЕСЯТКИДНЕЙ.

MOVWFR6;

MOVFWDHUEI;ЕДИНИЦЫДНЕЙ.

MOVWFR7;

MOVLW.253;ПРОЧЕРК.

MOVWFR8;

MOVFWMECDI;ДЕСЯТКИ МЕСЯЦА.

MOVWFR9;

MOVFWMECEI;ЕДИНИЦЫ МЕСЯЦА.

MOVWFR10;

RETURN

CMOTP1

MOVFWDHUDI;ЕСЛИ ПРОСМОТР

ADDWFDHUEI,0;СЕГОДНЯШНЕЙ ДАТЫ,

SUBWFDHU,0;ТО РЕГИСТРЫ ИНДИКАЦИИ НЕ МЕНЯЕМ.

SKPC;

GOTO$+5;

MOVFWMECDI;

ADDWFMECEI,0;

SUBWFMEC,0;

SKPNC;

CALLBDINZ1;ИНАЧЕ УСТАНОВИМ СЧИТАННЫЕ ЗНАЧЕНИЯ 1 СТРОКИ.

MOVFWDHUDI;ДЕСЯТКИ ДНЕЙ.

MOVWFR1;

MOVFWDHUEI;ЕДИНИЦЫ ДНЕЙ.

MOVWFR2;

MOVLW.14;>.

MOVWFR3;ПО УМОЛЧАНИЮ

MOVLW.1;1.

BTFSCFLAG1,1;ЕСЛИ ФЛАГ УСТАНОВЛЕН,

MOVLW.2;ТО - 2.

MOVWFR4;

MOVLW.240;ПУСТО.

MOVWFR5;

MOVWFR11;

MOVLW.253;ПРОЧЕРК.

MOVWFR8;

MOVFWDES1;ДЕСЯТКИ ТЕМПЕРАТУРЫ.

MOVWFR13;

MOVFWEDI1;ЕДИНИЦЫ ТЕМПЕРАТУРЫ.

MOVWFR14;

MOVLW.252;ЗАПЯТАЯ 1.

MOVWFR15;

MOVFWDST1;ДЕСЯТЫЕ ТЕМПЕРАТУРЫ.

MOVWFR16;

RETURN

CMOTP2

MOVFWDHUDI;ЕСЛИ ПРОСМОТР

ADDWFDHUEI,0;СЕГОДНЯШНЕЙ ДАТЫ,

SUBWFDHU,0;ТО РЕГИСТРЫ ИНДИКАЦИИ НЕ МЕНЯЕМ.

SKPC;

GOTO$+5;

MOVFWMECDI;

ADDWFMECEI,0;

SUBWFMEC,0;

SKPNC;

CALLBDIN12;ИНАЧЕ УСТАНОВИМ СЧИТАННЫЕ ЗНАЧЕНИЯ 2 СТРОКИ.

MOVFWMECDI;ДЕСЯТКИ МЕСЯЦА.

MOVWFR1;

MOVFWMECEI;ЕДИНИЦЫ МЕСЯЦА.

MOVWFR2;

MOVLW.240;ПУСТО.

MOVWFR3;

MOVWFR4;

MOVWFR5;

MOVWFR11;

MOVLW.253;ПРОЧЕРК.

MOVWFR8;

MOVFWDES2;ДЕСЯТКИ ТЕМПЕРАТУРЫ 2.

MOVWFR13;

MOVFWEDI2;ЕДИНИЦЫ ТЕМПЕРАТУРЫ 2.

MOVWFR14;

MOVLW.252;ЗАПЯТАЯ 2.

MOVWFR15;

MOVFWDST2;ДЕСЯТЫЕ ТЕМПЕРАТУРЫ 2.

MOVWFR16;

RETURN

;======================================================

; 37. ВЫВОД ЗНАЧЕНИЙ РЕГИСТРОВ НА ИНДИКАЦИЮ.

;======================================================

JEKIND

BSFSTATUS,5;ПЕРЕХОДИМ В БАНК 1.

BCFTRISB^80H,YCMI;НА ВЫХОД.

BCFTRISB^80H,YCPL;НА ВЫХОД.

BCFSTATUS,5;ПЕРЕХОДИМ В БАНК 0.

BTFSSFLAG1,0;ЕСЛИ ТЕКУЩАЯ ИНДИКАЦИЯ,

GOTO$+3;ТО ПРОПУСКАЕМ ИНДИКАЦИЮ КУРСОРА.

BTFSSFLAG,6;ЕСЛИ ИНДИКАЦИЯ КУРСОРА ВЫПОЛНЕНА, ТО ПРОПУСКАЕМ ЕЕ.

GOTO JEKYC;ПРОИНДИЦИРУЕМ КУРСОР.

MOVLW 02;ВОЗВРАТ КУРСОРА В ИСХОДНОЕ СОСТОЯНИЕ.

CALL JEKOM;ЗАПИШЕМ КОМАНДУ.

MOVLW B'10000000';КУРСОР НА 0 ПОЗИЦИЮ ПЕРВОЙ СТРОКИ.

CALL JEKOM;ЗАПИШЕМ КОМАНДУ.

CALLCTP1;ПЕРЕПИШЕМ В РЕГИСТРЫ ИНДИКАЦИИ 1 СТРОКУ.

CALLJEKCTP;ЗАПИШЕМ В ИНДИКАТОР 1 СТРОКУ.

MOVLW B'11000000';ВТОРАЯ СТРОКА. 0x0C0

CALL JEKOM;ЗАПИШЕМ КОМАНДУ.

CALLCTP2;ПЕРЕПИШЕМ В РЕГИСТРЫ ИНДИКАЦИИ 2 СТРОКУ.

CALLJEKCTP;ЗАПИШЕМ В ИНДИКАТОР 2 СТРОКУ.

BCFFLAG,6;

RETURN

JEKCTP

MOVLW.16;

MOVWFCOUN;УСТАНОВИМ СЧЕТЧИК ИНДИКАЦИИ ЗНАКОМЕСТ.

MOVLW R1;АДРЕС ПЕРВОГО РЕГИСТРА ИНДИКАЦИИ.

MOVWFFSR;ПО КОСВЕННОЙ АДРЕСАЦИИ

MOVFWINDF;УСТАНОВИМ ЗНАЧЕНИЕ РЕГИСТРА.

CALL JEDAT;ЗАПИШЕМ В ИНДИКАТОР.

DECFCOUN,1;УМЕНЬШИМ СЧЕТЧИК.

BTFSCSTATUS,2;ЕСЛИ НЕТ НУЛЯ,

RETURN;

INCFFSR,1;ТО ВЫБЕРЕМ СЛЕДУЮЩИЙ РЕГИСТР.

GOTO$-6;ПОВТОРИМ ВЫВОД НА ИНДИКАЦИЮ.

;=======================================

; 38. ПРОВЕРКА КНОПОК.

;=======================================

KHOP

BSFSTATUS,5;ПЕРЕХОДИМ В БАНК 1.

BSFTRISB^80H,YCMI;НА ВХОД.

BSFTRISB^80H,YCPL;НА ВХОД.

BCFSTATUS,5;ПЕРЕХОДИМ В БАНК 0.

BTFSSFLAG1,0;ЕСЛИ НЕТ УСТАНОВКИ,

GOTOKHOP1;КНОПКИ НЕ ПРОВЕРЯЮТСЯ.

BTFSCFLAG2,2;ПРИ ПРОСМОТРЕ

GOTO$+0x0D;НЕ ПРОВЕРЯЕТСЯ РАЗРЯД И ПЛЮС.

BTFSCFLAG,3;ЕСЛИ РАНЕЕ БЫЛА НАЖАТА КНОПКА,

CALLYCTAL;ТО ИДЕМ НА УСТАНОВКУ РАЗРЯДА.

BTFSSPORTB,YCPL;ЕСЛИ КНОПКА ПЛЮС НАЖАТА,

BSFFLAG,3;ПОСТАВИМ ФЛАГ.

BTFSSPORTB,YCPL;ЕСЛИ КНОПКА ПЛЮС НАЖАТА,

BSFFLAG1,2;ЗАПРЕЩАЕМ ИНДИКАЦИЮ.

BTFSCFLAG,5;ЕСЛИ РАНЕЕ БЫЛА НАЖАТА КНОПКА "РАЗРЯД",

CALLKYPCY;ТО ИДЕМ НА УСТАНОВКУ КУРСОРА.

BTFSSPORTB,PAZ;ЕСЛИ КНОПКА "РАЗРЯД" НАЖАТА,

BSFFLAG,5;ПОСТАВИМ ФЛАГ.

BTFSCFLAG2,1;ПРИ УСТАНОВКЕ ДАТЫ

GOTOKHOP1;КНОПКА МИНУС НЕ ПРОВЕРЯЕТСЯ.

BTFSCFLAG,2;ЕСЛИ РАНЕЕ БЫЛА НАЖАТА КНОПКА МИНУС,

CALLYCTAM;ТО ИДЕМ НА УСТАНОВКУ РАЗРЯДА.

BTFSSPORTB,YCMI;ЕСЛИ КНОПКА МИНУС НАЖАТА,

BSFFLAG,2;ПОСТАВИМ ФЛАГ.

BTFSSPORTB,YCMI;ЕСЛИ КНОПКА МИНУС НАЖАТА,

BSFFLAG1,2;ЗАПРЕЩАЕМ ИНДИКАЦИЮ.

KHOP1

BTFSSPORTB,PEJ;ЕСЛИ КНОПКА "РЕЖИМ" НАЖАТА,

BSFFLAG,4;ПОСТАВИМ ФЛАГ.

BTFSSFLAG,4;ЕСЛИ КНОПКА "РЕЖИМ" НЕ БЫЛА НАЖАТА,

GOTOVUBOR;ТО ИДЕМ НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.

BTFSSPORTB,PEJ;ЕСЛИ КНОПКА "РЕЖИМ" НАЖАТА,

GOTOVUBOR;ТО ИДЕМ НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.

BCFFLAG,4;СБРОСИМ ФЛАГ КНОПКИ.

INCFREID,1;ИЗМЕНЕНИЕ РЕЖИМА ИНДИКАЦИИ.

MOVLW.3;3 РЕЖИМА ИНДИКАЦИИ.

SUBWFREID,0;ЕСЛИ БОЛЬШЕ,

BTFSSSTATUS,2;ТО ПОЙДЕМ НА СБРОС.

GOTOVUBOR;НА ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.

CLRFREID;СБРОС РЕЖИМА.

GOTOVUBOR;НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.

;======================================================

; 39. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.

;======================================================

PRER

MOVWFWTEMP;СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И

MOVFWSTATUS;STATUS,

MOVWFSTEMP;

MOVFWFSR;FSR.

MOVWFFTEMP;

CALLS1;

REPER ;ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.

MOVFWSTEMP;ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:

MOVWFSTATUS;STATUS,

MOVFWFTEMP;

MOVWFFSR;FSR,

MOVFWWTEMP;W.

BCFINTCON,2;СБРАСЫВАЕМ ФЛАГ ПРЕРЫВАНИЯ ОТ TMR0.

RETFIE ;ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.

;=============================================

; 40. СЧЕТ И ПЕРЕКОДИРОВКА РЕГИСТРОВ Ч-М-С.

;=============================================

S1

INCFMCK,1;ПРИБАВИМ 1 В РЕГИСТР МИЛЛИСЕКУНД.

MOVFWMCK;

ADDLW-0x7D;СЧИТАЕМ ДО 125.

BTFSSSTATUS,2;

RETURN;

CLRFMCK;ОБНУЛИМ.

BTFSCFLAG,7;РАЗДЕЛИМ НА 2.

GOTO$+3;

BSFFLAG,7;

RETURN;

BCFFLAG,7;ОБНУЛИМ ДЕЛИТЕЛЬ.

MOVFWCEK;ЗАГРУЗКА ЗНАЧЕНИЙ СЕКУНД В РАБ. РЕГИСТР.

ADDLW-3BH;ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.236:4=59-0x0EC;

BZM1;СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА M1,

INCFCEK,1;ИНАЧЕ ПРИБАВИТЬ 1 В РЕГИСТР СЕКУНД.

RETURN;

M1

CLRFCEK;ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.

MOVFWMIN;ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.

ADDLW-3BH;-59.

BZH1;СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА H1.

INCFMIN,1;ПРИБАВИТЬ 1 В МИНУТЫ.

MOVFWMIN;MIN >W.

MOVWFTEMP;.

CALLBIDE;ПЕРЕКОДИРУЕМ.

MOVWFMINH;W > В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ МИНУТ.

MOVFWTEMP;ВРЕМЕННЫЙ

MOVWFMINL;В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ МИНУТ.

RETURN;

H1

CLRFMIN;ОБНУЛЯЕМ РЕГИСТР МИНУТ.

CLRFMINL;ОБНУЛЯЕМ ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ.

CLRFMINH;ОБНУЛЯЕМ ДЕСЯТКИ МИНУТ ИНДИКАЦИИ.

MOVFWHOU;ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.

ADDLW-17H;- 23.

BZD1;СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА H10.

INCFHOU,1;ПРИБАВИТЬ 1 В ЧАСЫ.

MOVFWHOU;HOU >W.

MOVWFTEMP;

CALLBIDE;ПЕРЕКОДИРУЕМ.

MOVWFHOUH;W > В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ЧАСОВ.

MOVFWTEMP;ВРЕМЕННЫЙ

MOVWFHOUL;В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ЧАСОВ.

RETURN;

D1

CLRFHOU;ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.

CLRFHOUL;ОБНУЛЕНИЕ ЕДИНИЦ ЧАСОВ.

CLRFHOUH;ОБНУЛЕНИЕ ДЕСЯТКОВ ЧАСОВ.

CALLSAPIS;НА ЗАПИСЬ.

CALLPOLNO;НА УСТАНОВКУ ПРЕДЕЛЬНЫХ ЗНАЧЕНИЙ.

INCFDHU,1;ПРИБАВИТЬ 1 В ДНИ.

MOVFWMEC;ЧИСЛО ДНЕЙ НЕ ДОЛЖНО ПРЕВЫШАТЬ

CALLDAYMON;ЧИСЛА ДАННОГО МЕСЯЦА.

SUBWFDHU,0;

SKPNC;

GOTOME1;ИНАЧЕ УВЕЛИЧИМ МЕСЯЦ.

MOVFWDHU;

MOVWFTEMP;

CALLBIDE;ПЕРЕКОДИРУЕМ.

MOVWFDHUD;W > В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ДНЕЙ.

MOVFWTEMP;ВРЕМЕННЫЙ

MOVWFDHUE;В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ДНЕЙ.

RETURN;

ME1

MOVLW.1;УСТАНОВИМ ПЕРВОЕ ЧИСЛО.

MOVWFDHU;

MOVWFDHUE;

CLRFDHUD;

INCFMEC,1;ПРИБАВИМ МЕСЯЦ.

MOVLW.13;НЕ БОЛЕЕ 12.

SUBWFMEC,0;

SKPNC;

GOTOME1ME;ЕСЛИ БОЛЬШЕ, ТО УСТАНОВИМ 1 ЯНВАРЯ.

MOVFWMEC;

MOVWFTEMP;

CALLBIDE;ПЕРЕКОДИРУЕМ.

MOVWFMECD;W > В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ МЕСЯЦА.