- •Отчёт по лабораторной работе
- •Цель работы:
- •Программа работы:
- •Теоретические сведения:
- •Выполнение заданий
- •Вывод на экран жки двухстрочного текста
- •Опрос клавиатуры
- •Определение номера нажатой клавиши
- •Вывод на экран жки номера нажатой клавиши
- •Аналого-цифровое преобразование
- •Аналого-цифровое преобразование и демонстрация скорости обработки изменяющегося сигнала
Выполнение заданий
Вывод на экран жки двухстрочного текста
По заданию необходимо вывести на экран ЖКИ текст:
Microcontrollers2011
Бойцев и Скирёв
Схема программы:
Рис.6. Схема программы
Текст программы:
org 8400h
w1: equ 20h
w0: equ 21h
indic: mov w1,#0 ; Подготовка к вводу команд (R/S=0)
mov w0,#38h ; Установка 8-битного режима обмена с ЖКИ с выводом обеих строк
lcall ind_wr
mov w0,#0Ch ; Отображение экрана без курсоров
lcall ind_wr
mov w0,#80h ; Загрузка в счетчик АС адреса нулевой ячейки 1-й строки памяти ЖКИ
lcall ind_wr
mov w1,#1 ; Подготовка к вводу данных (R/S=1)
mov dptr,#FFD0h : Адрес внешней памяти, где хранится выводимые строки
wr_str1: movx a,@dptr
mov w0,a
lcall ind_wr ; Запись данных в ЖКИ
inc dptr
mov a,dpl
cjne a,#0E4h,wr_str1 ; проверка окончания 1-й строки
mov w1,#0
mov w0,#C0h ; Команда для адресации 1-й ячейки второй строки
lcall ind_wr
mov w1,#1 ; Подготовка к вводу данных
wr_str2: movx a,@dptr
mov w0,a
lcall ind_wr
inc dptr
mov a,dpl
cjne a,#0F8h,wr_str2
ret
ind_wr: mov F8h,w0 ; Загрузка в порт P5 записываемой в ЖКИ информации
setb p1.7 ; Установка сигнала E
clr p1.6 ; R/W=0 (запись)
mov a,w1 ; формируем R/S
mov c,acc.0
mov p1.4,c ;Установка R/S
lcall delay
clr p1.7 ; Сброс сигнала E
lcall delay
setb p1.7 ; Установка сигнала E
ret
delay: nop
nop
nop
nop
nop
nop
nop
nop
ret
org FFD0h
str1: db 'Microcontrollers2011'
str2: db 20h, 20h, A0h, EFh, A6h, E5h, 65h, B3h, 20h, B8h, 20h, 43h, BAh, B8h, 70h, A2h, B3h, 20h, 20h, 20h
Описание программы:
В данной программе происходит взаимодействие с ЖКИ. С помощью сигнала R/S определяется режим взаимодействия с ЖКИ (посылка команды или посылка данных). Отображение надписи на ЖКИ осуществляется посимвольно. Программа подключается к выделенному участку внешней памяти. В результате, начиная с адреса FFD0h, в памяти выделяется 40 ячеек, под видеобуфер, в который помещаются НЕХ-коды символов, которые необходимо вывести на экран. Затем из этого буфера данные пересылаются в ЖКИ.
Использование оператора org FFD0h является нежелательным, поскольку есть риск возникновения конфликта ресурсов и программа может оказаться нерабочей. Для решения такой проблемы следует переместить объявление str1 и str2 до оператора ret.
Для вывода символов на экран ЖКИ используются HEX-коды. Их значения для латинского алфавита, десятичных цифр и знаков препинания совпадают с их ASCII-кодами. Однако, это не выполняется для букв русского алфавита, поэтому для вывода наших фамилий на русском языке необходимо указывать HEX-коды.
HEX-коды для надписи «Бойцев и Скирёв»: 20h, 20h, A0h, EFh, A6h, E5h, 65h, B3h, 20h, B8h, 20h, 43h, BAh, B8h, 70h, A2h, B3h, 20h, 20h, 20h.
В итоге на экране ЖКИ отображается текст, занесённый во внешнюю память.
Опрос клавиатуры
По заданию необходимо разработать программу, реализующую опрос клавиатуры и запись кодов состояний клавиш в ячейки памяти с адресами 30h..33h (карты памяти клавиатуры).
Вход клавиатуры: выводы P4.3 – P4.0
Выход клавиатуры: выводы P4.7 – P4.4
Схема программы:
Рис.7. Схема программы
Текст программы:
org 8100h
p4: equ 0E8h
klav: mov r0,#30h ; инициализация карты памяти клавиатуры
mov p4,#f7h
orl p4, #F0h ; настройка порта P4 на вход
mov a,#F7h ; загрузка "бегущего нуля"
; Циклическое сканирование клавиатуры
m1: mov p4,a
mov r2,a
mov a,p4 ; чтение состояния клавиатуры
anl a,#F0h ; получение выходного кода
mov @r0,a ; заполнение карты памяти
inc r0
mov a,r2
rr a ; формирование следующего значения "бегущего нуля"
cjne a,#7fh,m1 ; продолжение опроса в цикле, если сканирование не завершено
ret
Описание программы:
Порт P4 одновременно используется для ввода и вывода информации с клавиатуры.
В начале программы происходит настройка порта. На вход загружается код «бегущего нуля», а на выход «1111» (не нажата ни одна клавиша). Входные воздействия и выходная реакция при нажатии на клавиши показаны в таблице №1.
Затем в цикле происходит считывание состояния клавиатуры с порта. В разрядах 7 – 4 записан выходной код, определяющий столбец нажатой клавиши. Далее происходит заполнение карты памяти.
Карта памяти полностью описывает состояние клавиатуры. Она состоит из четырех ячеек памяти, в каждой из которых хранится информация о соответствующей строке клавиатуры (30h – первая строка, 33h – четвертая строка). Младшие четыре разряда в ячейках памяти всегда нули – эти разряды не хранят в себе никакой информации. Все информация о состоянии столбца хранится в старших четырех разрядах ячейки.
Были проверены состояния карты памяти клавиатуры для каждой из кнопок.
Результаты:
Таблица 3
№ клавиши |
Состояние карты памяти |
|||
30h |
31h |
32h |
33h |
|
ничего не нажато |
30h |
31h |
32h |
33h |
1 |
70 |
F0 |
F0 |
F0 |
2 |
B0 |
F0 |
F0 |
F0 |
3 |
D0 |
F0 |
F0 |
F0 |
4 |
E0 |
F0 |
F0 |
F0 |
5 |
F0 |
70 |
F0 |
F0 |
6 |
F0 |
B0 |
F0 |
F0 |
7 |
F0 |
D0 |
F0 |
F0 |
8 |
F0 |
E0 |
F0 |
F0 |
9 |
F0 |
F0 |
70 |
F0 |
10 |
F0 |
F0 |
B0 |
F0 |
11 |
F0 |
F0 |
D0 |
F0 |
12 |
F0 |
F0 |
E0 |
F0 |
13 |
F0 |
F0 |
F0 |
70 |
14 |
F0 |
F0 |
F0 |
B0 |
15 |
F0 |
F0 |
F0 |
D0 |
16 |
F0 |
F0 |
F0 |
E0 |
3 и 6 |
F0 |
F0 |
F0 |
F0 |