Проблемы с прерыванием

April 27, 2014 by admin Комментировать »

Начиная работать с компилятором SDCC и программой MPLABX, я обнаружил, что шаблон файла, в котором есть прерывание, компилируется странным образом Этот вопрос я откладывал до тех пор, пока не забыл о нём Вспомнив об этом, я решил разобраться с ним в конце рассказа о компиляторе SDCC На плате управления ROBOPICA есть кнопка, подключённая к выводу RB0 И у микроконтроллера есть прерывание по RB0 Как обычно, вначале обратимся к описанию PIC16F887

RB0/INT INTERRUPT

Внешнее прерывание по выводу RB0/INT переключается по фронту либо нарастающим фронтом, если бит INTEDG регистра OPTION_REG<6> установлен, либо спадающим фронтом, если этот бит очищен Когда правильный фронт появляется на выводе RB0/INT, бит INTF регистра INTCON<1>) устанавливается Это прерывание может быть запрещено очисткой управляющего бита INTE регистра INTCON<4>. Бит INTF должен быть очищен программно в подпрограмме обслуживания прерывания до того, как возобновить это прерывание Прерывание может быть использовано для  вывода микроконтроллера из режима ожидания (Sleep)

Простая программа проверки прерывания

#include <pic16f887h>

#include &quotdelay_20h&quot

typedef unsigned int wrd

wrd at 0x2007 CONFIG1 = 0x2FF2

char dl = 1           //переменная для хранения паузы void main(void) {

//Инициализация

ANSELH = 0            //цифровые входы

TRISB &amp= 0xF7         //третий бит на выход

OPTION_REG = 0x7F     //разрешить подтягивающие резисторы WPUB = 0x01           //подтянуть RB0

GIE = 1               //глобальное разрешение прерываний

IOCB = 1              //прерывание по младшему биту

INTEDG = 0            //прерывание спадающим фронтом

INTE = 1              //разрешить внешнее прерывание

//бесконечный цикл for (;) {

RB3 = 1 DELAY_S(dl) RB3 = 0 DELAY_S(dl)

}

}

void highInterrupt(void) interrupt 1     //обслуживание прерывания

{

DELAY_MS(30)          //на случай дребезга

if (INTF) dl++        //увеличиваем паузу

INTF = 0              //сбросим флаг

}

Программа проста, транслируется и её можно проверить

Рис 529 Проверка прерывания – пауза увеличивается при каждом нажатии

И окончательная проверка – загрузка в PIC16F887 управляющей платы ROBOPICA

В нескольких предыдущих главах я рассказывал о том, как подступиться к использованию компилятора SDCC с конкретным устройством ROBOPICA Мой совет, особенно, если вы самостоятельно делаете робота, обобщите все функции, о которых идёт речь О том, как используются функции более общего вида, можно посмотреть в библиотеке демо-версии MicroC Откройте  файлы  заголовков  компилятора  SDCC,  чтобы  посмотреть,  как  можно  использовать

другие возможности языка Даже если вы не намерены совершенствовать свои знания языка Си, никакой инструмент, особенно знания, не будет лишним в вашей работе В приложении я добавил файлы, найденные в Интернете, которые вы можете использовать и как правильный ответ, и как подсказку, и как рабочие файлы

Источник: Гололобов ВН,- Самоучитель игры на паяльнике (Об электронике для школьников и не только), – Москва 2012

Оставить комментарий

Устройство витков выходе генератора импульсов микросхемы мощности нагрузки напряжение напряжения питания приемника пример провода работы радоэлектроника сигнал сигнала сигналов сопротивление схема теория транзистора транзисторов управления усиления усилитель усилителя устройства частоты