ATmega8 Interrupt

tilo
 
Avatar
 
Subject:

ATmega8 Interrupt

 · 
Posted: 06.10.2010 - 10:22  ·  #1
Hi,

ich bin Anfänger und versuch grad ein kleines Programm mit ein Interrupt zuschreiben.Will aber nicht funktionieren hab schon alles mögliche ausprobiert und kann den Fehler einfach nicht finden.Das Programm soll bei einem Signal an PinD.2 ein Interrupt auslösen und in diesem soll eine LED eingeschaltet werden.

Code

program Interrupts;

{$NOSHADOW}
{ $WG}                     {global Warnings off}


Device = mega8, VCC=5;
{ $BOOTRST $00C00}         {Reset Jump to $00C00}

Define_Fuses
  Override_Fuses;
  NoteBook   = A;
  COMport    = USB;
  LockBits0 = [];
  FuseBits0  = [];
  FuseBits1  = [];

Import SysTick ;
From System Import  ;


Define
  ProcClock      = 8000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $0032, iData;
  FrameSize      = $0032, iData;

Implementation

{$IDATA}

{--------------------------------------------------------------}
{ Type Declarations }

type


{--------------------------------------------------------------}
{ Const Declarations }

{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var


{--------------------------------------------------------------}
{ functions }
procedure InitPorts;
begin
  DDRD := %01100000;   //set PinD.5/6 as output
  GICR := %11000000;    //INT0/INT1 activation
  MCUCR:= %00001111; //The rising edge of INT1/INT0 generates an interrupt request
  GIMSK:= %11000000;
end InitPorts;

Interrupt INT0;
begin
  PortD.5:=1;
  PinD.5:=1;
end;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}

begin
  InitPorts;
  EnableInts;
  
    loop
  nop;
    endloop;
end Interrupts.  //Programm heißt Interrupts


tilo
E.Faber
 
Avatar
 
Subject:

Re: ATmega8 Interrupt

 · 
Posted: 06.10.2010 - 15:46  ·  #2
Hallo,
sollte nicht noch das I-Flag gesetzt werden?
asm: sei; // Setze I-Flag im SREG
gicr := ...
...
Bin mir allerdings nicht ganz sicher :sick:

Gruß
Elmar
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: ATmega8 Interrupt

 · 
Posted: 06.10.2010 - 16:30  ·  #3
Nein! Das "sei" wird durch "EnableInts" gemacht.

Aber: ausser den Pin/Port/DDR Registern nur per Read/Modify/Write
auf die Control-Register zugreifen, um die Einstellungen des Systems
nicht zu überschreiben!

Also z.B.
GICR := GICR OR %11000000; //setzten von Bit7, Bit6

Gunter
tilo
 
Avatar
 
Subject:

Re: ATmega8 Interrupt

 · 
Posted: 07.10.2010 - 09:01  ·  #4
Ich hab das jetzt ma mit den GICR := GICR OR %11000000; versucht funktioniert aber trotzdem nicht.Bei den anderen Register ebenfalls.Und bei der Simulation im E-Lab AVRco funtzt es ebenfalls nicht.

Ich erklär jetzt noch ma genauer mein Problem.Undzwar das Programm an sich funktioniert ja ich krieg keine Fehlermehldung oder so im Simulator.Nur ist das Problem das er nicht den Interrupt auslöst egal wie ich die Register setze ob nun Int1 oder Int0 oder auf welche Flanke er reagieren soll
oder sonstwas.
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   74   88 · Page-Gen-Time: 0.023939s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI