Sida 1 av 1

Interupt med Mega168 funkar ej

Postat: 28 april 2007, 22:31:03
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

Postat: 28 april 2007, 22:40:52
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.

Postat: 28 april 2007, 23:17:28
av Korken
Just ja!
Börjar bli lite för trött tror jag. :)

//Emil

Postat: 2 maj 2007, 23:08:27
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();???