Главная страница Комбинированное использование портов ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПРЕРЫВАНИЙ МИКРОКОНТРОЛЛЕРОВ 16С5Х Подсемейство 16С5Х PIC-микроконтроллеров не обладает аппарат, ными средствами прерываний, что ограничивает их применение В этом разделе рассказано, как реализовать псевдопрерыванц с помощью программы, реагирующей на изменение состояния линий портов. Получаемые в результате показатели вполне приемлемы так как достигается время реакции от 10 до 20 мкс. Принцип действия предлагаемой программы следующий: каждад линия параллельного порта уподоблена входу прерывания, и изменение ее состояния может инициировать начало подпрограммы обработки прерывания, индивидуальной для каждой линии. Переход к соответствующей подпрограмме может осуществляться посред. ством модификации содержимого программного счетчика (РС) PIC-микроконтроллера 16С5Х, модификация же происходит по результату считывания состояния порта. Например, когда в качестве входов прерывания использованы две линии параллельного порта, фрагмент программы может иметь следующий вид: HWF CONDTN.W ; Загружаем в регистр W текущее состояние порта. ANDLW 3 ; Маскируем шесть старших битов. ADDWF 2,1 ; Прибавляем содержимое регистра W к PC. GOTO MAIN ; Возвращаемся к основной программе, если нет ; логической единицы ни на одном из входов. GOTO Ж1 ; Если единица подана на линию О порта. GOTO INT2 ; Если единица подана на линию 1 порта. GOTO INT3 ; Если единица подана на линии О и 1 одновременно. В данном случае состояние двух псевдовходов прерывания испольг зуется для формирования двухразрядного двоичного числа, которое добавляется к содержимому PC для того, чтобы с его помощью перейти (goto) к подпрограмме обработки соответствующего прерывания. Обычно все гораздо сложнее, так как во многих приложениях необходимо обеспечивать быструю реакцию на прерывание, в противном случае механизм прерывания не будет эффективным. Кроме того, тр буется проводить опрос линий прерывания в строго определенны интервалы времени. В общем случае для программной организации подобной системы прерываний можно использовать два механизма: разделение глаВ ной программы на программные секции (разделы) и таймер реал ного времени. Соответствующий алгоритм представлен на рис. 4.7, Таймер ре-цого времени (RTCC) служит счетчиком истекшего времени. Лреходы к подпрограммам прерываний и различным разделам jjjpHoft программы реализованы с использованием принципа табли-дь1 перОД который был рассмотрен ранее. При отсутствии прерывания в каждом цикле алгоритма текущее содержимое регистра переходов добавляется к содержимому программного счетчика (PC), и благадаря этому осуществляется переход к соответствующему разделу главной программы. После выполнения данного раздела содержимое регистра переходов ( Ночоло )
облииа переходов гурогроммь
I Зогрузко регистра переходов ~\ Итм программной реализации сиаемы прерываний декрементируется, и цикл повторяется. Таким образом поочеред будут исполняться все разделы. Чтобы определить период опроса линий прерывания, можно цс> пользовать таймер. Так, по приведенном) алгоритму новый onpo. линий прерывания будет производиться после завершения счет таймера. Интервал опроса может быть определен и табличным спо. собом: MOVLW TEST SUBWF RTCC.W ADDWF 2.1 NOP GOTO DEBUT Необходимое число командных циклов. Оставшееся число командных циклов. Добавляем это число к содержимому PC. Количество NOP равно содержимому TEST. Максимальное время ожидания истекло, возвращение к главной программе. Единственный параметр, который требует определения, это TEST. Его значение зависит от продолжительности вьшолнения всех рг13делов программы (в комадных циклах), В листинге 4,14 представлен пример программы, реализующей приведенный алгоритм. Она расчитана на опрос двух линий прерывания с разбивкой главной программы на четыре раздела и содержит восемь дополнительных инструкций, необходимых для завершения отсчета времени. Листинг 4.14 ; Программная реализация прерываний. LIST Р=16С54. Принцип программной реализации системы прерываний. Соответствует инструкции по применению AN514 фирмы Microchip.
Четыре раздела в главной программе.
Конфигурируем RTCC для счета командных циклов. Сброс RTCC. Считывание входов/выходов. Определяем переход в таблице прерываний. Прерывание при изменении уровня линии с О на 1. Уравнение для номера прерывания: (ES + CNDTN) - CNDTN = ПРЕРЫВАНИЕ, где ES - текущее состояние входов и CNDTN - предыдущее состояние. Маскируем шесть старших битов. Прибавляем состояние входов к PC. Для состояния = 00. Для состояния = 01. Для состояния = 10. Для состояния = И. Программа первого прерывания. Программа второго прерываний. Программа третьего прерывания. Прибавление текущего содержимого регистра переходов к PC. Таблица переходов главной программы. Главная программа, раздел 1. Главная программа, раздел 2. Главная программа, раздел 3. Главная программа, раздел 4. Декрементация регистра переходов и тест на 0. TIMCHK
Загрузка регистра переходов. ; Проверка: RTCC равно 50 (50 - 7) Определение времени ожиданий. Добавление времени ожидания к PC. ПРИНЦИП МНОГОЗАДАЧНОаИ в некоторых случаях необходимо, чтобы микроконтроллер работал в режиме многозадачности. Это бывает нужно, например, когда при выполнении устройством некоторых функций ЦПУ долго находится в состоянии ожидания. Потерянное время целесообразно использовать для выполнения других функций. Возможность прямой модификации содержимого программного счетчика, которой обладает PIC-микроконтроллер (см. предыдутций раздел), может быть применена и для поддержки многозадачного режима. На рис. 4.8 показана простая схема, для управления которой написана следующая программа. PIC-микроконтроллер 16С54 заставляет мигать восемь светодиодов с различной скоростью, при этом )Т1рав-ление миганием каждого из них является отдельной задачей. Как видно из листинга 4.15, принцип построения программы достаточно прост. Счетчик задач task инкрементируется при каждом вызове очередной задачи. Сам вызов (переход) осуществляется табличным способом за счет добавления содержимого счетчика задач к содержимому программного счетчика PC. Таблица перехода отсылает в адрес начала каждой задачи. Данная программа имеет некоторые ограничения. Она не позволяет определить для каждой задачи ни точное, ни максимальное вр мя выполнения. Решить проблему можно с помощью таймера реаль ного времени (RTCC), позволяющего вьыснить время выполнения каждой задачи. Затем на основе этих значений будет легко опреД лить суммарное время выполнения всех задач. PIC 16С54 RA2 RA1 RA3 RAO RTCC 0SC1 MCLR 0SC2 Vss Vdd RBO RB7 RBI RB6 RB2 RB5 RB3 RB4 -CD- -CZb- -CD- -(ZZb- 8x470n -db--СПЬ- -czj-й- Рис. 4.8 Схема, демонорирующая работу Р1С-микроконтроллера влиогозсщачном режиме Листинг 4.15 Пример функционирования в многозадачном режиме. Соответствует инструкции по применению фирмы Parallax. Эта программа - пример организации многозадачной работы. Она управляет восьмью задачами, которые заставляют мигать с различной частотой восемь светодиодов, связанных с RBO - RB7. Скорость (темп) мигания определяется переменной величиной ticks. Определение констант. LEDs = rb ; Определение переменных величин, org R task tasks timeO timel ti(ne2 times time4 times tii№6 timer (fe 1 ; Число задач, (te 1 ; Системный таймер, ds 1 ; Таймер 0. ds 1 ; Таймер 1. ds 1 ; Таймер 2. ds 1 ; Таймер 3. ds 1 ; Таймер 4. ds 1 ; Таймер 5. ds 1 ; Таймер 6. ds 1 ; Таймер 7. Определение типа используемого PIC-микроконтроллера. device picl6c54, xt osc, wdt off, protect off reset start пачало поограммы в ПЗУ с адреса 0. org О
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |