Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Регистр входных данных порта А – PINA




Бит                  
$19 ($39) PINA7 PINA6 PINA5 P1NA4 PINA3 PINA2 PINA1 PINA0 PINA
Чтение/Запись R R R R R R R R  
Исходное значение N/A N/A N/A N/A N/A N/A N/A N/A  

 

Регистр PINA обеспечивает только возможность чтения, а регистры PORTA и DDRA – возможность чтения и записи. Регистр PINA не является регистром в полном смысле этого слова. Обращение к нему обеспечивает чтение физического состояния каждого вывода порта.

Аналогичное устройство и обозначение имеют и регистры портов B, C и D, их адреса приведены в таблице 9.

 

Таблица 9. Адреса регистров портов ввода/вывода B, C и D

Регистр PORTB DDRB PINB PORTC DDRC PINC PORTD DDRD PIND
Адрес $18($38) $17($37) $16($36) $15($35) $14($34) $13($33) $12($32) $11($31) $10($30)

Все порты в качестве цифровых портов ввода/вывода общего назначения работают одинаково:

- Каждый вывод порта в любой момент времени. может быть запрограммирован индивидуально на ввод или вывод. Если в регистре направления данных порта DDR для рассматриваемого бита записать “0”, то соответствующий вывод конфигурируется как вход, при записи “1” – как выход.

- Биты регистра PORT выполняют двойную функцию. Если вывод функционирует как выход, то этот бит определяет состояние вывода порта. Если бит установлен в 1, на выводе устанавливается напряжение высокого уровня (4,5…5 В). Если бит сброшен в 0, на выводе устанавливается напряжение низкого уровня (0…0,5 В). Нагрузочной способности каждого вывода достаточно для непосредственного управления светодиодным индикатором.

- Если вывод функционирует как вход, то бит регистра PORT определяет состояние внутреннего подтягивающего резистора для данного вывода. При установке бита в 1 подтягивающий резистор подключается между выводом микроконтроллера и линией питания (уровень напряжения на выводе неподключенного входа составляет 3,5…4 В, что воспринимается как наличие входного сигнала “1”, но при этом велико влияние помех).

- Все выводы портов незапрограммированного микроконтроллера находятся в третьем состоянии.

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

Порт А в микроконтроллере ATmega8535 служит также для ввода аналоговых сигналов в аналого-цифровой преобразователь. Выводы порта В могут выполнять альтернативные функции, указанные в таблице 10 (при этом регистры PORTB, DDRB должны быть установлены соответствующим образом).

Таблица 10. Альтернативные функции выводов порта В

Вывод Альтернативная функция
PB0 Т0 – вход тактового сигнала таймера/счетчика 0
PB1 T1 – вход тактового сигнала таймера/счетчика 1
PB2 AIN0 – положит. вывод компаратора / INT2 – вход внешнего прерывания 2
PB3 AIN1 – отрицат. вывод компаратора / OC0 – вывод сравнения выхода таймера/счетчика 0
PB4 SS – вход выбора ведомого SPI
PB5 MOSI – установка ведущий выход/ведомый вход SPI
PB6 MISO – установка ведущий вход/ведомый выход SPI
PB7 SCK – тактовый сигнал SPI

У порта С четыре вывода могут выполнять альтернативные функции: выводы PC6 и PC7 выполняют функции TOSC1 и TOSC2 таймера/счетчика 2 (вход и выход для подключения резонатора), выводы PC0 и PC1 выполняют функции SCL (синхронизация) и SDA (данные) для последовательного двухпроводного интерфейса TWI. Выводы порта D могут выполнять альтернативные функции, указанные в таблице 11 (регистры PORTD, DDRD должны быть установлены соответствующим образом).

Таблица 11. Альтернативные функцин выводов порта D

Вывод Альтернативная функция
PD0 RxD – вход приемника USART
PD1 TxD – выход передатчика USART
PD2 INT0 – вход внешнего прерывания 0
PD3 INT1 – вход внешнего прерывания 1
PD4 ОС1В – вывод сравнения выхода В таймера/счетчика 1
PD5 ОС1А – вывод сравнения выхода А таймера/счетчика 1
PD6 ICP – вход триггера захвата таймера/счетчика 1
PD7 ОС2 – вывод сравнения выхода таймера/счетчика 2

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

wait:; подпрограмма временной задержки

ldi r21,$28

loop2:

ldi r22,$0ff

loop1:

ldi r23,$0ff

loop:

dec r23

brne loop

dec r22

brne loop1

dec r21

brne loop2

ret

