прерывание на аттини_13а

Здесь все вопросы по языку программирования С
Ответить
AVRIK
Сообщения: 121
Зарегистрирован: 24 сен 2016, 11:25

прерывание на аттини_13а

Сообщение AVRIK » 20 май 2018, 21:23

Приветствую Алексей!
Я все в песочнице ковыряюсь, и вот не могу разрулить с прерыванием по rising edge of INT0.
Первое прерывание происходит как должно, а далее микроконтроллер состояние INT0 не контролирует.
После сброса первое прерывание читается, а потом опять ступор. Вставлял единицу в GIFR|=_BV(INTF0);
пофигу, ждет сброса. Вот я и вставил дога, но вопрос то ищет ответа!!!
Что не так?

Код: Выделить всё

/*
 * interrupt.c
 *
 * Created: 11.05.2018 0:32:27
 *  Author: SUN
 */ 

#define F_CPU96000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/wdt.h>
 volatile unsigned char A=0;
void int_set(void)
{
	MCUCR|=_BV(ISC01);              //ISC01&ISC00=1=RISE
	MCUCR|=_BV(ISC00);              //ISC01=1:ISC00=0  FULL
	GIMSK|=_BV(INT0);
	sei();
}

ISR(INT0_vect)
{
	A=1;
	
}
int main(void)
{
	DDRB=0x1D;
	PORTB=0x00;
	int_set();
	sei();
 //   wdt_enable(WDTO_2S);
	
    while(1)
    {
	   
		if (A)
		{
			_delay_ms(150);
		PORTB|=_BV(PINB3);
		_delay_ms(350);
		PORTB&=~_BV(PINB3);
		_delay_ms(250);
	
		PORTB|=_BV(PINB3);
		_delay_ms(350);
		PORTB&=~_BV(PINB3);
		_delay_ms(400);	
			
		A=0;	
		} 
		else
		{
			PORTB|=_BV(PINB2);
			_delay_ms(1);
			PORTB&=~_BV(PINB2);
			_delay_ms(1);
		
		} 
	
	 
    
    }
}

Аватара пользователя
gurvinok
Сообщения: 1484
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: прерывание на аттини_13а

Сообщение gurvinok » 20 май 2018, 23:36

Вот это что за колдунство? #define F_CPU96000UL
У меня все работает. Вот наглядное кино.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 121
Зарегистрирован: 24 сен 2016, 11:25

Re: прерывание на аттини_13а

Сообщение AVRIK » 21 май 2018, 18:24

Спасибо! :D

Ответить