Interupt med Mega168 funkar ej

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Interupt med Mega168 funkar ej

Inlägg av Korken »

Hej alla glada!

Testar att clocka in data men det fungerar inte.
Kan någon se vad som är fel?

Kod: Markera allt

#include <avr/interrupt.h>
#include <util/delay.h>

#define F_CPU		8000000UL
#define C_PORT		PORTB
#define C_MASK		(0<<0)|(0<<1)
#define LED_PORT	PORTD
#define DATA_PIN	2

volatile unsigned char data = 0;

int main(void)
{
	cli();
	
	DDRB = C_MASK;
	DDRD = 0xFF;
	
	EICRA = (1<<ISC11)|(1<<ISC10);		// Rising edge
	PCICR = (1<<PCIE0);				// Interupt somewhere in PCINT0..7
	PCMSK0 = (1<<PCINT0);				// Interupt is on PCINT0
		
	sei();
	
	while(1)
	{
		LED_PORT = data;
	}
	
	return 0;
}

SIGNAL(SIG_PIN_CHANGE0)
{
	if(PINB & DATA_PIN)
		data <<= 1;
	else
		data <<= 0;
}
//Emil
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

En vild chansning så här på kvällskvisten, instruktionen data <<= 1 skiftar väl data ett steg till vänster, och data är initierat till noll. Prova att initiera data till 0x01 eller nåt.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

Just ja!
Börjar bli lite för trött tror jag. :)

//Emil
Användarvisningsbild
Stinrew
Inlägg: 954
Blev medlem: 20 augusti 2006, 03:14:41
Ort: Motala
Kontakt:

Inlägg av Stinrew »

Fungerar

Kod: Markera allt

SIGNAL(SIG_PIN_CHANGE0)
, ska det inte vara

Kod: Markera allt

ISR(SIG_PIN_CHANGE0)
istället??

Och framför allt, var sätter du Interruptbiten i sreg???
SREG |= 0x80;
Är det detsamma som sei();???
Skriv svar