Исходный текст программы. org 100h ; Переход на адрес 100h

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

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

Варианты заданий к лабораторной работе

№ Варианта Коды клавиш
  A,В,С,D,E, F,10,11 12,13,14,15,16,17,30,31
  18,19,1A,1B,1C,1D,32,33 1E,1F,20,21,22,23,34,35
  24,25,26,27,28,29,A,B, 2A,2B,2C,2D,2E,2F,13,14
  32,33,50,51,52,53,54,55 56,57,58,59,5A,5B,5C,5D
  5E,5F,60,61,62,63,64,65 66,67,68,69,6A,6В,6С,6D
  6E,6F,70,71,72,73,74,75 76,77,78,79,7A,7B,7C,7D
  7E,7F,80,81,82,83,84,85 86, 87, 88, 89, 8A, 8B, 8C, 8D
  90,91,92,93,94,95,96,97 9A,9B,9C,9D,9E,9F,A0,A1
  A2,A4,A3,A5,A6,A7,A8,A9 A,В,С,D,E, F,10,11
  12,13,14,15,16,17,30,31 18,19,1A,1B,1C,1D,32,33
  1E,1F,20,21,22,23,34,35 A,В,С,D,E, F,10,11
  2A,2B,2C,2D,2E,2F,13,14 18,19,1A,1B,1C,1D,32,33
  56,57,58,59,5A,5B,5C,5D 24,25,26,27,28,29,A,B,
  66,67,68,69,6A,6В,6С,6D 32,33,50,51,52,53,54,55
  76,77,78,79,7A,7B,7C,7D 5E,5F,60,61,62,63,64,65
  86, 87, 88, 89, 8A, 8B, 8C, 8D 6E,6F,70,71,72,73,74,75
  9A,9B,9C,9D,9E,9F,A0,A1 7E,7F,80,81,82,83,84,85
  A,В,С,D,E, F,10,11 90,91,92,93,94,95,96,97
  18,19,1A,1B,1C,1D,32,33 A2,A4,A3,A5,A6,A7,A8,A9
  66,55,5E,71,70,6D,A2,A B,C,9A,7E,A9,18,19,1E
  81,82,83,84,85,2A,2B,2C 18,19,1A,1B, 5A,5B,5C,5D
  E, F,10,11,E, F,10,11 5A,5B,5C,5D,59,5A,5B,5C
  16,17,30,31, 8A, 8B, 8C, 8D 62,63,64,65,7A,7B,7C,7D
  9A,9B,9C,9D,9E,9F,A0,A1 A2,A4,A3,A5,A6,A7,A8,A9
  7E,7F,80,81, A,В,С,D 76,77,78,79,7A,7B,7C,7D
  24,25,26,27,28,29,A,B, 9A,9B,9C,9D,9E,9F,A0,A1

Для получения оценки удовлетворительно нужновыполнить лабораторную работу взяв 8 чисел из первой колонки, для получения оценки хорошо необходимо изменить программу для обработки 16 чисел, для получения оценки отлично необходимо изменить программу для расчета среднего значения 32 чисел (при этом 16 чисел необходимо взять из последующего варианта)

В отчёт по данной лабораторной работе включается:

1. Краткая теоретическая часть

2. Исходный текст программы

3. Вручную рассчитанный результат, исходя из задания к каждому варианту.

Контрольные вопросы:

1. Можно ли в этой программе использовать системный регистр FSR1 и если да, то какие изменения необходимо внести в исходный текст программы.?

2. Можно ли заменить метку OK1 на метку DA1, и если да, то какие изменения необходимо внести в исходный текст программы.?

3. Объясните назначение команды bn vvod

4. Объясните назначение команды sublw 0х2F, и как по другому можно записать эту команду.

5. Объясните назначение команды bcf STATUS,0,0


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: