роботы робототехника микроконтроллеры


 Страниц (1): [1]   

> Без описания
Dimaxa Post Id


Рядовой


Сообщений всего: 1
Дата рег-ции: Апр. 2010  



Здравствуйте!
Помогите пожалйста разобраться с внешними прерываниями у atmegi 48, не путайте с перрываниями INT0, INT1, у 48-ой практически любой вывод может генерировать прерывание, пишу программу в WinAVR, установил все разрешения на прерывание, в частности на вывод 15, это прерывание PCINT1.
если есть у кого-то примеры использования внешних прерываний, и описание обработчика этого прерывания ОТЗОВИТЕСЬ!
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



Dimaxa, покажите свой код, в котором пытаетесь что то сделать.
 
 Top
Лайт Post Id



Рядовой


Сообщений всего: 3
Дата рег-ции: Апр. 2010  



Вот могу привести пример моей программы с прерыванием, думаю вы поймете ее структуру.

*******************************************************************/

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>


//////////////////////////////// //////////////////////////////// //
// Раздел функций
//////////////////////////////// //////////////////////////////// //


// Функция задержки. Минимальная задержка с кварцем 8MHz, равна 1 ms

void delay_ms2(unsigned short ms)
{
unsigned short i, j, k;
for (i=0; i<ms; i++) /*цикл формирования временной задержки*/
for(j=0; j<185;j++) /* вложенный цикл */
k++; /* произвольное действие */
}



// signal handler для внешнего прерывания int0

SIGNAL(SIG_INTERRUPT0)
{

PORTD &= ~_BV(PD1); // Сбросить бит PD1 в "0" = 0V,
// светодиод выключен , pin=0V

delay_ms2(1000); // Ждем 1 сек.

PORTD |= _BV(PD1); // Установить бит PD1 в "1" = 5V,
// светодиод включен, pin=1V
}

//////////////////////////////// //////////////////////////////// //
// ОСНОВНАЯ ПРОГРАММА
//////////////////////////////// //////////////////////////////// //

int main(void)
{

DDRD |= 1<<1; // вывод 1 порта D работает на вывод
PORTD |= _BV(PD1); // инициализировать начальное состояние,
// установить бит PD1 в "1"

DDRD &= ~(0<<2); // вывод 2 порта D работает на ввод
PORTD |= _BV(PD2); // активизировать подтягивающий резистор

GIMSK = 1<<INT0; // разрешить внешнее прерывание Int0
MCUCR = 1<<ISC01; // сигнал низкого уровня на Int0 вызовет
// внешнее прерывание

sei(); // разрешить прерывания

for (;Подмигивающий { } // бесконечный цикл

}
 
 Top
Страниц (1): [1]
« Микроконтроллеры »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru