Хелпикс

Главная

Контакты

Случайная статья





«Программирование периферийных устройств, доступных через регистры ПЛИС»



 

Министерство высшего образования и науки РФ

Уральский Федеральный Университет имени первого Президента России              Б. Н. Ельцина

Кафедра “Экспериментальной физики”

 

 

Микропроцессорная техника

 

 

Отчет по лабораторной работе №1

 

«Программирование периферийных устройств, доступных через регистры ПЛИС»

 

Преподаватель: Огородников И. Н.

Студентка: Зудихина Ю. А.

Группа: Фт-450301

 

 

Екатеринбург, 2018 г.

Цель:

· Изучить технологию программирования периферийных устройств стенда SDK1. 1, доступных через регистры ПЛИС:

· Изучить особенности организации лабораторного стенда SDK1. 1;

· Изучить интегрированную среду Keil uVision 4;

· Изучить работу периферийных устройств, доступных через регистры ПЛИС.      

μ Vision4

Программы подготавливались и загружались в интегрированной среде фирмы Keil Software для микроконтроллеров семейства x51 μ Vision4.

Создание проекта:

  1. В меню выбрать “Project\New Project…”
  2. В появившемся окне обзора ввести имя проекта без разрешения латиницей без знаков пробела и препинания
  3. На вкладке “Project\Select device for target…” выбрать тип микроконтроллера “Analog devices\AduC842”
  4. На вкладке “Project\Options for target…\Output” поставить галочку «Create HEX file»
  5. На вкладке “Project\Components, Environment, Books…\Project components”выбрать команду “Add files”, в появившемся окне обзора выбрать файл с программой, ранее созданный, и нажать на кнопку “Add”

Для получения hex-файла выбрать в команде меню “Project\Build target”.

Загрузочный монитор T2

После запуска введите “opencom1” для подготовки порта COM1 к работе.

Для загрузки программы:

  1. Сбросьте стенд нажатием кнопки
  2. Введите “0x02000 0x0 addhexstart < имя файла>. hex” для добавления адреса начала в hex-файл
  3. Введите “loadhex < имя файла>. hex” для загрузки hex-файла

Для эмуляции терминала:

  1. Введите “N term” для отображения полученных байтов, где N=0 для 16 кода, N=1 для 8 кода
  2. Введите “echo < имя файла> ” для сохранения получаемых байтов в файл
  3. Введите “+echo” для включения записи в файл
  4. Введите “–echo” для отключения записи в файл

Задание 1.

 

Программа для вывода информации на линейку светодиодных индикаторов: открыть проект, набрать программу и подпрограмму PUTBYTE. Разобраться в организации программы, провести ассемблирование, получить HEX-файл.

Ниже представим код данной программы:

 

org 02000h;                  Адрес начала программы

dpp data 84h;              Адрес указателя страницы (определение)

; ---------------------------

mov a, #10011001b;    Перенос байта, отвечающего за включение светодиодов

call svdisp;                   Вызов подпрограммы svdisp

sjmp $;                 Бесконечный цикл

; ----------------------

svdisp: mov dptr, #07h;            Запись в DPTR адреса регистра светодиодов

call putbyte;                      Вызов подпрограммы putbyte

ret;                               Возврат из подпрограммы

; ----------------------

putbyte:                                   

push dpp;                         Запись dpp в стек

mov dpp, #08d;            Переход на восьмую страницу

movx @dptr, A;            Перенос А в адрес который записан в dptr

pop dpp;                       Восстановление dpp из стека

ret;                               Возврат из подпрограммы

end;                               Конец программы

После запуска программы загорелись светодиоды.

Вывод: Для работы с линейкой светодиодов служит регистр SV, каждый бит которого управляет свечением одного светодиода. Единичное значение бита соответствует свечению светодиода. Программирование светодиодных излучателей сводится к выводу байта данных в регистр SV. В данной программе реализован вывод одного байта данных на линейку. Результат выполнения программы был зафиксирован по загоревшимся светодиодам.

 


Задание 2.

Программа для вывода информации на жидкокристаллический дисплей. Изучить организацию подпрограммы PUTCHAR и технологию управления жидкокристаллическим индикатором. Открыть новый проект, набрать подпрограмму PUTCHAR, составить и набрать головную программу для вывода своего имени или фамилии на ЖК-дисплее с использованием подпрограммы PUTCHAR.

 

org 2000h;                        Адрес начала программы

dpp data 84h;                Определение адреса указателя страницы

DATA_IND xdata 01h;   Определение адреса регистра данных и управления

C_IND xdata 06h;          ЖКИ во внешней памяти

; --------------

