Лабораторные работы 1-5-Драгунов (538456), страница 2
Текст из файла (страница 2)
call LCD_DATA
movlw 'L'
call LCD_DATA
movlw 'A'
call LCD_DATA
movlw 'G'
call LCD_DATA
movlw '='
call LCD_DATA
movf reg3,w,1 ; вызвать код первой клавиши из 80h в W
call LCD_HEX
desk call RX_KEY
call LCD_DATA
goto desk
end
Пример выполнения лабораторной работы
Для примера возьмём 4 клавиши : 4, r, f, w
Заполним таблицу 1,где : 1 колонка- все возможные комбинации клавиш( для 4 клавиш 16 значений)
2 колонка – показание прибора
3 колонка – status
Таблица 1
Клавиши | Показание прибора | Status |
4-r | 34-52=E2 | 12 |
r-4 | 52-34=1E | 01 |
4-f | 34-46=EE | 10 |
f-4 | 46-34=12 | 03 |
4-w | 34-57=DD | 10 |
w-4 | 57-34=DD | 03 |
r-f | 52-46=OC | 01 |
f-r | 46-52=F4 | 12 |
f-w | 46-57=EF | 10 |
w-f | 57-46=11 | 03 |
r-w | 52-57=FB | 10 |
w-r | 57-52=05 | 03 |
4-4 | 34-34=00 | 07 |
r-r | 52-52=00 | 07 |
f-f | 46-46=00 | 07 |
w-w | 57-57=00 | 07 |
Варианты заданий к лабораторной работе
№ Варианта | 1 клавиша | 2 клавиша | 3 клавиша | 4 клавиша |
1 | 1 | a | v | x |
2 | n | 2 | s | b |
3 | z | x | 3 | d |
4 | m | t | f | 4 |
5 | c | g | 5 | q |
6 | h | 6 | n | d |
7 | 7 | 0 | z | q |
8 | v | 8 | l | b |
9 | v | j | 9 | d |
10 | x | a | c | 0 |
11 | f | k | - | l |
12 | l | = | r | t |
13 | \ | a | / | x |
14 | x | q | j | y |
15 | z | o | w | p |
16 | p | c | d | e |
17 | 3 | ; | r | 0 |
18 | 6 | t | f | 9 |
19 | y | u | k | d |
20 | q | u | z | b |
21 | y | 6 | i | o |
22 | n | a | h | g |
23 | a | p | o | h |
24 | , | [ | j | . |
25 | ] | k | x | n |
26 | q | j | k | c |
В отчёт по данной лабораторной работе включается:
-
Краткая теоретическая часть
-
Исходный текст программы
-
Проверка (ручной пересчёт всех возможных комбинаций)
Контрольные вопросы:
-
Объясните назначение флагов N, C, DC, Z
-
Объясните ,что означают буквы mov,буква L, буква W и reg0 после пробела , в команде movlw_reg0
-
Объясните назначение символа “ ; ”, и можно ли не писать в тексте программы слова, которые стоят после этого знака.
-
Какая информация появится в WREG после выполнения команды movlw '='?
-
Каким образом воздействует на регистр WREG команда movf STATUS,w,0?
Лабораторная работа №3
Определения среднего значения из n-чисел
В данной лабораторной работе студент должен изучить программу, позволяющую находить среднее значении ASCII - кода из нескольких приведённых (в соответствии с заданием).
Рис 3 .Алгоритм анализа.
В двоичной системе деление на 2 производится сдвигом информации на 1 бит вправо, при делении на 4 производится сдвиг на 2 разряда, при делении на 8 на 3 разряда.
При сдвиге вправо нулевой бит помещается во флаг “c” ,а в 7 бит помещается предыдущее состояние флага “c”
Важным моментом этой программы является анализ ASCII - кодов нажимаемых клавиш. “Правильные” коды соответствуют клавишам 0-9 а так же клавишам A,B,C,D,E,F. Ошибочно нажатые клавиши должны игнорироваться. Алгоритм этого анализа показан на Рис. 3.
Другим важным моментом этой программы является использование команд с косвенным способом адресации. В команде с косвенным способом адресации в качестве операнда выступает нефизический регистр, который производит отсылку к одному из специальных системных регистров FSR0, FSR1, FSR2. В этих регистрах изначально записывается начальный адрес, какого – либо массива чисел.
Использование в командах с косвенным способом адресации нефизического регистра POSTINC0, POSTINC1, POSTINC2, помимо отсылки к соответствующим системным регистрам FSR , производит увеличение их содержимого на 1, благодаря чему при следующем выполнении команды будет выбран следующий элемент массива.
Исходный текст программы
LIST P=18F452, F=INHX32
#include <P18F452S.INC>
org 100h ; Переход на адрес 100h
; Инициализация системы
reg0 equ 080h ; размер массива чисел
reg1 equ 081h
reg2 equ 082h
reg3 equ 083h
reg4 equ 084h
reg5 equ 085h
start ;Старт программы
movlw 36h
movwf reg4
movlw 2Fh
movwf reg5
;**************Ввод чисел******************************
movlw 0 ; Установка начальной позиции 1 строчки дисплея
call LCD_SET ; Переход к п/п установки позиции вывода на ЖКИ
movlw 'V' ; Загрузка символов
call LCD_DATA ; Вывод символов на ЖКИ,
movlw 'V'
call LCD_DATA
movlw 'O'
call LCD_DATA
movlw 'D'
call LCD_DATA
lfsr FSR0,0x100 ; начальный адрес массива
movlw 08h ; размер массива чисел - 08
movwf reg0 ; счетчик массива - reg0
vvod movlw 4 ; Установка начальной позиции 1 строчки дисплея
call LCD_SET ; Переход к п/п установки позиции вывода на ЖКИ
call RX_KEY ; чтение кода старшей цифры
movwf reg2
call LCD_HEX
movf reg2,w
sublw 0x46 ; 46-W<0 ,то повтор ввода
bn vvod
movf reg2,w
sublw 0x40 ; 41-W<0 ,то OKEY
bn ok1
movf reg2,w
sublw 0x39 ; 39-W<0 ,то повтор ввода
bn vvod
movf reg2,w
sublw 0x2F ; 2F-W<0 ,то OKEY
bn ok2
goto vvod ; если W<30 ,то повтор ввода
ok1 movf reg2,w
bcf STATUS,0,0
subfwb reg4,w ; (0x41...0x46) - 0x36
goto ok3
ok2 movf reg2,w
bcf STATUS,0,0
subfwb reg5,w ; (0x30...0x39) - 0x30
ok3 movwf reg1 ; биты <3-0> сохранить в reg1
swapf reg1,f ; поменять местами биты <3-0> <7-4>
vvod movlw 6 ; Установка начальной позиции 1 строчки
;дисплея
call LCD_SET ; Переход к п/п установки позиции вывода на ЖКИ
call RX_KEY ; чтение кода старшей цифры
movwf reg2
call LCD_HEX
movf reg2,w
sublw 0x46 ; 46-W<0 ,то повтор ввода
bn vvo
movf reg2,w
sublw 0x40 ; 41-W<0 ,то OKEY
bn ok4
movf reg2,w
sublw 0x39 ; 39-W<0 ,то повтор ввода
bn vvo
movf reg2,w
sublw 0x2F ; 30-W<0 ,то OKEY
bn ok5
goto vvo ; если W>46 ,то повтор ввода
ok4 movf reg2,w
bcf STATUS,0,0
subfwb reg4,w ; (0x41...0x46) - 0x36
goto ok6
ok5 movf reg2,w
bcf STATUS,0,0
subfwb reg5,w ; (0x30...0x39) - 0x30
ok6 iorwf reg1,w ; в одном байте две цифры - число
movwf POSTINC0 ; записать число в массив
decfsz reg0,f ; уменьшить счетчик на 1
goto vvod ; конец цикла ввода
movlw 0 ; Установка начальной позиции 1 строчки дисплея
call LCD_SET ; Переход к п/п установки пизиции вывода на ЖКИ
movlb 01
movf 0x00,w,1
call LCD_HEX
movf 0x01,0,1
call LCD_HEX
movf 0x02,0,1
call LCD_HEX