Лабораторные работы 1-5-Драгунов (538456), страница 3
Текст из файла (страница 3)
movf 0x03,0,1
call LCD_HEX
movf 0x04,w,1
call LCD_HEX
movf 0x05,0,1
call LCD_HEX
movf 0x06,0,1
call LCD_HEX
movf 0x07,0,1
call LCD_HEX
;*********вычисление среднего значения из массива чисел *********
movlw 40 ; Установка начальной позиции 1 строчки дисплея
call LCD_SET ; Переход к п/п установки пизиции вывода на ЖКИ
lfsr FSR0 ,0x100 ; начальный адрес массива
movlw 08h ; размер массива чисел - 08
movwf reg0 ; счетчик массива - reg0
incf reg0,f ; добавка 1 ,так как декремент в нач цикла
clrf reg3 ; очистка старшего байта сумматора
clrf reg2 ; очистка младшего байта сумматора
;
summa dcfsnz reg0,f
goto konec
movf POSTINC0,w
call LCD_HEX ;proba
movf INDF0,w ;proba
addwf reg2,f
bnc noc
incf reg3
noc goto summa
konec bcf STATUS,0,0
rrcf reg3,1
rrcf reg2,1
bcf STATUS,0,0
rrcf reg3,1
rrcf reg2,1
bcf STATUS,0,0
rrcf reg3,1
rrcf reg2,1
movlw 40h ; Установка начальной позиции 2 строчки дисплея
call LCD_SET ; Переход к п/п установки пизиции вывода на ЖКИ
movlw 'S' ; Загрузка символов
call LCD_DATA ; Вывод символов на ЖКИ,
movlw 'R'
call LCD_DATA
movlw ' '
call LCD_DATA
movlw 'Z'
call LCD_DATA
movlw 'N'
call LCD_DATA
movlw '-'
call LCD_DATA
movf reg3,0
call LCD_HEX
movf reg2,0
call LCD_HEX
;*********************Ввод символов с клавиатуры******************
goto $-2
end
Варианты заданий к лабораторной работе
№ Варианта | Коды клавиш | |
1 | A,В,С,D ,E, F,10,11 | 12,13,14,15,16,17,30,31 |
2 | 18,19,1A,1B,1C,1D,32,33 | 1E,1F,20,21,22,23,34,35 |
3 | 24,25,26,27,28,29,A,B, | 2A,2B,2C,2D,2E,2F,13,14 |
4 | 32,33,50,51,52,53,54,55 | 56,57,58,59,5A,5B,5C,5D |
5 | 5E,5F,60,61,62,63,64,65 | 66,67,68,69,6A,6В,6С,6D |
6 | 6E,6F,70,71,72,73,74,75 | 76,77,78,79,7A,7B,7C,7D |
7 | 7E,7F,80,81,82,83,84,85 | 86, 87, 88, 89, 8A, 8B, 8C, 8D |
8 | 90,91,92,93,94,95,96,97 | 9A,9B,9C,9D,9E,9F,A0,A1 |
9 | A2,A4,A3,A5,A6,A7,A8,A9 | A,В,С,D ,E, F,10,11 |
10 | 12,13,14,15,16,17,30,31 | 18,19,1A,1B,1C,1D,32,33 |
11 | 1E,1F,20,21,22,23,34,35 | A,В,С,D ,E, F,10,11 |
12 | 2A,2B,2C,2D,2E,2F,13,14 | 18,19,1A,1B,1C,1D,32,33 |
13 | 56,57,58,59,5A,5B,5C,5D | 24,25,26,27,28,29,A,B, |
14 | 66,67,68,69,6A,6В,6С,6D | 32,33,50,51,52,53,54,55 |
15 | 76,77,78,79,7A,7B,7C,7D | 5E,5F,60,61,62,63,64,65 |
16 | 86, 87, 88, 89, 8A, 8B, 8C, 8D | 6E,6F,70,71,72,73,74,75 |
17 | 9A,9B,9C,9D,9E,9F,A0,A1 | 7E,7F,80,81,82,83,84,85 |
18 | A,В,С,D ,E, F,10,11 | 90,91,92,93,94,95,96,97 |
19 | 18,19,1A,1B,1C,1D,32,33 | A2,A4,A3,A5,A6,A7,A8,A9 |
20 | 66,55,5E,71,70,6D,A2,A | B,C,9A,7E,A9,18,19,1E |
21 | 81,82,83,84,85,2A,2B,2C | 18,19,1A,1B, 5A,5B,5C,5D |
22 | E, F,10,11,E, F,10,11 | 5A,5B,5C,5D,59,5A,5B,5C |
23 | 16,17,30,31, 8A, 8B, 8C, 8D | 62,63,64,65,7A,7B,7C,7D |
24 | 9A,9B,9C,9D,9E,9F,A0,A1 | A2,A4,A3,A5,A6,A7,A8,A9 |
25 | 7E,7F,80,81, A,В,С,D | 76,77,78,79,7A,7B,7C,7D |
26 | 24,25,26,27,28,29,A,B, | 9A,9B,9C,9D,9E,9F,A0,A1 |
Для получения оценки удовлетворительно нужно выполнить лабораторную работу взяв 8 чисел из первой колонки, для получения оценки хорошо необходимо изменить программу для обработки 16 чисел, для получения оценки отлично необходимо изменить программу для расчета среднего значения 32 чисел (при этом 16 чисел необходимо взять из последующего варианта)
В отчёт по данной лабораторной работе включается:
-
Краткая теоретическая часть
-
Исходный текст программы
-
Вручную рассчитанный результат, исходя из задания к каждому варианту.
Контрольные вопросы:
-
Можно ли в этой программе использовать системный регистр FSR1 и если да, то какие изменения необходимо внести в исходный текст программы.?
-
Можно ли заменить метку OK1 на метку DA1, и если да, то какие изменения необходимо внести в исходный текст программы.?
-
Объясните назначение команды bn vvod
-
Объясните назначение команды sublw 0х2F, и как по другому можно записать эту команду.
-
Объясните назначение команды bcf STATUS,0,0
Лабораторная работа №4
Изучение программы перевода чисел из шестнадцатеричной системы счисления в десятичную.
Цель работы:
Изучение программы и основных команд, по переводу чисел из различных систем счисления, на примере перевода шестнадцатеричных чисел в десятичные
Краткая теоретическая часть
Для перевода числа из одной системы счисления в другую необходимо производить многократное деление на число, соответствующее основанию той системы, в которую мы переводим. В нашем случае производится перевод из двоичной системы, в которой работает микроконтроллер, в десятичную, поэтому надо делить на 10.
Для анализа результатов двоичных вычислений компьютера широко используют шестнадцатеричную систему, которая более понятна человеку. Перевод из двоичной системы в шестнадцатеричную осуществляется весьма просто, т.к. одна шестнадцатеричная цифра заменяет 4 двоичных в соответствии с таблицей.
Hex | Bin | |||||
0 | 0000 | |||||
1 | 0001 | |||||
2 | 0010 | |||||
3 | 0011 | |||||
4 | 0100 | |||||
5 | 0101 | |||||
6 | 0110 | |||||
7 | 0111 | |||||
Hex | Bin |
8 | 1000 |
9 | 1001 |
A | 1010 |
B | 1011 |
C | 1100 |
D | 1101 |
E | 1110 |
F | 1111 |
Таким образом микроконтроллер работает в двоичной системе счисления, а результаты его работы человек рассматривает в шестнадцатеричной системе счисления. Исходные значения также обычно вводятся в шестнадцатеричной или десятичной системе счисления и переводятся в двоичную для дальнейшей обработки.
Для того чтобы зафиксировать результат в десятичной системе исчисления помимо результата деления фиксируется и остаток деления. А процесс деления продолжают до тех пор, пока последний результат деления станет меньше 10.
Искомое число в десятичной системе получают приписывая к последнему результату деления все остатки от последнего до первого.
Поскольку команда деления отсутствует, то можно воспользоваться приёмом умножения и затем деления на число кратное 2n .
Дело в том, что для того чтобы разделить на 2 регистр сдвигается на 1 разряд вправо, для того чтобы разделить на 4 регистр сдвигается на 2 разряда вправо, для того чтобы разделить на 8 регистр сдвигается на 3 разряда вправо и т.д.
Команда умножения сохраняет результат умножения в двух регистрах: старший PRODH и младший PRODL.Поэтому совсем просто произвести на 28, для этого достаточно отбросить и не рассматривать содержимое регистра PRODL. Однако на практике было установлено, что правильный результат получается при делении на 211, поэтому регистр PRODL не рассматривается , а содержимое регистра PRODH сдвигается на 3 разряда вправо, а умножать в этом случае надо на шестнадцатеричное число CD.Таким образом удаётся избавиться от команды деления на 10.
Текст программы
LIST P=18F452, F=INHX32
#include <P18F452S.INC>
; программа перевода двоичных чисел в двоично-десятичную
; /систему счисления версия Драгунова С.С.
xxh equ 100h ; шестнадцатиричное число
rdel1 equ 101h ; 1-й результат деления
xxdh equ 102h ; старшая цифра десятичного числа
reg equ 103h ; для нахождения остатка (вспомогательный регистр)
cif0 equ 104h ; нулевой разряд десятичного числа
cif1 equ 105h ; первый разряд десятичного числа
org 100h
movlb 0x01
clrf xxh