Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

5

.2.pdf
Скачиваний:
11
Добавлен:
16.04.2015
Размер:
479.98 Кб
Скачать

1.

Цель работы:

знакомство с организацией взаимодействия МК с внешними устройствами (цифровыми и

 

аналоговыми), подключаемыми с помощью портов МК;

овладение приемами программирования периферийных устройств, входящих в состав

 

лабораторного стенда.

2.

Программа работы:

Реализовать структуры информационных связей МК с периферийными устройствами в соответствии с заданным вариантом, а так же:

Разработать и выполнить программу, выводящую на ЖКИ двухстрочного текста

Разработать и выполнить программу, реализующую опрос клавиатуры и запись кодов состояния клавиш в ячейки памяти с адресами 30h…33h

Модифицировать программу «опрос клавиатуры», дополнив ее модулем определения номера нажатой клавиши.

Разработать программу, выводящую на ЖКИ номер нажатой клавиши.

Разработать и выполнить программу реализующую вывод на ЖКИ цифровых кодов (эквивалентов) аналоговых сигналов от двух источников.

На основе предыдущей программы разработать программу, выводящую на ЖКИ не только

цифровые эквиваленты аналоговых сигналов, но и скорость изменения сигналов. Вариант задания №4:

ЭЙ, ЁПТА, ВСТАВИТЬ КАРТИНКУ!!!!!!!!!!!!

3.Теоретические сведения:

Входе данном цикле работ исследуются портами микроконтроллера, а так же исследуется работа аналогоцифрового преобразователя, встроенного в микроконтроллер.

У микроконтроллера SAB 80C515 имеется 6 двунаправленных портов ввода-вывода параллельной информации P0-P5. Все эти порты 8-ми разрядные. Порты используются для обмена информацией с внешними устройствами, каждый из них можно по отдельности настроить на вход или на выход. Причем каждый из выводов каждого из портов можно отдельно настроить на ввод или на вывод. Так же у микроконтроллера имеется седьмой порт P6, который используется для ввода в микроконтроллер аналоговой информации для АЦП.

Помимо прочего порты P0-P3 могут использоваться для реализации специальных функций. Порты P0 и P2 могут использоваться для подключения к микроконтроллеру внешней памяти. Порт P0 может использоваться либо в качестве 8-мибитной шины данных, либо для задания младшего байта адреса внешней памяти. Порт P3 может использоваться для задания старшего байта адреса внешней памяти.

Порты P1 и P3 могут использоваться при работе последовательного порта. Кроме того они могут использоваться как выводы для подключения источников внешний прерываний. Так же выводы порта P1 могут использоваться для организации линий быстрого ввода-вывода.

В микроконтроллере SAB 80C515 имеется встроенный аналого-цифровой преобразователь. В зависимости от инициализации АЦП можно преобразовывать аналоговые сигналы с 8-ми различных выводов порта P6. АЦП позволяет преобразовывать входные аналоговые сигналы в диапазоне от 0 до 5В в восьмиразрядный двоичный код с точностью от 5 до 20мВ. В зависимости от априорной информации о диапазоне изменения входного аналогового сигнала можно задавать различные диапазоны преобразования для АЦП, что позволяет увеличить точность преобразования.

Кроме встроенных в микроконтроллер периферийных устройств в данной работе используются и внешние периферийные устройства: 16-тикнопочная клавиатуры, жидкокристаллический индикатор на 2 строки по 20 символов, так же используются два источника аналоговых сигналов: потенциометр и интегратор прямоугольных импульсов.

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

Для управления ЖКИ используется восьмиразрядная шина, по которой могут передаваться как управляющие команды, так и данные, которые отображаются на экране. Для управления ЖКИ используются три линии управления: E, RS и RW. Линия E используется для стробирования и синхронизации. Сигнал RS

используется для указания, что передается в ЖКИ: команда или данные. RW указывает на направление передачи: из микроконтроллера в ЖКИ или наоборот.

Принципиальная схема и схема соединений:

Рис.. Схема соединений.

4.Выполнение заданий

4.1.Вывод на экран ЖКИ двухстрочного текста

По заданию необходимо вывести на экран ЖКИ текст:

Microcontrollers2011

Бойцев и Скирёв

 

 

Рис.. Схема программы

Текст программы:

 

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.

В итоге на экране ЖКИ отображается текст, занесённый во внешнюю память.

4.2. Опрос клавиатуры

По заданию необходимо разработать программу, реализующую опрос клавиатуры и запись кодов состояний клавиш в ячейки памяти с адресами 30h..33h (карты памяти клавиатуры).

