-         

Ergebnis 1 bis 9 von 9

Thema: Config SerialOut & Interrupts?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2011
    Beiträge
    7

    Config SerialOut & Interrupts?

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    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

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Vor dem "DO" solltest du noch
    Enable Interrupts
    schreiben.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Damit Interrupts, egal welcher Art, überhaupt funktionieren musst du diese Aktivieren. Dieses "Enable Interrupts" musst du dir wie einen Hauptschalter für alle Interrupts vorstellen. Erst wenn dieser Hauptschalter umgelegt wird (durch Enable Interrupts), kannst du die einzelnen Schalter für Interrupts aller Art (z.B. UART, ADC, usw.) umlegen, wodurch diese aktiviert werden.
    Dieses "Enable Interrupts" schreibt man dann normalerweise vor dem eigentlichen Hauptprogramm, weil diese Interrupts ja normalerweise nur 1x aktiviert werden müssen.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2011
    Beiträge
    7
    Hallo PicNick!
    Danke für die schnelle Reaktion. Wie in meiner Anfrage berichtet, hatte ich dieses Statement bereits eingefügt und es läuft damit.

    Mich wundert nur, dass der Verfasser des Lehrbuchs das Listing ohne das Statement zeigt und dazu schreibt, "mit dem Einbinden der Assemblerroutine würde der entsprechende Interrupt automatisch eingeschaltet". Das würde aber bedeuten, dass das explizite Enable gar nicht erforderlich wäre. Kann aber eigentlich nicht sein, denn nur damit läuft das Programm.

    Gruss,
    Bernd

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Vielleicht einfach nur ein Druckfehler.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2011
    Beiträge
    7
    Hallo Kampi,
    auch Dir vielen dank für die schnelle Reaktion. Das klappt ja sehr gut hier in diesem Forum.
    Deine Mitteilung traf ein, während ich die für PiNick schrieb.
    Ja, genau wie Du schreibst ist auch meine Vorstellung. Dann muss eigentlich der Fehler im Lehrbuch liegen.
    Der Verfasser desselben ist zur Zeit in Urlaub, sonst könnte ich ihn ja mal fragen.

    Gruss,
    Bernd

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von mikron Beitrag anzeigen
    Hallo Kampi,
    auch Dir vielen dank für die schnelle Reaktion. Das klappt ja sehr gut hier in diesem Forum.
    Deine Mitteilung traf ein, während ich die für PiNick schrieb.
    Ja, genau wie Du schreibst ist auch meine Vorstellung. Dann muss eigentlich der Fehler im Lehrbuch liegen.
    Der Verfasser desselben ist zur Zeit in Urlaub, sonst könnte ich ihn ja mal fragen.

    Gruss,
    Bernd
    Das ist vollkommen normal, solche Fehler kommen immer wieder vor, vor allem wenn der Autor selber Korrektur liest werden eigene Fehler oft übersehen. Kennt glaube ich jeder selber. Ich habe auch schon öfters Fehler in Listings entdeckt, das ist ärgerlich aber eine Korrektur, besonders bei Büchern oder CD's dürfte zu teuer werden.

    Gruß Richard

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2011
    Beiträge
    7
    Hallo

    Das Problem ist aufgeklärt:

    Ich habe bisher die Listings aus dem Buch fleissig abgetippt und dabei die Bedienung des Bascom-Editors kennengelernt. Jetzt habe ich auf der mitgelieferten Begleit-CD entdeckt, dass für Tippfaule dort auch die Listings aller Übungsaufgaben zum direkten Übernehmen enthalten sind.

    Und dort ist im entsprechenden Listing (0404.bas) das fragliche Statement „Enable Interrupts“ enthalten! Im Kommentartext gibt es den Hinweis, dass ab Bascom 1.11.7.7 (ich verwende hier 2.0.5.0).dieses Statement verwendet werden muss, damit es funktioniert. Die Hintergrund-Routine, die eingebunden wird, musste wegen eines Bugs geändert werden. Daher wird auch der Interrupt „USART Transmit Complete“ nicht mehr so eingebunden wie im Buch beschrieben.

    Naja, auf alle Fälle hat für mich die Sucherei nach dem Grund, warum es nicht funktionierte einen guten Lerneffekt gehabt, habe ich doch so nebenbei beim Stochern im Internet noch das eine oder andere zusätzlich Interessante gefunden.

    Und meiner Meinung zu dem Buch hat es keinen Abbruch getan, ich halte es nach wie vor für eine sehr gute Möglichkeit, in die AVR-Technik einzusteigen.

    Gruss,
    Bernd.

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Ahh gut zu wissen . Ja da kann der Autor des Buches ja nichts für wenn der Code auf Grund eines Bugs geändert werden muss. Es zählt halt der Gesamteindruck des Buches. Und wenn du schon selber sagst das du dabei was gelernt hast wurde der Zweck des Buches ja erfüllt

Ähnliche Themen

  1. sind ALLE Interrupts wieder ON nach Enable Interrupts?
    Von sBronco im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 19.07.2011, 15:58
  2. config ADC
    Von feitzi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 18.03.2008, 16:40
  3. Controller config
    Von NomiS im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 10.11.2007, 14:25
  4. Problem mit Serialout
    Von kryzzie im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 17.02.2006, 23:58
  5. serialout Buffer
    Von PicNick im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 17.01.2005, 08:27

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •