Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Альтернативные функции выводов порта Е
- PDI / RXD - PORTE.0. PDI – вход последовательных данных, используется в процессе загрузки программы через последовательный порт. RXD - вход приемника UART. - PDO / TXD - PORTE.1. PDO – выход последовательных жанных, используется в процессе загрузки программы через последовательный порт. TXD - выход передатчика UART. - АС+ - PORTE.3. Положительный вход аналогового компаратора. - АС- - PORTE.4. Отрицательный вход аналогового компаратора. - INT 4.. INT 7 - PORTD.4 - 7. INT4 - INT7 – входы внешних прерываний 4-7. Запросы от этих источников прерываний могут запускаться по низкому уровню на входе, либо по нарастающему или спадающему фронту сигнала. Порт F. Порт F является 8-разрядным входным портом. В пространстве памяти ввода/вывода, этому порту соответствует только регистр PINF $00($20). Выводы порта F подключены через аналоговый мультиплексор к аналого-цифровому преобразователю. Выводы порта F, кроме выполнения функций аналоговых входов, могут быть использованы и в качестве цифровых входов. Это позволят пользователю в одно и то же время использовать часть выводов порта F в качестве цифровых входов, а оставшуюся часть - в качестве аналоговых входов. Рисунок 3.6 –Регистр входных данных порта F – PINF PINF - не является регистром в полном смысле слова, обращение по этому адресу обеспечивает чтение физического состояния каждого вывода порта.
ВЫПОЛНЕНИЕ ОСНОВНОГО ЗАДАНИЯ Ознакомиться со схемой платы лабораторного макета и подключением клавиатуры к выводам микроконтроллера. Запустить на инструментальном компьютере интегрированную систему программирования «AVR Studio». Создать новый проект и новый файл с именем demo3.asm. В файл поместить следующий исходный текст программы:
ОБЯЗАТЕЛЬНОЕ ЗАДАНИЕ лабораторной работы №3
.include “ml03def.inc” ;****************************** Константы ************************************.EQU Stack=$OFFF; .Equ KB_Port=PortD; Регистр порта клавиатуры .Equ KB_DDR=DDRD; Регистр направления порта клавиатуры .Equ KB_PIN=PIND; Регистр выводов порта клавиатуры .Equ Ind_Port=PortC; Регистр вывода на сегм. мндикат.(только на выход)
; * * * * * * * * * * * * * * * * * * * * * * * * * Регистры******* * * * * * * * * * * * * * * ;Переименование регистров (для удобства) .Def Zero=R3; .Def Acc=R16; .Def Bcc=R17; .Def Ccc=R18; .Def Dcc=R19; .Def Ecc=R20;
;***** * ** * * * * * * * * * * * * * * * Переменные * * * * * * * * ** * * * * * * * **** * * **** .EQU Dig_0=$100; Разряд выводимого на индикатор числа .EQU KeyFlags=Dig_0+1; Сдвиговый регистр клавиатуры
;* * * * * * * * * ***** * * * * * * * * * * Таблица прерываний * **** * * * * * * * * * * * * * * .ORG $0 rjmp Start; Вектор прерывания события RESET .ORG $30; Адрес исполняемой части
; * * * * * * * * * * * ** * * * * * * * * * * * * Основной цикл программы * * * * * * * * * * * * * * * *
; -------------Инициализация---------------------------------------------- Start: ldi R16, high(Stack); инициализация стека out SPH, R16 ldi R16, low (Stack) out SPL, R16 clr Zero; ldi Acc, $0; out KB_Port, Acc; PD0-3 выходы, PD4-6 входы: PORTD out KB_DDR, Acc; DDRD ;------------------------------------------------------------------------------------------------------------------------- MainCycle: rcall AskKey; Опрос KB brtc MainCycle; Если флаг T очищен rcall ToDigits; Перевод в сегментный вид индикатора rjmp MainCycle; ;---------------------------------------------------------------------------------------------------------------------- AskKey:
ToDigits:
; здесь сохранение в ОЗУ сделано для иллюстрации работы с ОЗУ lds Ecc,Dig_0; загружаем старший разряд десятичного числа out Ind_Port, Есс; выдаем код на шину данных индикаторов ret; ; * * * * * * * * * * * * * * * * * * * Т * * * * Таблицы * * * * * * ** * ***** * * * * * * * * * * * DigitTAB: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С .db $С0, $F9, $А4, $В0, $99, $92, $82,$F8,$80,$90,$88,$83,$С6 Программа demo3 определяет факт нажатия одной из клавиш 12-кнопочной клавиатуры, организованной в виде матрицы 4 строки x 3 столбца, заносит номер нажатой клавиши в регистр R17, которому в начале программы присвоено имя Всс. Номер нажатой клавиши в шестнадцатеричном формате отображается на семисегментном индикаторе макета. Подразумевается, что в каждый момент времени может быть нажата только одна клавиша. В программе предусмотрена защита от дребезга контактов. Факт нажатия клавиши фиксируется установкой флага Т. В начале программы с помощью директив EQU и DEF регистрам общего назначения и регистрам портов присваиваются имена, удобные для использования в контексте данной программы. Директива ORG $0 размещает по нулевому адресу памяти программ команду rjmp Start, которая выполняет безусловный переход на фрагмент программы, инициализирующий микроконтроллер (инициализация стека, портов, регистра Zero). Этот фрагмент начинается с адреса $30 (определяется директивой ORG$30). В основном цикле программы осуществляется только вызов процедур. Это делает программу более понятной и обеспечивает ее структурность. В данном случае вызываются две процедуры: процедура опроса клавиатуры и процедура вывода кода нажатой клавиши на семисегментный индикатор. Последняя вызывается только тогда, когда имело место нажатие клавиши. Признаком нажатия служит флаг Т - флаг общего назначения в регистре SREG. Процедура AscKey использует так называемый «метод скользящего нуля» для поиска нажатой клавиши. Работает он следующим образом. Имеется Клавиатура размерностью 3*4, где 3 - число колонок, 4 - число рядов. Каждая колонка «подтянута» резистором к шине питания достаточно большим сопротивлением. Таким образом, на линиях колонок присутствует уровень логической единицы. Линии колонок подсоединены к микроконтроллеру. Режим работы этих выводов микроконтроллера - вход. Линии рядов также подсоединены к порту микроконтроллера и выводы порта сконфигурированы как входные. Нажатие какой-либо из клавиш замыкает определенную линию колонок и линию рядов. Таким образом логические уровни замкнутых линий будут равны. При условии, что все выводы клавиатурного порта микроконтроллера работают на вход (режим - вход), замкнутые линии будут иметь уровень логической единицы (так как колонки подтянуты резистором к шине питания, а после нажатия клавиши к линии колонки подключается линия соответствующего ряда). Теперь если на линию ряда подать уровень логического нуля, то резистор пойдет небольшой ток, а напряжение на замкнутых линиях будет- соответствовать уровню логического нуля. Если логический ноль теперь поочередно подавать на каждую из линий рядов (т.е. как бы двигать ноль в порту), то нажатие легко отслеживается по наличию низкого уровня на линии колонок.
Неприятным атрибутом любых контактов, в том числе и кнопок клавиатуры, является наличие дребезга, т.е. быстрое и непредсказуемое изменение состояния: замкнуто - незамкнуто. Это происходит при нажатии, отпускании, соединении, разъединении и т.д. Существует множество методов борьбы с дребезгом, один из которых мы разберем подробно. Будем опрашивать клавиатуру и каждый раз, если клавиша нажата и удерживается, будем вдвигать единичку в статус-байт клавиатуры (этот байт мы создаем сами, обозначим его KeyFlags). Если клавиша не нажата - вдвигаем ноль. Как только значение этого байта станет равным $FF - микроконтроллер фиксирует нажатие клавиши. При этом устанавливается флаг Т и из основного цикла вызывается процедура (ToDigits) вывода номера нажатой клавиши на семисегментный индикатор. В процедуре ToDigits используется таблица образов цифр, переводящая цифры в набор зажигаемых сегментов. Эта таблица расположена по адресу метки DigitTab в памяти программ. Этот адрес (умноженный на 2, т.к. в каждой ячейке памяти программ находится не байт, а 2 байта, т.е. слово) загружается в старшую и младшую части регистра Z, а затем к нему прибавляется номер нажатой клавиши. В случае переполнения младшей части нужно прибавить к старшей части единицу, т.е. осуществить шестнадцатиричное сложение адреса и числа (номера нажатой клавиши). Для того, чтобы не использовать лишние команды, используется регистр Zero. Поскольку с памятью программ, да и вообще с памятью, приходиться работать довольно часто, то резервирование регистра Zero помогает экономить ресурсы контроллера и упрощает всевозможные сравнения с нулем, обнуления и т.п. Считанный из таблицы образ выводится на семисегментный индикатор.
1. Подключить кабелем последовательного порта плату контроллера к компьютеру, подключить кабелем порта USB плату контроллера к компьютеру (источник питания), включить тумблер питания на плате в положения "ON". 2. Выполнить трансляцию программы, загрузить код программы командой Tools | AVR Programmer в память микроконтроллера (она при этом автоматически запускается на выполнение со стартового адреса и зажигает цифру 8), нажать клавишу и наблюдать на индикаторе номер нажатой клавиши. Задания 1. Составить программу, которая анализирует номер нажатой клавиши и формирует соответствующий десятичный номер на двух семисегментных индикаторах. (Кодировка клавиш задается преподавателем). 2. Разработать и реализовать различные варианты подавления дребезга контактов клавиатуры. 3. Составить программу, осуществляющую считывание трех последовательно вводимых с клавиатуры чисел и их вывод на три семисегментных индикатора. 4. Составить программу опроса клавиатуры, имеющую защиту от одновременного нажатия двух и более клавиш. 5. Составить программу опроса клавиатуры, которая рассматривает некоторые клавиши как служебные, изменяющие действие нажатых основных клавиш. 6. Составить программу опроса клавиатуры, которая наращивает значение в ячейке памяти, соответствующей клавише, если клавиша нажата и удерживается. Результат должен наблюдаться на семисегментном индикаторе. Провести отладку разработанных программ на лабораторном макете с использованием интегрированной системы программирования. Проверить правильность выполнения программ на макете, продемонстрировать результаты преподавателю.
Вопросы для защиты работы:
1. Процедуры опроса состояния ATMega 103. 2. Опрос клавиатуры ATMega 103. 3. Служебные действия по нажатой клавише ATMega 103. 4. Считывание числа по нажатию клавиатуры ATMega 103.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2019-11-02; просмотров: 113; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.191.169 (0.041 с.) |