Приведенная подпрограмма, использующая регистры R21 – R23, обеспечивает при тактовой частоте 8 МГц временную задержку примерно в 1 секунду. При необходимости изменения задержки можно изменить число, записываемое в регистр R21.

Варианты индивидуальных заданий

 

1. Организовать сложение двух трехбитных чисел и индикацию результата на семисегментном индикаторе. Три произвольно выбранных тумблера представляют собой первое слагаемое, т.е. возможен набор чисел от 0 до 7. Три других тумблера представляют собой второе слагаемое. На индикаторе высвечивать результат в шестнадцатеричном формате, т.е. 0... E.

2. В памяти записать массив, содержащий 8 ячеек. В ячейках массива находятся шестнадцатеричные цифры (числа от 00 до 0F). С помощью четырех тумблеров вводится еще одна шестнадцатеричная цифра. Программа должна определить, присутствует ли эта цифра в массиве. Если цифра присутствует, то нужно высветить ее в шестнадцатеричном виде на семисегментном индикаторе. Если цифры в массиве нет, на индикаторе высвечивается символ "Н" (нет).

3. При нажатии на одну кнопку загорается цифра 1 и светодиод VD4. При нажатии на другую кнопку загорается цифра 2 и светодиод VD5. При одновременном нажатии этих кнопок загорается цифра 3 и включается светодиод VD6.

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

5. При отключенном тумблере горит светодиод VD4 и на индикаторе HG1 горит цифра 2. При включении тумблера светодиод VD4 и индикатор HG1 гаснут, загорается светодиод VD5 и на индикаторе HG2 загорается цифра 5. При включении другого тумблера все светодиоды и индикаторы гаснут.

6. Организовать сложение двух чисел 3 и 4. При нажатой кнопке на семисегментном индикаторе горит первое слагаемое, при другой нажатой кноп-
ке – второе слагаемое, при третьей нажатой кнопке – результат.

7. В массиве из 16 ячеек памяти располагаются шестнадцатеричные числа от 00 до 0F. В массиве есть только одно число, которое повторяется несколько раз. Выявить какое это число и сколько раз оно повторяется. При нажатии на кнопку на семисегментном индикаторе HG1 загорается повторяющееся число. При нажатии на другую кнопку на семисегментном индикаторе HG2 высвечивается число его повторений. Если нет повторяющегося числа, то при нажатии на первую кнопку на индикаторе HG1 загорается символ "Н" (нет).

8. При включении микроконтроллера на семисегментном индикаторе горит "0". Организовать счет и индикацию числа нажатий кнопки на индикаторе в шестнадцатеричном виде, т. е. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 0, 1, 2, 3, 4, …. Нажатие кнопки сопровождается загоранием светодиода VD5. Для упрощения программы мер борьбы с дребезгом контактов можно не предпринимать.

9. В исходном состоянии на семисегментном индикаторе горит цифра 7. При нажатии и отпускании кнопки на индикаторе загорается цифра 5 и включаются светодиоды VD4 и VD6. При нажатии и удержании другой кнопки все индикаторы и светодиоды гаснут, при отпускании возобновляется исходное состояние.

10. В исходном состоянии горят светодиоды VD4 и VD6, и на семисегментном индикаторе горит цифра 4. При нажатии и удержании кнопки светодиоды VD4 и VD6 гаснут, загорается светодиод VD5, а на индикаторе загорается цифра 9. При отпускании кнопки схема приходит в исходное состояние.

11. В исходном состоянии горит светодиод VD1, а на семисегментном индикаторе высвечивается цифра 1, то есть номер светодиода. При нажатии и отпускании кнопки светодиод VD1 гаснет, а VD2 загорается, то есть происходит сдвиг свечения влево. На индикаторе загорается цифра 2. При каждом очередном нажатии на кнопку свечение сдвигается влево, то есть наблюдается свечение VD3, VD4, VD5, VD6, VD7, VD8, затем снова VD1 и так далее. При этом на индикаторах высвечиваются соответственно цифры 3, 4, 5, 6, 7, 8, 1 и так далее. При нажатии и отпускании другой кнопки схема работает аналогично, но сдвиг свечения происходит вправо.

12. Реализовать на микроконтроллере схему управления светофором. При включении тумблера светофор работает в дневном режиме, то есть чередование сигналов следующее: зеленый (VD1), желтый (VD2), красный (VD3), желтый, зеленый, желтый и так далее. При отключении тумблера светофор работает в ночном режиме, то есть мигает желтый светодиод VD2. В дневном режиме работы на семисегментном индикаторе горит буква “d”, в ночном режи-ме – буква “H”.

