PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR Codevision Interrupts



mr.Fashion
14.01.2006, 16:35
Hallo!

Ich programmiere auf einem Atmel STK500 Board einen ATmega162 im AVR Codevision Compiler.

Kann mir jemand sagen, wie ich im Codevision einen einfachen Interrupt schreibe, der Pulse zählen kann? Als Test habe ich einen Interrupt geschrieben in dem eine zahl einfach hochgezählt wird. Den Interrupt löse ich dabei mit einer Taste am STK500 Board aus, jedoch funktioniert das ganze nicht so wie ich will.

mfg

mr.Fashion

skillii
14.01.2006, 20:22
Könntest du das ganze vielleicht etwas beschreiben, was nicht funktioniert, damit wir dir besser helfen können.

Wird die Zahl einfach gar nicht hochgezählt oder wird sie zu oft hochgezählt (eventuell entprellen !??)...

mfg skillii

mr.Fashion
15.01.2006, 14:54
Hallo!

Die Zahl wird gar nicht hoch gezählt, der µC gibt am Terminal nur den Anfangswert aus, also 0!

Hier ist mein Programm code:

#include <mega162.h>
#include <stdio.h>

int zahl=0;

interrupt [EXT_INT0] void ext_int0_isr(void)
{


}

interrupt [PCINT0] void pin_change_isr0(void)
{

zahl++;
}

//Initialisierung der USART Schnittstelle fürs Terminal


void warte(unsigned int msec) //Damit die zahl ca. im sekunden takt ausgegeben wird

{ unsigned int i;
for (msec; msec!=0; msec--) for (i=0; i<8; i++);
}

void main(void)
{
//Initialisierung der PORTS und Timer, ...; dabei brauch ich aber nur den PORTA.1, weil der für den Interrupt 0 zuständig ist

//Interrupt initialisierung
GICR|=0x48;
PCMSK0=0x03;
GIFR=0x48;

#asm("sei"); // Global enable interrupts

while (1)
{
// Place your code here
printf("\n\r%d",zahl);
warte(1000);


};
}

skillii
15.01.2006, 15:26
Versuch einmal vor die Variablendeklaration das Schlüsselwort volatile zu schreiben.

EDIT:
also so:
volatile int zahl=0;

mr.Fashion
15.01.2006, 16:43
Hallo!

Hab ich jetz ausprobiert, funktioniert aber noch immer nicht ganz! Das komische ist, dass wenn ich das Board ausschalte und dann wieder einschalte funktioniert zählt er kurz zeitig mit der Taste hoch, jedoch wenn ich Reset drücke, gibt es mir die ganze zeit nur 0 aus und beim drücken der Taste geschieht gar nichts.

mfg

klaus

mr.Fashion
15.01.2006, 17:49
hallo!

hab das problem gefunden, aber trotzdem danke für deine hilfe.
komischer weise hat das codewizard bei der initialisiung ein register nicht hin geschrieben, das mcucr. das hab ich jetzt dazu geschrieben und jetzt funzts!

mfg

klaus