Перейти к содержанию

Пиплы, Памагите Чайнику Разобраться С Прерываниями


Br.Misha

Рекомендуемые сообщения

Кароче написал в ICCV7 for AVR вот такой код:

=============================================================

//ICC-AVR application builder : 24.11.2008 19:24:18

// Target : M8

// Crystal: 4.0000Mhz

#include <iom8v.h>

#include <macros.h>

char a[10] = {0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000};

char c = 0;

void port_init(void)

{

DDRB = 0xFF;

PORTC = 0x00; //m103 output only

DDRC = 0xFF;

PORTD = 0x00;

DDRD = 0x00;

}

#pragma interrupt_handler int0_isr:iv_INT0

void int0_isr(void)

{

//external interupt on INT0

c ++;

}

//call this routine to initialize all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

port_init();

MCUCR = 0x00;

GICR = 0x40;

TIMSK = 0x00; //timer interrupt sources

SEI(); //re-enable interrupts

//all peripherals are now initialized

}

//

void main(void)

{init_devices();

while(1)

{

PORTB = ~a[c];

}

}

=============================================================

Прикол в том, что мне нада сделать чтобы при прерывании от INT0 в PORTB увеличивался элемент масива на 1 (c ++;). Тоесть нажал кнопку которая на INT0 и элемент увеличился на 1.

Народ, плиз, напишите хоть что нибуть, ато я только начинаю МК изучать и у меня уже башка от них болит, но зато это интересно......:)

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

#pragma interrupt_handler int0_isr:iv_INT0
void int0_isr(void)
{
//external interupt on INT0
c ++;
}

Флаг прерывания кто будет гасить??

Он прото тупо у тя висет на этом моменте, а если включен WDT то перезружаеться снова.

Пишу на Си CCS PICC для PIC, CVAVR для AVR, и иногда IAR для NEC. Особенно привык к SIM300dz.

ICQ: 288449055

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

в меге 8 есть такой регистр GIFR вот там есть такой битик INTF0 вот его наверное Lexi и имеет в виду...

хотя тут написано что The flag is cleared when the interrupt routine is executed.

Alternatively, the flag can be cleared by writing a logical one to it. - вот так надо его обнулять...

хотя кажется странным что если записать 1 то он обнулится может очепядко?

МОЗГОЛОМЫ - НАСИЛИЕ НАД НАУКОЙ

Ссылка на комментарий
Поделиться на другие сайты

может очепядко?

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

Вообще-то флаги прерываний сбрасываются аппаратно, при переходе по вектору. Но иногда, действительно имеет смысл сбрасывать их принудительно.

Ссылка на комментарий
Поделиться на другие сайты

Всегда флаги сбрасываются програмно.

В атмелаф неактивный флаг прерывания в лог 1 а активный в 0.

А вот в пиках наооборот.

Вот что я посоветую http://www.gaw.ru/html.cgi/txt/doc/micros/...rh128/index.htm.

смотитрим там есть 9-ый пункт Внешние прерывания.

Отрываем ДШ на мегу8 и сравниваем ищем отличия, их не много кстати. Попричине приемственности регистров при переносе ПО на более старшие процы.

Советую глянуть сюда http://www.gaw.ru/html.cgi/txt/app/micros/avr/index.htm

И народ если кто-то не хочет смотреть в ДШ это его личное дело. Там все написано.

Пишу на Си CCS PICC для PIC, CVAVR для AVR, и иногда IAR для NEC. Особенно привык к SIM300dz.

ICQ: 288449055

Ссылка на комментарий
Поделиться на другие сайты

Всегда флаги сбрасываются програмно.

Зачем всегда-то?? ИМХО наоборот, довольно редко. Если импульс на входе INT без дребезга и с достаточно крутыми фронтами то можно не заморачиваться. Достаточно аппаратного сброса флага. Это если речь идёт о внешних прерываниях. Ну и во всех других источниках прерываний как правило этого достаточно, хотя конечно в каждом случае лучше подумать применительно к ситуации. Иногда полезно и програмно сбросить.

Пример:

На INTn зацеплен датчик с дребезгом. По первому же импульсу попадаем в обработчик прерывания, но в это время вход INTn ловит ещё импульс (дребезг однако). Теперь выйдя из обработчика по RETI, имеем включенный флаг прерывания несмотря на то, что он сбрасывался аппаратно. Если не сбросить флаг принудительно, то сразу или позже (если применяются какие-нить задержки для защиты от дребезга) мы опять попадём в обработчик INTn, что естественно не правильно..

В атмелаф неактивный флаг прерывания в лог 1 а активный в 0.

Хм.... Вообще-то с точностью до наоборот... :P

Изменено пользователем YurkaM
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...