Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы Мазур.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.41 Mб
Скачать

Дополнительный регистр приоритетов прерываний iрн

Символ

Позиция

Имя и назначение

 

IРН.7

Зарезервирован

 

IРН.6

Зарезервирован

РТ2Н

IРН.5

Старший бит приоритета таймера/счетчика 2

PSH

1РН.4

Старший бит приоритета приемопередатчика

РТ1Н

1РН.3

Старший бит приоритета таймера/счетчика 1

РХ1Н

1РН.2

Старший бит приоритета внешнего прерывания  1

РТОН

1РН.1

Старший бит приоритета таймера/счетчика 0

РХОН

1РН.О

Старший бит приоритета внешнего прерывания 0

После сброса младшие шесть бит устанавливаются в 0, состояние старших - не определено.

16.Особенности подключения датчиков с механическими контактами к мк

При работе МК с датчиками, имеющими механические или электромеханические контакты (кнопки, клавиши, реле, клавиатуры и т.д.), возникает явление, называемое дребезгом. Оно заключается в том, что при замыкании контактов происходит их отскок, который

приводит к переходному процессу. При этом сигнал с контакта может быть прочитан как случайная последовательность нулей и единиц (рис. 2.16). Подавить это нежелательное явление можно аппаратными либо программными способами.

1...20 мс

«1»

«0» t

Рис. 2.16. К пояснению эффекта дребезга контактов

Аппаратные способы заключаются в использовании буферного RS-триггера (рис. 2.17, а) в качестве одновибратора, или фильтра нижних частот (рис. 2.17, б) для сглаживания пульсаций, следующих с периодом меньшим, чем постоянная времени фильтра.

Vпит

Vпит

R1 R2

&

МК

Px.x

R1 МК

Px.x

S1

S1 C1

&

а б

Рис. 2.17. Способы аппаратного подавления дребезга контактов Среди программных способов наибольшее распространение

получили два: 1) подсчет заданного числа совпадающих значений сигнала, 2) временная задержка. Суть первого способа заключается в многократном считывании сигнала с контакта. Подсчет удачных опросов (т.е. опросов, обнаруживших, что контакт замкнут) ведется программным счетчиком. Если после серии удачных опросов встречается неудачный, то подсчет начинается сначала. Контакт считается устойчиво замкнутым (дребезг устранен), если последовало N удачных опросов. Число N подбирается

Устранение дребезга контактов путем введения временной задержки заключается в том, что программа, обнаружив замыкание контакта, запрещает опрос состояния этого контакта на время, заведомо большее длительности переходного процесса. Время задержки подбирается экспериментально для каждого типа датчиков в пределах 1…20 мс и реализуется обычно с помощью одного из таймеров.

Пример 2.1.

Разработать устройство для ввода данных с клавиатуры (восемь клавиш).

Время дребезга контактов

tдр

клавиш не превышает 1 мс. Устройство должно

ожидать нажатия клавиши, после чего выводить номер нажатой клавиши на выводы одного из портов МК.

При небольшом количестве подключаемых клавиш можно воспользоваться одним из аппаратных способов подавления дребезга.

Используем способ подавления дребезга с помощью простейшего ФНЧ (RC-цепочки), так как он требует меньших аппаратных затрат. Для взаимодействия с клавиатурой выберем порт D, а для вывода данных используем порт А МК. Тогда схема разрабатываемого устройства будет иметь вид, изображенный на рис. 2.18.

Vпит

R1

S1 C1

PD0

PA0 PA1

ATmega16

R8

S8 C8

PD7

PA7

Рис. 2.18. Схема подключения клавиатуры

Определим номинальные значения элементов RC-цепочки. Условием стабильной фиксации логического уровня на входе МК при устранении дребезга контактов с помощью ФНЧ является

где ФНЧ

RC

tдр ФНЧ , (2.4)

– постоянная времени ФНЧ.

Зададимся значением резисторов RC-цепочки, равным R1 – R8 = 100 кОм,

тогда при

ФНЧ  1

мс должно выполняться условие С1 – С8 ≥ 0,1 мкФ.

Выберем значение из стандартного ряда номиналов С1 – С8 = 0,1 мкФ.

Алгоритм подпрограммы опроса клавиш для рассматриваемого случая представлен блок-схемой на рис. 2.19.

