Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Если нет необходимости в длительной задержке, количество ступеней в подпрограмме можно уменьшить



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

1. Реализовать последовательное формирование свечения цифры 3 на индикаторе HG1. При подаче питания и нажатии на кнопку SB6 «Сброс» все светодиоды и индикаторы погашены. При включении тумблера SA1 включаются сегменты индикатора HG1 в последовательности a, b, c, d, g. После чего раздается щелчок звукогенератора HA1. На индикаторе горит цифра 3. При отключении тумблера SA1 гаснут сегменты индикатора HG1 в последовательности g, d, c, b, a. Включение тумблера SA2 изменяет темп формирования цифры 3.

2. Организовать счет числа нажатий кнопки SB4. При подаче питания и нажатии кнопки SB6 «Сброс» все светодиоды и индикаторы погашены. При каждом очередном нажатии кнопки SB4 число увеличивается. После 10 нажатий кнопки загорается светодиод VD4, на индикаторе HG1 загорается цифра 1 и раздается щелчок звукогенератора HA1. После второго десятка нажатий кнопки дополнительно загорается светодиод VD5, на индикаторе загорается цифра 2 и раздается щелчок звукогенератора. Дальнейшие нажатия кнопки SB4 не меняют состояния схемы. Нажатие кнопки SB5 гасит все светодиоды и индикатор и схема приходят в исходное состояние.

3. Организовать счет числа нажатий кнопок SB4 и SB5. При подаче питания и нажатии кнопки SB6 «Сброс» на индикаторах HG2 и HG1 горит число 00. При каждом очередном нажатии на кнопку SB4 число на индикаторах увеличивается на единицу. Счет возможен до 20. Если счет достиг числа 20, то дальнейшие нажатия кнопки SB4 число не меняют. При каждом очередном нажатии на кнопку SB5 число на индикаторах уменьшается на единицу. При достижении числа 00 дальнейшие нажатия кнопки SB5 не влияют на схему. Нажатие кнопки SB1 обнуляет индикаторы.

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

5. Реализовать на микроконтроллере схему управления светофором. При включении тумблера SA1 светофор работает в дневном режиме, то есть чередование сигналов следующее: зеленый (VD4), желтый (VD5), красный (VD6), желтый, зеленый, желтый и так далее. При отключении тумблера SA1 светофор работает в ночном режиме, то есть мигает желтый светодиод VD5. В дневном режиме работы на индикаторе HG1 горит буква «d», в ночном режиме – буква «H».

6. При подаче питания и нажатии на кнопку SB6 «Сброс» загорается светодиод VD4, а на индикаторах HG1 и HG2 горит число 04, то есть номер светодиода. При нажатии и отпускании кнопки SB2 светодиод VD4 гаснет, а VD5 загорается, то есть происходит сдвиг свечения вправо. На индикаторах загорается число 05. При каждом очередном нажатии на кнопку SB2 свечение сдвигается вправо, то есть наблюдается свечение VD4, VD5,VD6, VD4,VD5… и так далее. При этом на индикаторах высвечиваются соответственно числа 04, 05, 06, 04, 05… и так далее. При нажатии и отпускании кнопки SB3 схема работает аналогично, но сдвиг свечения происходит влево.

7. При подаче питания и нажатии кнопки SB6 «Сброс» загораются светодиоды VD4 и VD6 и на индикаторах HG1 и HG2 соответственно горят цифры 4 и 6. При нажатии и удержании кнопки SB2 светодиоды VD4 и VD6 гаснут, загорается светодиод VD5, и на индикаторах HG1 и HG2 соответственно загораются цифры 0 и 5. При отпускании кнопки SB2 схема приходит в исходное состояние.

8. При подаче питания и нажатии кнопки SB6 «Сброс» на индикаторах HG1 и HG2 загораются соответственно цифры 7 и 5. При нажатии и отпускании кнопки SB2 на индикаторах загораются цифры 5 и 7 и включаются светодиоды VD4 и VD6. При нажатии и удержании кнопки SB3 все индикаторы и светодиоды гаснут, при отпускании возобновляется горение, как после нажатия кнопки SB6 «Сброс».

 

 

ЛАБОРАТОРНАЯ РАБОТА № 4. СИСТЕМА ВНЕШНИХ ПРЕРЫВАНИЙ МИКРОКОНТРОЛЛЕРА

Цель работы

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

 

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

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

Младшие адреса пространства памяти автоматически определяются как векторы сброса и прерываний.

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

 

Таблица 11.1. Векторы прерывания