E BIT acc. 0;         Определение 0-го бита аккумулятора как E

RW BIT acc. 1;     Определение 1-го бита аккумулятора как RW

RS BIT F0;           Определение F0 регистра признаков как RS

; -------------

clr RS;                             Установка RS=0

mov a, #11000000b;     Перенос на другую строку (11000000 – адрес указателя)

call putchar;                        Вызов putchar

; -------------

setb RS;                         Установка RS = 1

mov a, #'Z';                     Перенос m в аккумулятор

call putchar;                  Вызов putchar

mov A, #'U';

call putchar;

mov A, #'D';

call putchar;

mov A, #'I';

call putchar;

mov A, #'K';

call putchar;

mov A, #'H';

call putchar;

mov A, #'I';

call putchar;

mov A, #'N';

call putchar;

mov A, #'A';

sjmp $;                           Бесконечный цикл

; ----------------------

putchar: push psw;            Сохранение в стек регистра признаков psw

push dph;                          Сохранение в стек старший байт указателя данных

push dpl;                           Сохранение в стек младший байт указателя данных

push dpp;                          Сохранение в стек номера страницы

mov dpp, #08d;             Переход на 8ую страницу

mov dptr, #DATA_IND;    Запись адреса регистра данных в DPTR

movx @dptr, A;                Перенос аккумулятора по адресу, который нах-ся в dptr

; -----------------------------------

clr RW;                             Установка RW=0

mov c, RS;                         Перенос RS в бит c

mov acc. 2, c;                     Перенос бита c во 2-ой бит аккумулятора

mov dptr, #C_IND;          Перенос адреса регистра управления в dptr

clr E;                                 Установка E=0

movx @dptr, A;                Переноса аккумулятора по адресу в dptr

nop;                                  Временная задержка

setb E;                              Установка E=1

movx @dptr, A;                Переноса аккумулятора по адресу в dptr

nop;                                   Временная задержка

clr E;                                 Установка E=0

movx @dptr, A;                Переноса аккумулятора по адресу в dptr

pop dpp;                            Восстановление из стека номера страницы

pop dpl;                 Восстановление из стека младшего байта указателя данных

pop dph;                Восстановление из стека старшего байта указателя данных

pop psw;                            Восстановление из стека регистра признаков

call ttt;                                Вызов подпрограммы проверки бита занятости ttt

ret;                                Возврат из подпрограммы

end;                                    Выход из программы

 

Вывод: В данной программе реализован ввод имени во вторую строку ЖКИ типа WH1602B-YGK-CP. Данный ЖКИ содержит 32 знакоместа (по 16 - в каждом ряду). имеет встроенный знакогенератор, содержащий различные символы, цифры и буквы (латиница и кириллица). Каждый символ кодируется одним байтом. Для вывода каждого байта на ЖКИ используется подпрограмма putchar. Установка начальной позиции символов и вывод символов осуществляется путем записи данных в регистр DATA_IND с последующим формированием строба 0-1-0 на выводе E ЖКИ. Пример работы представлен на рисунке 1:

Рисунок 1 Пример работы программы

 

Задание 3.

Опрос матричной клавиатуры (п. 3. 4. 3). Открыть новый проект, набрать подпрограмму GETKEY, составить головную программу для опроса клавиатуры с помощью подпрограммы GETKEY и вывода кода нажатой клавиши на светодиодные индикаторы. Составить таблицу кодов клавиатуры.

org 2000h;                     Адрес начала программы

dpp data 84h;                   Определение адреса регистра указателя страницы

KB xdata 00h;                 Определение адреса регистра клавиатуры

; -------------

met1: call getkey;        Метка и вызов подпрограммы getkey

call svdisp;                    Вызов подпрограммы svdisp

sjmp met1;                         Переход в метку

svdisp: mov dptr, #07h;     Перенос адреса регистра светодиодов в dptr

call putbyte;                      Вызов подпрограммы putbyte

ret;                                     Возврат из подпрограммы

; -----------

putbyte:                              Подпрограмма putbyte

push dpp;                         Запись dpp в стек

mov dpp, #08d;                 Переход на восьмую страницу

movx @dptr, A;            Перенос А в адрес который записан в dptr

pop dpp;                       Восстановление dpp из стека

ret;                                    Возврат из подпрограммы

; ------------

getkey: push psw;            Сохранение psw в стек

mov psw, #0H;                   Выбор нулевого банка

push dph;                         Сохранение в стек старшего бита указателя данных

push dpl;                          Сохранение в стек младшего бита указателя данных

push 1h;                           Сохранение в стек r1

push b;                               Сохранение в стек b