Ниже приведен фрагмент программы для опроса клавиатуры, написанный на ассемблере МК ATmega16. Описание системы команд МК ATmega16 приведено в приложении В. Символ “;” указывает начало комментария.

Программа выполняет циклическое сканирование клавиатуры. По окончании цикла сканирования в регистре key появляется номер нажатой клавиши. Если ни одна из клавиш не была нажата, то его значение равно нулю. Номер клавиши в виде двоичного кода выводится на выводы порта А.

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

Key_scan

Да

PD0=0

Key=1

Нет

Да

PD1=0

Key=2

Нет

Да

PD7=0

Key=8

Нет

Возврат

Рис. 2.19. Блок-схема подпрограммы сканирования клавиатуры

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

В основной программе используется подпрограмма, поэтому в ее начале инициализируется указатель стека. Ему присваивается значение адреса самой

старшей ячейки ОЗУ (для ATmega16 – 0х045F), тем самым указывается, что под область стека может быть использована вся доступная память ОЗУ.

;********************** Программа опроса клавиатуры **********************

.device ATmega16

;**** Назначение символических имен **************************************

.equ

.equ

.equ

.equ

.equ

.equ

SPH SPL PОRTA DDRA DDRD PIND

=0x3E

=0x3D

=0x1В

=0x1A

=0x11

=0x10

;указатель стека (старший байт)

;указатель стека (младший байт)

;регистр данных порта А МК

;регистр направления данных порта A МК

;регистр направления данных порта D МК

;регистр адресов выводов порта D МК

.def

.def

key tmp

=r16

=r17

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

;регистр промежуточных значений

;**** Основная программа ******************************************************

.cseg

.org 0

ldi

tmp,0x5F

;установить значение tmp

out

SPL,tmp

;записать младший байт указателя стека

ldi

tmp,0x04

;установить значение tmp

out

SPH,tmp

;записать старший байт указателя стека

clr

tmp

;очистить tmp

out

DDRD,tmp

;сконфигурировать выводы порта D (все входы)

ser

tmp

;установить tmp

out

DDRА,tmp

;сконфигурировать выводы порта А

(все выходы)

loop1:

clr

key

;очистить key

rcall

key_scan

;вызов подпрограммы сканирования клавиш

out

PORTA,key

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

rjmp

loop1

;перейти на метку loop1

;**** Подпрограмма сканирования клавиатуры ******************************

key_scan: sbrs

PIND,0

;пропустить, если PIND(0) = 1 /PD0 = 1/

ldi

key,1

;присвоить номер нажатой клавиши

sbrs

PIND,1

;пропустить, если PIND(1) = 1

ldi

key,2

;присвоить номер нажатой клавиши

sbrs

PIND,2

;пропустить, если PIND(2) = 1

ldi

key,3

;присвоить номер нажатой клавиши

sbrs

PIND,3

;пропустить, если PIND(3) = 1

ldi

key,4

;присвоить номер нажатой клавиши

sbrs

PIND,4

;пропустить, если PIND(4) = 1

ldi

key,5

;присвоить номер нажатой клавиши

sbrs

PIND,5

;пропустить, если PIND(5) = 1

ldi

key,6

;присвоить номер нажатой клавиши

.exit

sbrs PIND,6 ;пропустить, если PIND(6) = 1

ldi key,7 ;присвоить номер нажатой клавиши sbrs PIND,7 ;пропустить, если PIND(7) = 1

ldi key,8 ;присвоить номер нажатой клавиши ret ;возврат из подпрограммы

При большом количестве клавиш (N>8) более выгодным (с точки зрения аппаратных затрат) способом реализации является матричная клавиатура (рис. 2.20).

PВ0 PВ1

S1 S5 S9 S13

S2 S6 S10 S14

S3 S7 S11 S15

S4 S8 S12 S16

ATmega16

PВ7

Рис. 2.20. Схема подключения матричной клавиатуры

В этом случае изменяется алгоритм опроса клавиш. Один из способов сканирования клавиатурной матрицы заключается в следующем: изначально все выходы МК, к которым подключены строки клавиатурной матрицы, установлены в состояние лог. 0; далее один из выходов устанавливается в состояние лог. 1 и сканируются все входы МК, к которым подключены столбцы клавиатуры; пересечение строки, на которой установлена лог. 1, и столбца, на котором определена лог. 1, позволяет найти код нажатой клавиши.

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