Hallo,

vorab: ich bin Einsteiger in die Mikrocontrollertechnik und neu hier in diesem Forum.
Zur Zeit arbeite ich Roland Walters "AVR-Lehrbuch" mit Experimentierboard und ATmega8-16 durch.

Nun habe ich ein kleines Problem mit einer Beispiel-Aufgabe aus dem Buch. Mit folgendem kleinen Listing soll ein Text auf den PC-Bildschirm geschickt werden, während gleichzeitig ein Ton ausgegeben wird.

'0404bas: USART: Senden mit Warteschlange
'Hardware: MAX232 an PD0/PD1, Nullmodemkabel zum PC
'Speaker an Pin PD5
'------------------------------------------------------------
$regfile = "m8def.dat" 'ATmega8-Deklarationen
$crystal = 3686400 'Quarz: 3,68464 MHz
$baud = 9600 'Baudrate der USART: 9600 Baud

Config Serialout = Buffered , Size = 20 '20 Bytes Warteschlange

Ddrd.5 = 1 'PD5 als Ausgang konfigurieren

Do
If _rs_head_ptrw0 = _rs_tail_ptrw0 Then
Print "Das ist ein Test."
Portd.5 = Not Portd.5 'PD 5 Speakerausgang invertieren
Waitms 1 '1 Millisekunden warten
End If

Loop
End

Leider funktioniert das so nicht. Laut Roland Walter wird mit „Config Serialout“ eine externe Assemblerroutine aus der MCS.LIB für den Interrupt „USART Transmit Complete“ eingebunden und dieser Interrupt eingeschaltet.

Dies scheint jedoch bei mir so nicht zu funktionieren. Erst, nachdem ich zusätzlich vor dem Statement noch den Befehl „Enable Interrupts“ eingebunden habe, funktioniert das Programm.

Meine Frage: Mache ich etwas falsch, oder stimmen die Angaben im Buch nicht? Schaltet die eingebundene Assemblerroutine doch nicht den benötigten Interrupt ein ?

Gruss,
Bernd