push dpp;                         Сохранение в стек указателя страницы

mov dpp, #08d;                 Переход на восьмую страницу

mov dptr, #KB;                 Перенос адреса KB в dptr

mov r1, #0;                        Перенос 0 в счётчик колонок

mov b, #01111111b;         Перенос числа в b

; -------------

KB_lp: mov a, b;               Перенос b в аккумулятор

rl a;                                   Циклический сдвиг аккумулятора влево

mov b, a;                            Перенос аккумулятор в b

movx @dptr, a;     Перенос аккумулятора в адрес нах-ся в dptr (COL на KB)

movx a, @dptr;                 Перенос из адреса, нах-ся в dptr в аккумулятор

cpl a;                                 Инверсия аккумулятора

anl a, #0f0h;        Логическое И аккумулятора и 11110000b; (ROW только)

jnz kb_cod;           Переход если аккумулятор не равен нулю (нажата клавиша)

inc r1;                               Инкремент счётчика колонок

cjne r1, #4, KB_lp; Eсли r1 не равен 00000100b, то переход (так как 4 колонки)

mov a, #0ffh;                Перенос в аккумулятор числа ffh

sjmp kb_end;                     Переход на kb_end

; ------- (Формирование кода)

kb_cod: mov b, #0;           Очистка регистра b

mov c, acc. 7;                     Перенос 7-го бита аккумулятора в бит c

orl c, acc. 5;                         Лог. или 5-го бита аккумулятора с битом с

mov b. 2, c;                         Перенос бита с во второй бит регистра b

mov c, acc. 7;                     Перенос 7-го бита аккумулятора в бит c

orl c, acc. 6;                        Лог. или 6-го бита аккумулятора с битом c

mov b. 3, c;                        Перенос бита с в третий бит регистра b

mov a, b;                           Перенос байта из регистра b в аккумулятор

add a, r1;                           Сложение r1 с аккумулятором (результат в акк-ре)

; --------------------------

kb_end: pop dpp;              Восстановление из стека регистра указателя страницы

pop b;                                Восстановление из стека регистра b

pop 1h;                              Восстановление из стека 1h

pop dpl;                 Восстановление из стека младшего байта указателя данных

pop dph;                Восстановление из стека старшего байта указателя данных

pop psw;                            Восстановление из стека регистра признаков

ret;                                     Возврат из подпрограммы

end;                                    Выход из программы

 

Вывод: Клавиатура стенда SDK1. 1 имеет вид матрицы 4x4. В регистр клавиатуры KB сведены ее столбцы и строчки. Координаты клавиши можно получить, записывая номера колонок кнопок и считывая номера строк нажатых клавиш. В данной программе реализовано преобразование координат в код клавиши с последующим выводом его на линейку светодиодов.

Таблица кодов клавиш, полученных на основе данной программы, имеет вид:

Клавиша: Код: Код в двоичной системе:
00h
01h
02h
A 03h
04h
05h
06h
B 07h
08h
09h
0Ah
C 0Bh
* 0Ch
0Dh
# 0Eh
D 0Fh

Табл. 1 – Таблица кодов клавиш клавиатуры

Задание 4.

 

Звуковой излучатель. Открыть новый проект, набрать программу генерации звука и получить звук. Программно изменить громкость и высоту тона (частоту).

 

org 2000h;                        Адрес начала программы

pllcon data 07d;    Определение регистра задания частоты работы AduC842

mov pllcon, #03h;            Выбор частоты процессора f=2. 097152 MHz

dpp data 84h;                   Определение адреса указателя страницы

ena xdata 04h;                  Определение регистра ENA

buz bit acc. 4;                                Определение 4-го бита аккумулятора

; -----------------------

SOUND: mov dptr, #ena; Перенос адреса регистра ENA в dptr

mov a, #20h;                 Перенос числа 00100000b, т. к. NOT(INT0)=1

; -----------------------

loop: setb buz;                  Установка buz=1

call putbyte;                     Вызов подпрограммы putbyte

call delay;                         Вызов подпрограммы delay

clr buz;                             Установка buz=0

call putbyte;                      Вызов подпрограммы putbyte

call delay;                          Вызов подпрограммы delay

sjmp loop;                          Переход на метку loop

; ----------------

delay: mov r1, #099h;                    Перенос в регистр r1 числа 99h

djnz r1, $;                          Декремент r1 и переход, если не ноль.

ret;                                     Возврат из подпрограммы

; ---------------

putbyte:                              Подпрограммы putbyte

push dpp;                         Сохранение в стек регистра указателя страницы dpp

mov dpp, #08d;                 Переход на 8ую страницу

movx @dptr, A;                Перенос аккумулятора в ENA

pop dpp;                            Восстановление из стека регистра указателя страницы

ret;                                     Возврат из подпрограммы

end;                                   Конец программы

В процессе выполнения первоначальной программы был слышен звук определенной частоты. Для генерации звука на другой частоте было изменено время задержки в подпрограмме delay. С уменьшением времени задержки генерируемая частота колебаний увеличилась.

 

Вывод: Лабораторный стенд SDK 1. 1s имеет встроенный пьезоэлектрический звуковой излучатель, который может быть использован для звуковой индикации различных событий. На любой из трех битов регистра ENA (ENA. 2, ENA. 3, ENA. 4) подается меандр из логических уровней 0-1-0-1... с заданной частотой. Изменение количества повторов цикла меняет частоту звука, генерируемого преобразователем. Изменение частоты было зафиксировано экспериментально.

 

Задание 5.

Программирование УАПП. Набрать программу для инициализации УАПП UART_INI, набрать приведенную в пособии головную программу, принимающую байт с линии, передающую этот байт обратно в линию и на светодиодные индикаторы (эхо-печать). Изучить работу монитора T2 в режиме эмуляции терминала.

 

org 2050h;                         Адрес начала программы

dpp data 84h;                     Определение адреса регистра указателя страницы dpp

call uart_ini2;                    Подпрограмма инициализации УАПП для ADuC842

; -----------

loop: jnb scon. 0, $;            Переход, если бит scon. 0 равен 0 (Ожидание байта)

mov a, sbuf;                      Перенос байта sbuf а аккумулятор

clr scon. 0;                         Установка scon. 0 = 0

call svdisp;                       Вызов подпрограммы svdisp

; -------------

mov sbuf, a;                      Перенос байта аккумулятора в регистр sbuf

jnb scon. 1, $;                     Переход, если бит scon. 1 равен 0 (Передача байта)

clr scon. 1;                          Установка scon. 1 = 0

sjmp loop;                          Переход к метке loop

; ------------------ (842)

pllcon data 0D7h; Определение регистра задания скорости работы процессора

t3con data 09Eh;

t3fd data 09Dh;

; ------------------

uart_ini2: mov pllcon, #03h; Задние частоты работы процессора f=2. 097152  MHz

mov t3con, #83h;

mov t3fd, #2dh;

mov scon, #52h;

ret;

; --------------

svdisp: mov dptr, #07h;

call putbyte;

ret;

; ------------     

putbyte:                              Подпрограммы putbyte

push dpp;                         Сохранение в стек регистра указателя страницы dpp

mov dpp, #08d;                 Переход на 8ую страницу

movx @dptr, A;                Перенос аккумулятора в ENA

pop dpp;                            Восстановление из стека регистра указателя страницы

ret;                                     Возврат из подпрограммы

end;                                   Конец программы

 

 

Вывод: С помощью встроенного в стенд программируемого универсального асинхронного приемо-передатчика (УАПП) можно организовать эффективное взаимодействие c внешними устройствами. В данной лабораторной работе обеспечивается взаимодействие стенда SDK 1. 1 и компьютера с установленным монитором T2. Для работы с последовательным портом в первую очередь надо настроить таймер/счетчик1, а также установить значение регистра управления последовательного порта. Так как в приведенной программе прерывания не используются, то требуется их запретить. Тогда можно передавать и принимать информацию простой записью и чтением регистра sbuf. В ходе работы был изучен режим эмуляции терминала монитора Т2 и наблюдалась передача информации с компьютера на микроконтроллер и обратно в бинарном и шестнадцатеричном виде. Один из сеансов эхопечати был записан в файл и просмотрен с помощью программы Блокнот.

Блок-схемы:

№1

Начало
Адресация регистров
Ввод байта в аккумулятор
Вызов п\п putbyte
Конец

№2

Начало
Адресация регистров
Установка курсора в нижнюю строку  
Конец
Вывод байта в аккумулятор
Вызов п\п putchar
Установка битов регистра управления ЖКИ
Вывод байта в аккумулятор
Вызов п\п putchar

 

№3

 

Начало
Адресация регистров
Опрос клавиатуры п/п getkey
Нажата ли клавиша?
Ввод байта на светодиоды
Вызов п\п putbyte
Конец

 

№4

Начало
Адресация регистров
Конец
Формирование меандра из лог. уровней
Задержка

 

Начало
Адресация используемых регистров
Конец
Инициализация УАПП
Прием байта с УАПП и запись его в аккумулятор
Вывод байта на светодиоды
Передача байта из аккумулятора обратно в COM порт ПК

№5

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.