реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Прерывания в at90can128
J0hnNick
сообщение Jun 9 2007, 05:36
Сообщение #1





Группа: Новичок
Сообщений: 13
Регистрация: 28-04-07
Пользователь №: 27 387



Не могу разобраться с прерываниями. Контроллер at90can128, компилятор WinAVR.
Подскажите, пожалуйста, что не так. Программка простейшаю-хочу зажечь светодиод по нажатию кнопки о потушить по отпусканию.
ps Делал аналогичную программу на STK200-все отлично в реале работает.

Код
#include <stdio.h>
#include <avr/interrupt.h>
#include <AVR/io.h>
#include <stdlib.h>
#include <AVR/iocanxx.h>
#include <avr/iocan128.h>
#include "global.h"        // include our global settings

ISR (INT0_vect)                        // обработчик прерывания INT0
{
    EIFR = 0x00;
    PORTB &= ~(1<<PORTB0);    
}

ISR (INT1_vect)                        // обработчик прерывания INT0
{
    EIFR = 0x00;
    PORTB &= (1<<PORTB0);    
}

int main(void)
{
DDRB=0xFF;             // порт B настроен на выходы
PORTB=0xFF;

DDRE=0x00;            // порт E настроен на вход
PORTE=0xFF;            // порт E подтянут к VCC

EICRB = 0b11100000;
EIMSK = 0b11000000;
SREG = 0b10000000;        //global interrupt en  


for(;;)
{
}
return 0;
}
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 9 2007, 06:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Нет под рукой DS на at90can128, но, по-моему, Вы настраиваете внешние прерывания INT6-INT7, а, обработчики прерываний INT1-INT0

PS. Нашел DS - так и есть: настраиваются одни прерывания, обрабатываются - другие. Кроме того, EIFR = 0x00 - бессмыслено. Флаги в EIFR сбрасываются аппаратно при выполнении обработчика, а, для программного сброса флагов (если это необходимо) нужно прописывать в него единицы(!) для разрядов, которые желаете сбросить.

Сообщение отредактировал Палыч - Jun 9 2007, 06:19
Go to the top of the page
 
+Quote Post
J0hnNick
сообщение Jun 9 2007, 10:59
Сообщение #3





Группа: Новичок
Сообщений: 13
Регистрация: 28-04-07
Пользователь №: 27 387



Цитата(Палыч @ Jun 9 2007, 10:07) *
Нет под рукой DS на at90can128, но, по-моему, Вы настраиваете внешние прерывания INT6-INT7, а, обработчики прерываний INT1-INT0

PS. Нашел DS - так и есть: настраиваются одни прерывания, обрабатываются - другие. Кроме того, EIFR = 0x00 - бессмыслено. Флаги в EIFR сбрасываются аппаратно при выполнении обработчика, а, для программного сброса флагов (если это необходимо) нужно прописывать в него единицы(!) для разрядов, которые желаете сбросить.

про обработку- это следу моих экспериментов с номерами прерываний. Изначально все совпадало, но все равно не работало.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 03:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.02438 секунд с 7
ELECTRONIX ©2004-2016