13. Организовать «бегущий» огонь по сегментам семисегментного индикатора HG1 и HG2. При «беге» по часовой стрелке чередование сегментов следующее: a, b, c, d, e, f, a, b … и так далее. При включенном тумблере реализуется «бегущий» огонь по часовой стрелке, при отключенном – против часовой стрелки. При другом включенном тумблере «бегущий» огонь реализуется по сегментам индикатора HG1, при отключенном – по сегментам индикатора HG2.

14. Организовать счет числа нажатий двух кнопок. В исходном состоянии на семисегментном индикаторе горит число 0. При каждом очередном нажатии на одну кнопку число на индикаторе увеличивается на единицу. Счет возможен до F. Если счет достиг числа F, то дальнейшие нажатия этой кнопки число не меняют. При каждом очередном нажатии на другую кнопку число на индикаторах уменьшается на единицу. При достижении числа 0 дальнейшие нажатия этой кнопки число не меняют.

15. Организовать счет числа нажатий кнопки. В исходном состоянии все светодиоды и индикаторы погашены. Каждое очередное нажатие кнопки считается микроконтроллером. После 10 нажатий загорается светодиод VD4, а на семисегментном индикаторе загорается цифра 1. После второго десятка нажатий дополнительно загорается светодиод VD5, а на индикаторе цифра 2. Дальнейшие нажатия кнопки не меняют состояния схемы. Нажатие другой кнопки гасит все светодиоды и индикатор, и микроконтроллер приходит в исходное состояние.

16. Реализовать последовательное формирование свечения цифры 3 на семисегментном индикаторе. В исходном состоянии индикатор погашен. При включении тумблера включаются сегменты индикатора HG1 в последовательности a, b, c, d, g. На индикаторе горит цифра 3. При отключении тумблера гаснут сегменты индикатора HG1 в последовательности g, d, c, b, a.

 

6.3. Лабораторная работа № 2. Система внешних
прерываний микроконтроллера ATmega8535 семейства AVR

Цель работы

Изучить организацию прерываний в микроконтроллере ATmega8535 и обслуживание подсистемы внешних прерываний.

Пояснения к работе

Микроконтроллер ATmega8535 использует 21 источник прерывания. Эти прерывания располагают отдельными векторами в пространстве памяти программ. Каждому прерыванию присвоен свой бит разрешения, который должен быть установлен совместно с битом I регистра состояния SREG.

Перечень векторов прерывания представлен в таблице 12.

Таблица 12. Вектора прерываний микроконтроллера ATMega8535

№ вектора Адрес Источник Примечание
  $000 RESET Сброс по выводу RESET и сторожевому таймеру
  $001 INT0 Запрос внешнего прерывания 0
  $002 INT1 Запрос внешнего прерывания 1
  $003 TIMER2 COMP Совпадение при сравнении таймера/счетчика 2
  $004 TIMER2 OVF Переполнение таймера/счетчика 2
  $005 TIMER1 CAPT Захват таймера/счетчика 1
  $006 TIMER1 COMPA Совпадение А при сравнении таймера/счетчика 1
  $007 TIMER1 COMPB Совпадение В при сравнении таймера/счетчика 1
  $008 TIMER1 OVF Переполнение таймера/счетчика 1
  $009 TIMER0 OVF Переполнение таймера/счетчика 0
  $00A SPI, STC Завершение пересылки SPI
  $00B USART, RXC Завершение приема USART
  $00C USART, UDRE Регистр данных USART пуст
  $00D USART, TX Завершение передачи USART
  $00E ADC Завершение аналого-цифрового преобразования
  $00F EE_RDY Готовность EEPROM
  $010 ANA_COMP Срабатывание аналогового компаратора
  $011 TWI Последовательный двухпроводной интерфейс
  $012 INT2 Внешнее прерывание 2
  $013 TIMER0 COMP Совпадение при сравнении таймера/счетчика 0
  $014 SPM_RDY Готовность SPM

Прерывания с младшими адресами имеют больший уровень приоритета. RESET имеет наивысший уровень приоритета, следующим является запрос внешнего прерывания INT0 и т. д.

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

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

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

Прерывания второго типа не имеют флагов прерываний и генерируются в течение всего времени, пока присутствуют условия, необходимые для генерации прерывания. Например, внешние прерывания по уровню сигнала флага не имеют и условия прерывания сохраняются, пока активен внешний сигнал. Соответственно если условия, вызывающие прерывание, исчезнут до разрешения прерывания, генерации прерывания не произойдет.

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

Микроконтроллер ATmega8535 содержит общий регистр управления прерываниями GICR и общий регистр флагов внешних прерываний GIFR.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...