Вход клавиатуры: выводы P4.3 – P4.0

Выход клавиатуры: выводы P4.7 – P4.4

Схема программы:

 

 

Рис.. Схема программы

Текст программы:

 

 

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» (не нажата ни одна клавиша). Входные воздействия и выходная реакция при нажатии на клавиши показаны в таблице №.

Затем в цикле происходит считывание состояния клавиатуры с порта. В разрядах 7 – 4 записан выходной код, определяющий столбец нажатой клавиши. Далее происходит заполнение карты памяти.

Карта памяти полностью описывает состояние клавиатуры. Она состоит из четырех ячеек памяти, в каждой из которых хранится информация о соответствующей строке клавиатуры (30h – первая строка, 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

 

 

 

 

 

 

 

не нажата

F0

 

F0

F0

 

F0

ни одна

 

 

 

 

 

 

 

 

4.3. Определение номера нажатой клавиши

По заданию необходимо модифицировать программу «опроса клавиатуры», дополнив ее модулем формирующим номер нажатой клавиши.

Номер нажатой клавиши сохраняться в ячейке памяти 34h.

В случае если не нажата ни одна из клавиш, в ячейку записывается число 00h, а если нажато больше одной клавиши, то записывается число FFh.

Рис.. Схема программы

Текст программы:

org 8400h

include asms\4081_4\Bs\5.2\2.asm

 

mov r1, #34h

; выходное состояние клавиатуры

 

mov r0, #30h

; карта памяти клавиатуры

 

; определние нажатой клавиши

cols:

cjne @r0, #70h, cols1

; клавиша нажата из крайнего левого столбца?

 

mov a,#01h

 

 

jmp end

 

cols1:

cjne @r0, #b0h, cols2

; клавиша нажата из среднего левого столбца?

 

mov a,#02h

 

 

jmp end

 

cols2:

cjne @r0, #d0h, cols3

; клавиша нажата из среднего правого столбца?

 

mov a,#03h

 

 

jmp end

 

cols3:

cjne @r0, #e0h, cols0

; клавиша нажата из правого столбца?

 

mov a,#04h

 

 

jmp end

 

end:

mov r3,a

; сохранение номера столбца

 

mov a,r0

 

 

subb a,#30h

; получение номера строки

 

rl a

 

 

rl a

; домножаем на 4

 

add a,r3

; прибавление номера столбца

 

mov @r1, a

; запись номера клавиши

 

ret

 

cols0:

cjne @r0, #f0h,colsF

; клавиша не нажата

n1:

inc r0

 

 

cjne r0,#34h,cols

; если опрос не закончен, то переходим в его начало

 

mov a,#00h

 

 

mov @r1, a

 

 

jmp endend

 

colsF:

mov a,#ffh

; нажато несколько клавиш

 

mov @r1, a

 

endend: ret

Описание программы:

Программа 2.asm реализует опрос клавиатуры и формирует карту памяти, которую записывает в ячейки 30h..33h. Эту программа подключается к модулю формирования номера нажатой клавиши.

Далее в цикле и условных переходах определяется номер столбца, в котором была нажата клавиша (не нажата ни одна, нажато несколько).

Зная номер столбца и номер строки определяется номер нажатой клавиши по формуле:

Номер = Номер строки * 4 + Номер столбца

В ходе тестирования программы были проверены случаи нажатия одной клавиши, двух клавиш, а так же случай когда не было нажато ни одной из клавиш.

Результаты выполнения программ наблюдались в «Окне памяти» в ячейке 34h.

Из приведённых ниже рисунков (рисунки 5 – 7) видно, что программа работает корректно.

Вариант 1. Не нажато ни одной клавиши

Рис.. На клавиатуре нажато ни одной клавиши.

Вариант 2. Нажата четвёртая клавиша:

Рис.6. Нажата четвёртая клавиша. Вариант 3. Нажато две клавиши (третья и седьмая):

Рис.. Нажаты две клавиши.

4.4. Вывод на экран ЖКИ номера нажатой клавиши

Необходимо дополнить программу из предыдущего задания модулем, выводящим на экран ЖКИ номер нажатой клавиши. Для непосредственного отображения текста на экране нужно использовать программу из первого задания.

Для вывода на экран номера нажатой клавиши следует преобразовать её номер в HEX-код. В результате выполнения программы на экране ЖКИ будет отображена следующая надпись:

Number of button Nx где Nx – номер нажатой клавиши.

Рис.. Схема программы klav_jki_main

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]