Определение возраста человека на PICassembler
Министерство образования и науки Украины Житомирский государственный технологический университет ЛАБОРАТОРНАЯ РАБОТА. DateWork. inc — в данном файле описаны процедуры, которые используются для переведения дат в количество дней; Init. inc — в данном файле оглашаются все регистры и биты, которые используются в программе; 18h-1Ah, — 28h-2Ah, 38h-3Ah, 48h-4Ah, — используются для умножения количества… Читать ещё >
Определение возраста человека на PICassembler (реферат, курсовая, диплом, контрольная)
Министерство образования и науки Украины Житомирский государственный технологический университет ЛАБОРАТОРНАЯ РАБОТА
Определение возраста человека на PICassembler
Кафедра ПОВТ
Группа ПИ-40
ФИКТ
Выполнил
Проверил
Житомир
- 1. Задание
- 2. Разработка программы
- 2.1 Выбор методов решения данной задачи
- 2.2 Разработка алгоритма
- 3. Распределение регистров
- 4. Тестирование программы
- 5. Листинг программы
- Вывод
1. Задание
На языке PICAssembler написать программу, которая подсчитывает количество прожитых дней.
2. Разработка программы
2.1 Выбор методов решение данной задачи
В данной задаче используются 2 даты, по этому для их записи будем использовать правила записи дат: дд.мм.гггг. В данной программе исходными данными являются даты D1 и D2, которые задаются в двоично-десятичном коде. По этому для их записи выделяем 1 байт для дней, 1 байт для месяцев и 2 байта для года. Для поиска количества прожитых дней сначала обе даты переведем в количество дней, потом найдем разницу между этими количествами — это и будет количество прожитых дней. Для подсчета данной функции разработаем процедуры сложения, вычитания, умножение, деления, умножения и деления на 4.
Проект программы включает файлы: Проект:
· Init. inc — в данном файле оглашаются все регистры и биты, которые используются в программе;
· Clrreg. inc — в данном файле описывается процедура очистки памяти;
· Baseprog. inc — в данном файле описаны основные процедуры, которые используются в программе;
· DateWork. inc — в данном файле описаны процедуры, которые используются для переведения дат в количество дней;
· Addition. inc — в данном файле описаны процедуры сложения;
· Deduct. inc — в данном файле описаны процедуры вычитания;
· Increase. inc — в данном файле описана процедура умножения;
· HMDL. asm-это главный файл, который объединяет все функции в одно целое;
· Input. sti — отладочный файл для введения данных.
Данную программу будем разрабатывать для микроконтроллера 16F84.
2.2 Разработка алгоритма
3. Распределение регистров
Распределение регистров указано на рис. 1
Рис. 1
· 10h-13h-в начале программы заносится I дата (в прямом коде);
· 20h-23h-на — в начале программы заносится II дата (в прямом коде);
· 14h-16h-используется для сохранения промежуточных данных при переводе I даты в количество дней и сохранения количества дней в I дате; 24h-26h — используется для сохранения промежуточных данных при переводе I даты в количество дней и сохранения количества дней в II дате;
· 3Ch-47h — используется для сохранения количества дней в разных месяцах, что необходимо для корректного перевода дат в количество дней;
· 0Сh-0Fh-вспомогательные регистры;
· 18h-1Ah, — 28h-2Ah, 38h-3Ah, 48h-4Ah, — используются для умножения количества годов в каждой дате на 365;
· 35h-36h-находится промежуточный результат;
· 34h-36h, 44h-46h, а также 3Сh-3Fh, 4Fh — регистры, которые используются для переведения результата с прямого кода в двоично-десятичную систему;
· 3Dh-3Fh — результат работы программы (количество прожитых дней) в двоично-десятичном коде;
4. Тестирование программы
программа алгоритм регистр файл листинг
Для проверки работы программы было введено несколько контрольных примеров. Результаты программы сопоставлялись с реальными.
Пример 1:
Введено следующие значения:
D1=25.11.2009(10)=19.0B.07D9(h)
D2=21.03.1990(10)=15.03.07C6(h)
Результат работы программы: 1С15(h)=7189(10). Реальный результат — 7189.
Пример 2:
Введено следующие данные:
D1=30.10.2009(10)=1E.0A.07D9(h)
D2=30.12.1987(10)=1E.0C.07C3(h)
Результат работы программы: 1F27(h)=7975(10). Реальный результат — 7975.
Пример 3:
Введено следующие данные:
D1=30.10.2009(10)=1E.0A.07D9(h)
D2=26.02.1991(10)=1A.02.07C7(h)
Результат работы программы: 1AA5(h)=6821(10). Реальный результат — 6821.
5. Листинг программы
Файл Init. inc
;Инициализация регистров
D1-EQU-0X10
D2-EQU-0X20
RP-EQU-0X0C
RS-EQU-0X0D
ICV-EQU-0X0E
IC-EQU-0X0F
RM-EQU-0X3C
RPM-EQU-0X4F
Файл Clrreg.inc
;ОЧИЩЕНИЕ ПАМЯТИ
CLREG-MOVLW — 0X40 ;
— MOVWF — IC ;
— MOVLW — 0X10
— MOVWF — FSR
CR-CLRF-INDF
— INCF-FSR, F
— DECFSZ — IC, F
— GOTO — CR
— RETURN
Файл Baseprog.inc
;СЧИТЫВАЕНИ ВХОДНЫХ ДАННЫХ
DATEIN — MOVLW — D1
— MOVWF — FSR
— CALL-DATAIN
— MOVLW — D1 ;
— MOVWF — FSR
— CALL-TDATE
— MOVLW — D2;
— MOVWF — FSR;
— CALL-DATAIN ;
— MOVLW — D2 ;
— MOVWF — FSR
— CALL-TDATE;
— RETURN
;СЧИТЫВАНИЕ ДАТ С ФАЙЛА
DATAIN — MOVLW — 0X04 ;
— MOVWF — IC ;
NL-MOVF-PORTB, W ;
— MOVWF — INDF ;
— INCF-FSR, F ;
— DECFSZ — IC, F ;
— GOTO — NL
— RETURN
;КОНВЕРТАЦИЯ ДАТ С ДОВИЧНО-ДЕСЯТИЧНОГО В ПРЯМОЙ КОД
TDATE — MOVLW — 0X10
— SUBWF-INDF, W
— BTFSS-STATUS, C ;
— GOTO-TMONS
— MOVLW — 0X20
— SUBWF-INDF, W
— BTFSC-STATUS, C
— GOTO-GO30-;СМ. ЛИСТ. 8
— MOVLW — 0X06
— SUBWF-INDF, F
— GOTO-TMONS-;СМ. ЛИСТ. 8
GO30 — MOVLW — 0X30
— SUBWF-INDF, W
— BTFSC-STATUS, C
— GOTO-GO31
— MOVLW — 0X0C
— SUBWF-INDF, F
— GOTO-TMONS
GO31 — MOVLW — 0X12
— SUBWF-INDF, F
TMONS — INCF-FSR, F
— BTFSS-INDF, 4
— GOTO-TYEARS
— BCF-INDF, 4
— MOVLW — 0X0A
— ADDWF — INDF, F
TYEARS — INCF-FSR, F
— MOVF-INDF, W ;
— MOVWF — RP ;
— MOVLW — 0X17 ;
— ADDWF — FSR, F ;
— MOVF-RP, W ;
— MOVWF — INDF ;
— MOVLW — 0X04 ;
— MOVWF — IC ;
YMR11 — BCF-STATUS, C ;
— RRF-INDF, F;
— DECFSZ — IC, F;
— GOTO-YMR11;
— MOVLW — 0X11 ;
— SUBWF-FSR, F ;
— MOVLW — 0X03 ;
— MOVWF — INDF ;
— INCF-FSR, F ;
— MOVLW — 0XE8 ;
— MOVWF — INDF ;
— MOVLW — 0X0A
— MOVWF — ICV
— CALL-MNOZH ;
— MOVLW — 0X64
— MOVWF — INDF
— MOVLW — 0X10
— ADDWF — FSR, F
— CLRF-INDF
— DECF-FSR, F
— CLRF-INDF
— MOVLW — 0X16
— SUBWF-FSR, F
— MOVF-INDF, W ;
— MOVWF — RP ;
— MOVLW — 0X17 ;
— ADDWF — FSR, F ;
— MOVF-RP, W ;
— MOVWF — INDF ;
— MOVLW — 0X04 ;
— MOVWF — IC ;
YML1 — BCF-STATUS, C
— RLF-INDF, F ;
— DECFSZ — IC, F ;
— GOTO-YML1 ;
— MOVWF — IC ;
YMR12 — BCF-STATUS, C
— RRF-INDF, F ;
— DECFSZ — IC, F ;
— GOTO-YMR12 ;
— MOVLW — 0X07
— MOVWF — ICV
— MOVLW — 0X10
— SUBWF-FSR, F
— CALL-MNOZH
— MOVLW — 0X0A
— MOVWF — INDF
— MOVLW — 0X10
— ADDWF — FSR, F
— CLRF-INDF
— DECF-FSR, F
— CLRF-INDF
— MOVLW — 0X15
— SUBWF-FSR, F
— MOVF-INDF, W
— MOVWF — RP
— MOVLW — 0X16
— ADDWF — FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X04
— MOVWF — IC
YMR21 — BCF-STATUS, C
— RRF-INDF, F
— DECFSZ — IC, F
— GOTO-YMR21
— MOVLW — 0X10
— SUBWF-FSR, F
— MOVLW — 0X04
— MOVWF — ICV
— CALL-MNOZH
— MOVLW — 0X10
— ADDWF — FSR, F
— CLRF-INDF
— DECF-FSR, F
— CLRF-INDF
— MOVLW — 0X15
— SUBWF-FSR, F
— MOVF-INDF, W
— MOVWF — RP
— MOVLW — 0X16
— ADDWF — FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X04
— MOVWF — IC
YML2 — BCF-STATUS, C
— RLF-INDF, F
— DECFSZ — IC, F
— GOTO-YML2
— MOVWF — IC
YMR22 — BCF-STATUS, C
— RRF-INDF, F
— DECFSZ — IC, F
— GOTO-YMR22
— MOVLW — 0X02
— MOVWF — IC
— CALL-PLUS2
— MOVLW — 0X12
— ADDWF — FSR, F
— MOVF-INDF, W
— MOVWF — RP
— CLRF-INDF
— MOVLW — 0X26
— SUBWF-FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X25
— ADDWF — FSR, F
— MOVF-INDF, W
— MOVWF — RP
— CLRF-INDF
— MOVLW — 0X26
— SUBWF-FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X17
— ADDWF — FSR, F
— CLRF-INDF
— RETURN
;ПЕРЕВОД ДАТ В КОЛИЧЕСТВО ДНЕЙ
CNTDAYS — CALL-REGMONS
— MOVLW — D1+0X03
— MOVWF — FSR
— CALL-CDAYS
— MOVLW — D2+0X03
— MOVWF — FSR
— CALL-CDAYS
— RETURN
;ПОДСЧЕТ КОЛИЧЕСТВА ПРОЖИТЫХ ДНЕЙ
LIVEDAY — MOVLW — 0X03
— MOVWF — IC
— MOVLW — D1+0X06
— MOVWF — FSR
— CALL-MINUS3
— ;КОНВЕРТАЦИЯ РЕЗУЛЬТАТА ИЗ ШЕСТНАДЦАТИРИЧНОГО В ДВОИЧНО-ДЕСЯТИЧНЫЙ КОД
— MOVLW — RM
— MOVWF — FSR
— MOVLW — 0X14
— MOVWF — IC
CLRMNS — CLRF-INDF
— INCF-FSR, F
— DECFSZ — IC, F
— GOTO-CLRMNS
— MOVLW — 0X0A
— SUBWF-FSR, F
— MOVLW — 0X10
— MOVWF — INDF
— DECF-FSR, F
— MOVLW — 0X27
— MOVWF — INDF
— MOVLW — 0X10
— SUBWF-FSR, F ;
STEP4 — MOVLW — 0X03-;ДЕЛИМ НА 10 000
— MOVWF — IC
— INCF-FSR, F
— CALL-MINUS1
— INCF-FSR, F
— MOVF-INDF, F
— BTFSS-STATUS, Z
— GOTO-GOSTEP3
— INCF-RPM, F
— INCF-FSR, F
— GOTO-STEP4
GOSTEP3 — MOVLW — 0X03
— MOVWF — IC
— MOVLW — 0X02
— ADDWF — FSR, F
— CALL-PLUS1
— MOVLW — 0X0C
— ADDWF — FSR, F
— CALL-ADDDCML
— MOVLW — 0X0A
— ADDWF — FSR, F
— MOVLW — 0XE8
— MOVWF — INDF
— DECF-FSR, F
— MOVLW — 0X03
— MOVWF — INDF
— MOVLW — 0X10
— SUBWF-FSR, F
STEP3 — MOVLW — 0X03-;ДЕЛИМ НА 1000
— MOVWF — IC
— INCF-FSR, F
— CALL-MINUS1
— INCF-FSR, F
— MOVF-INDF, F
— BTFSS-STATUS, Z
— GOTO-GOSTEP2
— INCF-RPM, F
— INCF-FSR, F
— GOTO-STEP3
GOSTEP2 — MOVLW — 0X03
— MOVWF — IC
— MOVLW — 0X02
— ADDWF — FSR, F
— CALL-PLUS1
— MOVLW — 0X0C
— ADDWF — FSR, F
— CALL-ADDDCML
— MOVLW — 0X0A
— ADDWF — FSR, F
— MOVLW — 0X64
— MOVWF — INDF
— DECF-FSR, F
— CLRF-INDF
— MOVLW — 0X10
— SUBWF-FSR, F
STEP2 — MOVLW — 0X03-;ДЕЛИМ НА 100
— MOVWF — IC
— INCF-FSR, F
— CALL-MINUS1
— INCF-FSR, F
— MOVF-INDF, F
— BTFSS-STATUS, Z
— GOTO-GOSTEP1
— INCF-RPM, F
— INCF-FSR, F
— GOTO-STEP2
GOSTEP1 — MOVLW — 0X03
— MOVWF — IC
— MOVLW — 0X02
— ADDWF — FSR, F
— CALL-PLUS1
— MOVLW — 0X0C
— ADDWF — FSR, F
— CALL-ADDDCML
— MOVLW — 0X0A
— ADDWF — FSR, F
— MOVLW — 0X0A
— MOVWF — INDF
— MOVLW — 0X11
— SUBWF-FSR, F
STEP1 — MOVLW — 0X03-;ДЕЛИМ НА 10
— MOVWF — IC
— INCF-FSR, F
— CALL-MINUS1
— INCF-FSR, F
— MOVF-INDF, F
— BTFSS-STATUS, Z
— GOTO-GOSTEP0
— INCF-RPM, F
— INCF-FSR, F
— GOTO-STEP1
GOSTEP0 — MOVLW — 0X03-;ПРИБАВЛЯЕМ ОСТАТОК
— MOVWF — IC
— MOVLW — 0X02
— ADDWF — FSR, F
— CALL-PLUS1
— MOVLW — 0X0C
— ADDWF — FSR, F
— CALL-ADDDCML
— MOVLW — 0X06
— SUBWF-FSR, F
— MOVF-INDF, W
— MOVWF — RPM
— MOVLW — 0X09
— ADDWF — FSR, F
— CALL-ADDDCML
— RETURN
;ВСПОМОГАТЕЛЬНАЯ ПРОЦЕДУРА КОНВЕРТАЦИИ
ADDDCML — MOVLW — 0X04
— MOVWF — ICV
BITMOV — MOVLW — 0X03
— MOVWF — IC
BITEMOV — RLF-INDF, F
— DECF-FSR, F
— DECFSZ — IC, F
— GOTO-BITEMOV
— ADDWF — FSR, F
— DECFSZ — ICV, F
— GOTO-BITMOV
— MOVWF — IC
— CALL-PLUS1
— CLRF-RPM
— RETURN
Файл DateWork.inc
;ОСНОВНАЯ ПРОЦЕДУРА ПЕРЕВЕДЕНИЯ ДАТ В КОЛИЧЕСТВО ДНЕЙ
CDAYS — MOVF-INDF, W
— MOVWF — RP
— MOVLW — 0X03
— ADDWF — FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X04
— SUBWF-FSR, F
— MOVF-INDF, W ;
— MOVWF — RP
— MOVLW — 0X03
— ADDWF — FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVF-FSR, W
— MOVWF — RP
— CALL-VYSGOD
— MOVLW — 0X06
— SUBWF-FSR, F
— MOVF-FSR, W
— MOVWF — RPM
— MOVF-NDF, W
— MOVWF — ICV
— DECF-ICV, W
— MOVWF — RM
DTOMONS — MOVLW — RM
— ADDWF — RM, W
— MOVWF — FSR
— MOVF-INDF, W ;
— MOVWF — RP
— MOVLW — 0X15
— ADDWF — RPM, W
— MOVWF — FSR
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X03
— MOVWF — IC
— MOVLW — 0X10
— SUBWF-FSR, F
— CALL-PLUS1
— DECF-RM, F
— DECFSZ — ICV, F ;
— GOTO-DTOMONS ;
— MOVLW — 0X03
— SUBWF-FSR, F
— MOVF-INDF, W
— MOVWF — RP
— MOVLW — 0X16
— ADDWF — FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X03
— MOVWF — IC
— MOVLW — 0X10
— SUBWF-FSR, F
— CALL-PLUS1
— MOVLW — 0X02
— MOVWF — ICV
DMOV — MOVF-INDF, W ;
— MOVWF — RP
— MOVLW — 0X17
— ADDWF — FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X18
— SUBWF-FSR, F
— DECFSZ — ICV, F
— GOTO-DMOV
— MOVLW — 0X09
— ADDWF — FSR, F
— MOVLW — 0X6D
— MOVWF — INDF
— DECF-FSR, F
— MOVLW — 0X01
— MOVWF — INDF ;
— MOVLW — 0X09
— MOVWF — ICV
— INCF-FSR, F
— CALL-MNOZH
— MOVLW — 0X03
— MOVWF — IC
— MOVLW — 0X10
— ADDWF — FSR, F
MNTODOD — CLRF-INDF
— MOVLW — 0X10
— ADDWF — FSR, F
— MOVF-INDF, W ;
— MOVWF — RP
— CLRF-INDF
— MOVLW — 0X14
— SUBWF-FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X03
— ADDWF — FSR, F
— DECFSZ — IC, F
— GOTO-MNTODOD ;
— MOVLW — 0X03
— MOVWF — IC
— MOVLW — 0X11
— SUBWF-FSR, F
— CALL-PLUS1
— MOVLW — 0X03
— MOVWF — IC
— MOVLW — 0X13
— ADDWF — FSR, F
CLRDOD — CLRF-INDF
— DECF-FSR, F
— DECFSZ — IC
— GOTO-CLRDOD
— RETURN
;ПОДСЧЕТ КОЛИЧЕСТВА ВЫСОКОСНЫХ ГОДОВ
VYSGOD — MOVLW — 0X02
— MOVWF — ICV
KOLSDV — MOVLW — 0X02
— MOVWF — IC
— MOVF-RP, W
— MOVWF — FSR
VG-RRF-INDF, F
— INCF-FSR, F
— DECFSZ — IC, F
— GOTO-VG
— BCF-STATUS, C
— DECFSZ — ICV, F
— GOTO-KOLSDV
— RETURN
;ЗАПОЛНЕНИЕ РЕГИСТРОВ ДНЕЙ В МЕСЯЦЫ
REGMONS — MOVLW — 0X1F
— MOVWF — RM+0X01
— MOVLW — 0X1C
— MOVWF — RM+0X02
— MOVLW — 0X1F
— MOVWF — RM+0X03 ;
— MOVLW — 0X1E
— MOVWF — RM+0X04
— MOVLW — 0X1F
— MOVWF — RM+0X05
— MOVLW — 0X1E
— MOVWF — RM+0X06
— MOVLW — 0X1F
— MOVWF — RM+0X07
— MOVLW — 0X1F
— MOVWF — RM+0X08
— MOVLW — 0X1E
— MOVWF — RM+0X09
— MOVLW — 0X1F
— MOVWF — RM+0X0A
— MOVLW — 0X1E
— MOVWF — RM+0X0B
— RETURN
Файл Addition.inc
;ПРОЦЕДУРЫ СЛОЖЕНИЯ
PLUS1 — CLRF-RS
ADN1 — MOVF-INDF, W
— ADDWF — RS, W
— MOVWF — RP
— CLRF-RS
— MOVLW — 0X01
— BTFSC-STATUS, C
— MOVWF — RS
— MOVLW — 0X10
— ADDWF — FSR, F
— MOVF-INDF, W
— ADDWF — RP, F
— MOVLW — 0X01
— BTFSC-STATUS, C
— MOVWF — RS
— MOVLW — 0X10
— SUBWF-FSR, F
— MOVF-RP, W
— MOVWF — INDF
— DECF-FSR, F
— DECFSZ — IC, F
— GOTO-ADN1
— RETURN
PLUS2 — CLRF — RS
ADN2 — MOVF-INDF, W
— ADDWF — RS, W
— MOVWF — RP
— CLRF-RS
— MOVLW — 0X01
— BTFSC-STATUS, C
— MOVWF — RS
— MOVLW — 0X10
— ADDWF — FSR, F
— MOVF-INDF, W
— ADDWF — RP, F
— MOVLW — 0X01
— BTFSC-STATUS, C
— MOVWF — RS
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X11
— SUBWF-FSR, F
— DECFSZ — IC, F
— GOTO-ADN2
— RETURN
PLUS3 — CLRF-RS
ADN3 — MOVF-INDF, W
— ADDWF — RS, W
— MOVWF — RP
— CLRF-RS
— MOVLW — 0X01
— BTFSC-STATUS, C
— MOVWF — RS
— MOVLW — 0X10
— ADDWF — FSR, F
— MOVF-INDF, W
— ADDWF — RP, F
— MOVLW — 0X01
— BTFSC-STATUS, C
— MOVWF — RS
— MOVLW — 0X10
— ADDWF — FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X21
— SUBWF-FSR, F
— DECFSZ — IC, F
— GOTO-ADN3;
— RETURN
Файл Deduct.inc
;ПРОЦЕДУРЫ ВЫЧИТАНИЯ
MINUS1 — CLRF-RS
VIDN1 — MOVF-INDF, W ;
— MOVWF — RP
— MOVF-RS, W
— SUBWF-RP, F
— CLRF-RS
— MOVLW — 0X01
— BTFSS-STATUS, C
— MOVWF — RS
— MOVLW — 0X10
— ADDWF — FSR, F
— MOVF-INDF, W
— SUBWF-RP, W
— MOVWF — RP
— MOVLW — 0X01
— BTFSS-STATUS, C
— MOVWF — RS
— MOVLW — 0X10
— SUBWF-FSR, F
— MOVF-RP, W
— MOVWF — INDF
— DECF-FSR, F
— DECFSZ — IC, F
— GOTO-VIDN1
— RETURN
MINUS2 — CLRF-RS
VIDN2 — MOVF-INDF, W
— MOVWF — RP
— MOVF-RS, W
— SUBWF-RP, F
— CLRF-RS
— MOVLW — 0X01
— BTFSS-STATUS, C
— MOVWF — RS
— MOVLW — 0X10
— ADDWF — FSR, F
— MOVF-INDF, W
— SUBWF-RP, W
— MOVWF — RP
— MOVLW — 0X01
— BTFSS-STATUS, C
— MOVWF — RS
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X11
— SUBWF-FSR, F
— DECFSZ — IC, F
— GOTO-VIDN2
— RETURN
MINUS3 — CLRF-RS
VIDN3 — MOVF-INDF, W
— MOVWF — RP
— MOVF-RS, W
— SUBWF-RP, F
— CLRF-RS
— MOVLW — 0X01
— BTFSS-STATUS, C
— MOVWF — RS
— MOVLW — 0X10
— ADDWF — FSR, F
— MOVF-INDF, W
— SUBWF-RP, W
— MOVWF — RP
— MOVLW — 0X01
— BTFSS-STATUS, C
— MOVWF — RS
— MOVLW — 0X10
— ADDWF — FSR, F
— MOVF-RP, W
— MOVWF — INDF
— MOVLW — 0X21
— SUBWF-FSR, F
— DECFSZ — IC, F
— GOTO-VIDN3
— RETURN
Файл Increase.inc
— INCLUDE
;ПРОЦЕДУРЫ УМНОЖЕНИЯ
MNOZH — MOVLW — 0X09
— MOVWF — ICV
— MOVF-FSR, W
— MOVWF — RM
MN-BTFSC-INDF, 0
— GOTO-MNDOD
GOMN — MOVLW — 0X03
— MOVWF — IC
— MOVF-RM, W
— MOVWF — FSR
— MOVLW — 0X10
— ADDWF — FSR, F
— BCF-STATUS, C
SDVL — RLF-INDF, F
— DECF-FSR, F
— DECFSZ — IC, F
— GOTO-SDVL
— MOVLW — 0X03
— MOVWF — IC
— MOVLW — 0X0F
— SUBWF-FSR, F
— BCF-STATUS, C
SDVR — RRF-INDF, F
— INCF-FSR, F
— DECFSZ — IC, F
— GOTO-SDVR
— MOVF-RM, W
— MOVWF — FSR
— DECFSZ — ICV, F ;
— GOTO-MN
— GOTO-ENDMN
MNDOD — MOVLW — 0X03
— MOVWF — IC
— MOVLW — 0X10
— ADDWF — FSR, F
— CALL-PLUS2
— GOTO-GOMN ;
ENDMN — RETURN
Файл HMDL.asm
— INCLUDE
— INCLUDE; ИНИУИАЛИЗАЦИЯ РЕГИСТРОВ, КОТОРЫЕ СПОЛЬЗУЮТСЯ
— CALL — CLREG-;ОЧИЩЕНИЯ РЕГИСТРОВ
— CALL — DATEIN — ;ЗАГРУЗКА ДАТ
— CALL — CNTDAYS — ;ПЕРЕВЕДЕНИЯ ДАТ В КОЛИЧЕСТВО ДНЕЙ
— CALL — LIVEDAY — ;НАХОДИМ КОЛИЧЕСТВО ПРОЖИТЫХ ДНЕЙ
— GOTO — ENDPROG — ;ПЕРЕХОД В КОНЕЦ ПРОГРАММЫ
;———-СТРУКТУРНЫЕ ЭЛЕМЕНТЫ——————
— INCLUDE — ;ОЧИСТКА РЕГИСТРОВ
— INCLUDE — ;ПРОЦЕДУРЫ, КОТОРЫЕ РЕАЛИЗУЮТ ОСНОВНОЙ АЛГОРИТМ
— INCLUDE — ;ПРОЦЕДУРЫ ПЕРЕВЕДЕНИЯ ДАТ В КОЛИЧЕСТВО ДНЕЙ
— INCLUDE — ;ВЫЧИТАНИЕ
— INCLUDE — ;УМНОЖЕНИЯ
;———-СТРУКТУРНЫЕ ЭЛЕМЕНТЫ——————
ENDPROG — GOTO — $
— END
Вывод
В данной лабораторной работе были приобретены навыки программирования на языке PICAssembler и определенные знания в области использования IDE MPLAB. Результатом данной работы является программы, которая подсчитывает количество прожитых дней.