№ вектора Адрес вектора Причина Формулировка прерываний
$000 RESET Сброс по выводу RESET и сторожевому таймеру (Hardware Pin, Power-On Reset и Watchdog Reset)
$001 INTO Запрос внешнего прерывания 0 (External Interrupt Reguest 0)
$002 INT1 Запрос внешнего прерывания 1 (External Interrupt Reguest 1)
$003 TIMER2 COMP Совпадение при сравнении таймера/счетчика 2 (Timer/Conter2 Compare Match)
$004 TIMER2 OVF Переполнение таймера/счетчика 2 (Timer/Conter2 Overflow)
$005 TIMER1 CAPT Захват таймера/счетчика 1 (Timer/Conter1 Capture Event)
$006 TIMER1 COMPA Совпадение А при сравнении таймера/счетчика 1 (Timer/Conter1 Compare Match А)
$007 TIMER1 COMPB Совпадение В при сравнении таймера/счетчика 1 (Timer/Conter1 Compare Match В)

Окончание таблицы 11.1

№ вектора Адрес вектора Причина Формулировка прерываний
$008 TIMER1 OVF Переполнение таймера/счетчика 1 (Timer/Conter1 Overflow)
$009 TIMER0 OVF Переполнение таймера/счетчика 0 (Timer/Conter0 Overflow)
$00A SPI, STC Завершение пересылки SPI (SPI Serial Transfer Complete)
$00B UART, RX Завершение приема UART (UART, Rx Complete)
$00C UART, UDRE Регистр данных UART пуст (UART Data Register Empty)
$00D UART, TX Завершение передачи UART (UART, Tx Complete)
$00E ADC Завершение ADC преобразования (ADC Conversion Complete)
$00F EE_RDY Готовность EEPROM (EEPROM Ready)
$010 ANA_COMP Срабатывание аналогового компаратора (Analog Comparator)

 

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

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

Регистр масок внешнего прерывания– GIMSK.Адрес – $3B ($5B)

Бит
Имя бита INT1 INT0
Чтение/Запись R/W R/W R R R R R R
Исходное значение

Биты 7 и 6INT1, INT0:Разрешение внешних прерываний соответственно INT1 и INT0. При установленных битах INT1, INT0 и установленном бите I регистра статуса (SREG) разрешаются прерывания по соответствующим выводам внешних прерываний.

Биты 50: Зарезервированные биты. Эти при считывании всегда покажут состояние 0.

Активизация выводов INT1 и INT0 вызывает запрос прерывания, если даже эти выводы будут разрешены как выход.

Условия возникновения запроса (по нарастающему/спадающему фронту сигнала или по логическому уровню) задаются с помощью битов управления опознанием прерывания регистра MCUCR.

 

Регистр контроля (управления)– MCUCR.Адрес – $35 ($55).

Этот регистр содержит служебные биты для общих функций MCU.

Бит
$35 ($55) SE SM1 SM0 ISC11 ISC10 ISC01 ISC00
Чтение/Запись R/W R/W R/W R/W R/W R/W R/W R/W
Исходное значение

 

Бит 7 –этот бит зарезервирован в AT90S8535 и при считывании всегда показывает состояние ноль.

Биты 64 –управляют режимами энергосбережения.

Биты 3, 2 – ISC11, ISC10:Биты управления идентификацией внешнего прерывания 1. Внешнее прерывание 1 активизируется внешним выводом INT1, если установлен флаг I в регистре статуса SREG и установлена соответствующая маска прерывания в регистре масок внешнего прерывания GIMSK (INTF1=1).

Запрос прерывания по логическому уровню или фронтам определяется в таблице 11.2.

 

Таблица 11.2. Задание характера сигнала прерывания 1

ISC11 ISC10 Описание
Запрос прерывания идентифицируется по низкому уровню на INT1
Зарезервирован
Запрос прерывания идентифицируется по спадающему фронту на INT1
Запрос прерывания идентифицируется по нарастающему фронту на INT1

Примечание: При программном изменении битов ISC11/ISC10 прерывание INT1 должно быть запрещено путем очистки бита разрешения прерывания в регистре GIMSK. В ином случае может произойти прерывание.

Биты 1, 0 – ISC01, ISC00:Биты управления идентификацией внешнего прерывания 0.Внешнее прерывание 0 активизируется внешним выводом INT0, если установлен флаг I в регистре статуса SREG и установлена соответствующая маска прерывания. Запрос прерывания по логическому уровню или фронтам определяется в таблице 11.3.

 

Таблица 11.3. Задание характера сигнала прерывания 0

ISC01 ISC00 Описание
Запрос прерывания идентифицируется по низкому уровню на INT0
Зарезервирован
Запрос прерывания идентифицируется по спадающему фронту на INT0
Запрос прерывания идентифицируется по нарастающему фронту на INT0

