Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 197; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.011 с.) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||