Zitat Zitat von MagicWSmoke Beitrag anzeigen
Das macht zwar am hier gezeigten Beispiel keine Probleme, aber ansonsten führt GIFR.INTF0 = 1 dazu, dass intern das Register gelesen, das Bit gesetzt und somit mit dem Originalregisterinhalt ver-odert und zurückgeschrieben wird.
Dies führt bei einem Flag-Register zum Löschen aller anderen gesetzten Flags, bei mehreren Interrupt-Ereignissen will man das natürlich nicht.
Das wäre ja eine üble Falle. Zumindest in der Bascom Version 2.0.5.0 sieht es nicht so aus. Hab dazu ein kleines Programm gemacht, compiliert und die hex-Datei mit ReAVR disassemblieren lassen. Relevante ASM Befehle unten im Code.
Weder bei Gifr.intf0 = 1, Gifr = Bits(intf0) oder Set Gifr.intf0 wird Gifr geladen.

Gifr = Gifr Or &B01000000 muß man aber vermeiden

Code:
'###############################################################################
'IDE: BASCOM-AVR Demoversion 2.0.5.0
'###############################################################################
$regfile = "attiny45.dat"
$framesize = 32                         'default?
$swstack = 32                           'default?
$hwstack = 34                           'default?
$crystal = 8000000

!nop                                  'nop zum code auffinden in ASM
Gifr.intf0 = 1
!nop
Gifr = Bits(intf0)
!nop
Set Gifr.intf0
!nop
Gifr = Gifr Or &B01000000
!nop

End



ASM von ReAVR V3.2.0

    nop                            'Gifr.intf0 = 1
    ldi    r24,k40
    out    p3A,r24              '3A ist Adresse von GIFR im ATtiny45
    nop                            'Gifr = Bits(intf0)     
    ldi    r24,k40           
    out    p3A,r24
    nop                            'Set Gifr.intf0     
    ldi    r24,k40
    out    p3A,r24
    nop                            'Gifr = Gifr Or &B01000000
    in    r24,p3A
    ori    r24,k40
    out    p3A,r24
    nop

Gruß
Searcher