Примечание: При программном изменении битов ISC01/ISC00 прерывание INT0 должно быть запрещено путем очистки бита разрешения прерывания в регистре GIMSK. В ином случае может произойти прерывание.

 

Прерывания по уровню сигнала флага не имеют и условия прерывания имеют место, пока активен внешний сигнал.

Регистр флагов внешних прерываний– GIFR.Адрес – $3A ($5A)

Бит
Имя бита INTF1 INTF0
Чтение/Запись R/W R/W R R R R R R
Исходное значение

 

Биты 7 и 6- INTF1, INTF0:Флаги внешних прерыванийINTF1и INTF0.В случае поступления запроса на прерывание на какой-либо из указанных выводов устанавливается (=1) соответствующий флаг прерывания. Если бит I регистра SREGи соответствующий бит разрешения регистра GIMSK установлены, то выполняется переход по вектору прерывания. При возврате из процедуры прерывания флаг очищается. Кроме того, флаг можно очистить, записав в него логическую 1.

Биты 5–0 — Эти биты зарезервированы в AT90S8535 и при считывании всегда покажут состояние 0.

При возникновении прерывания бит I разрешения глобального прерывания (Global Interrupt Enable) очищается, и все прочие прерывания запрещаются.

Для разрешения вложенных прерываний необходимо установить бит I внутри подпрограммы обработки прерывания. Выход из подпрограммы обработки прерывания происходит по команде RETI, при этом бит I устанавливается в состояние 1. Когда счетчик команд указывает вектор подпрограммы обработки прерывания, соответствующий флаг, вызвавший прерывание, аппаратно очищается. Некоторые флаги прерываний можно очистить, записав в соответствующий бит(ы) очищаемого флага логическую единицу.

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

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

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

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

а) запретить все прерывания и убедиться, что включения и отключения тумблеров INT0 и INT1 не оказывают влияния на работу фоновой программы;

б) разрешить прерывания по перепаду для INT0 и INT1 и посмотреть реакцию микроконтроллера на эти прерывания;

в) убедиться, что прерывание по INT0 прерывает выполнение программы по INT1;

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

Ниже приведена структура одного из вариантов программы при выполнении лабораторной работы.

 

  ; Примерная структура программы процедуры обслуживания прерываний
  .include "8535def.inc"  
  ; ***Формирование таблицы переходов***
  .org $000  
  rjmp start  
  .org $001 ; вектор int0
  rjmp pr0  
  .org $002 ; вектор int1
  rjmp pr1  
  .org $003 ; вектор Timer2 Compare
  reti  
  .org $004 ; вектор Timer2 Overflow
  reti  
  .org $005 ; вектор Timer1 Capture
  reti  
  .org $006 ; вектор Timer1 CompareA
  reti  
  .org $007 ; вектор Timer1 CompareB
  reti  
  .org $008 ; вектор Timer1 Overflow
  reti  
  .org $009 ; вектор Timer0 Overflow
  reti  
  .org $00A ; вектор SPI
  reti  
  .org $00B ; вектор приемника UART
  reti  
  .org $00C ; вектор "буфер передатчика пуст" UART
  reti  
  .org $00D ; вектор передатчика UART
  reti  
  .org $00E ; вектор ADC преобразователя
  reti  
  .org $00F ; вектор EEPROM
  reti  
  .org $010 ; вектор аналогового компаратора
  reti  
  ; ***Фоновая программа***
  .cseg  
  .org $030  
start: ldi r16,$00 ; загрузка указателя стека через регистр r16
  out sph,r16  
  ldi r16,$0ff  
  out spl,r16  
m1:   sbis   PINA,1   ; опросить кнопку SB1. От её состояния зависит
  rjmp m1  
  sei   ; разрешение глобального прерывания
  ldi r16,$c0  
  out GIMSK,r16 ; разрешение прерываний INT0 и INT1
  ldi r16,$f0 ; выводы PD0, PD1,PD2 и PD3 конфигурировать как
  out DDRD,r16 ; входы, а остальные выводы порта D как выходы
       
  ldi r16,$0ff ; выводы порта С конфигурировать как выходы
  out DDRC,r16  
       
  sbi PORTB,3 ; загрузить 1 в бит portB,3 для включения
      ; транзистора VT2
       
  ***   ;команды фоновой программы по индивидуальному
      ; заданию
  rcall wait  
  in r16,PINA ; опросить кнопки и тумблеры порта А
  lsr r16 ; сдвинуть разряды регистра r16 три раза вправо
  lsr r16  
  lsr r16  
  ldi r17,$0f  
  and r16,r17 ; биты ISC01, ISC00, ISC11, ISC10 принимают
  out MCUCR,r16 ; соответственно состояние SB1, SA1, SA2, SA3
       
pr0:     ; Подпрограмма отработки прерывания INT0
  in r16,SREG ; сохранение SREG
  push r16  
       
  ***   ; команды, реализующие индивидуальное задание
       
  cbi GIFR,6 ; сброс флага прерывания по INT0
  pop r16 ; восстановление SREG
  out SREG,r16  
  reti    
       
pr1:     ; Подпрограмма отработки прерывания INT1
  in r16,SREG ; сохранение SREG
  push r16  
       
  ***   ; команды, реализующие индивидуальное задание
       
  cbi GIFR,7 ; сброс флага прерывания по INT1
  pop r16 ; восстановление SREG
  out SREG,r16  
  reti    
       
wait:     ; подпрограмма задержки
  ldi r20,$0ff  
loop1:      
  ldi r21,$0ff  
loop:      
  dec r21  
  brne loop  
  dec r20  
  brne loop1  
  ret    
           

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

– нажатие кнопки SB1 разрешает глобальное прерывание;

– кнопка SB3 и тумблер SA1 обеспечивают задание характера сигнала прерывания INT0 (по фронтам или по уровню сигнала);

– тумблеры SA2 и SA3 аналогично обеспечивают задание характера сигнала прерывания INT1.

В представленной программе подпрограмма wait реализует задержку времени. Максимальная длительность задержки будет при записи в регистры r20 и r21 десятичных чисел 255. При необходимости увеличения длительности задержки можно реализовать несколько команд типа wait (можно с разными уставками времени) или выполнять последовательно несколько раз одну и ту же подпрограмму задержки времени. Можно записать свою подпрограмму wait, используя большее число регистров.

В индивидуальных заданиях есть необходимость изменения скорости «бегущих» огней. Это можно обеспечить инкрементом-декрементом или сложением-вычитанием чисел в каких-либо ячейках или регистрах, которые могут передаваться в регистры r20 и r21 подпрограммы wait.

 

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

 

1. При подаче питания и нажатии на кнопку SB6 «Сброс» загорается светодиод VD4. По прерыванию INT0 светодиод VD4 гаснет, загорается светодиод VD5 (идет сдвиг вправо). То есть, по прерыванию INT0 последовательно загораются и гаснут светодиоды VD4, VD5, VD6, VD4, VD5 и т.д. По прерыванию INT1 сдвиг осуществляется влево.

2. Фоновая программа реализует «бегущий» огонь на светодиодах VD4, VD5, VD6 слева направо, то есть поочередно загораются светодиоды VD4, VD5, VD6, VD4, VD5 и т.д.

По прерыванию INT0 скорость «бега» увеличивается,

а по прерыванию INT1 – уменьшается.

3. Фоновая программа реализует «бегущий» огонь на сегментах индикатора HG2, то есть, последовательно загораются и гаснут сегменты a, b, c, d, e, f, a, b, c и т.д. Прерывание по INT0 изменяет направление бега на противоположное. Прерывание по INT1 восстанавливает исходное направление «бега».

4. При подаче питания и нажатии кнопки SB6 «Сброс» на индикаторе HG2 загорается цифра 0. По прерыванию INT0 высвечиваемая цифра увеличивается на единицу, по прерыванию iNT1 – уменьшается на единицу. Диапазон изменения цифры – от 0 до 9. Если цифра достигла значения 9, то дальнейшие прерывания INT0 не меняют ее. Если же высвечивается цифра 0, то прерывания INT1 не должны изменять эту цифру.

5. Фоновая программа реализует работу светофора, то есть чередование сигналов следующее: зеленый (VD4), желтый (VD5), красный (VD6), желтый, зеленый и т.д. По прерыванию INT0 время горения каждой из ламп увеличивается, а по прерыванию INT1 – уменьшается.

6. При подаче питания и нажатии кнопки SB6 «Сброс» на индикаторе HG2 горит цифра 8. По прерыванию INT0 число на индикаторе увеличивается на две единицы, по прерыванию INT1 – уменьшается на две единицы. При достижении цифр 0 и E прерывания соответственно INT0 и INT1 не влияют на работу.

7. При включении микроконтроллера фоновая программа обеспечивает вывод на порт C комбинации сигналов, соответствующей индикации на индикаторе HG2 цифры 5. По прерыванию INT0 – состояние линии PortC,1 инвертируется. По прерыванию INT1 – содержимое порта C инкрементируется. В отчете отразить получившиеся изображения на индикаторе.

8. При включении микроконтроллера и нажатии на кнопку SB6 «Сброс» на порт D выдается число 20h, на порт C – число 66h. По прерыванию INT0 – производить циклический сдвиг регистра PortD вправо, по прерыванию INT1 – влево.

 

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.