-         

Ergebnis 1 bis 5 von 5

Thema: UART Sendepuffer-Abfrage mit Bascom

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.02.2006
    Beiträge
    29

    UART Sendepuffer-Abfrage mit Bascom

    Anzeige

    Hallo erstmal,
    ich habe probleme mit einem AT90S8535. Ich programmiere mit Bascom.
    Der Proz soll eine Schleife durchlaufen und über die UART Zeichen ausgeben.
    Der Proz ist so schnell, dass wohl der Sendepuffer überschrieben wird und dann wildes Zeug gesendet wird. Den Befehl Loop until Ucsra.txc = 0 kann ich nicht verwenden.
    Die Abfrage UDR oder UCR hatte auch keinen durchschlagenden Erfolg.
    Weiss einer mehr zu meinem Problem ???

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    den txc kann man nicht nur als Flag verwenden,
    die UART kann auch nen Interrupt bei Zeichen gesendet
    ausführen. Dann nächstes Zeichen in den Puffer und fröhlich weiter im Text.

    on utxc puffer_leer
    enable utxc
    enable interrupts
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    17.02.2006
    Beiträge
    29
    Hallo Vitis,
    ist echt toll mit dem Interrupt, aber so viel ich weiss, muss doch nach jedem auslösen des Interrupts auch wieder ein Return kommen !?
    Ich überlege gerade wie ich das anstelle.
    Mein Programm übernimmt einen Wert vom ADC. Dieser wird ein bischen umgeformt , in eine Variable gepackt , zusammen mit noch anderen und alle zusammen an die UART (Sender) geschickt. Danach wird wieder der ADC abgefragt.
    So habe ich eine Schleife. Die UART sendet mit 2400 Baud und ist somit das Langsamste inder Schleife. Wie kann ich denn jetzt den Interrupt UTXC dort einbauen ? Ich kann doch nicht immer die ADC-Schleife abfragen und Berechnungen anstellen, die in Variablen abgespeichert werden und irgendwann löst der Interrupt aus, zu einer Zeit wo die berechneten Variable nicht zueinander passen, die dann übertragen werden ?!
    MfG Jürgen

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    ist doch an sich gar kein Problem.
    Du hast eine Messroutine, welche
    Dir Werte in Variablen speichert.
    Zu irgendeinem Zeitpunkt willst Du die Variablen übertragen
    und günstigstenfalls dies auch noch Byteweise.
    Nun kopierst Du Deine Messdaten in ein Array von Bytes
    und schickst das erste Byte an die UART z.B.

    UDR=sendebyte(1)
    oder am besten halt gleich nen Zähler verwenden:

    zaehler=1
    UDR=sendebyte(zaehler)

    in deiner TXC Interruptroutine erhöhste Du einfach den
    Arrayzähler um jeweils 1

    also incr zaehler

    und schickst das nächste Byte an die UART

    also: UDR = sendebyte(zaehler)

    dies machste natürlich nur so lange bis ein ganzer
    Messdatensatz drüben ist also beispielsweise

    incr zaehler
    if zaehler < 10 then
    UDR = sendebyte(zaehler)
    end if

    fürü zehn zu übertragende Bytes ... thats it
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    17.02.2006
    Beiträge
    29
    Hallo Vitis,
    der Ablauf ist mir im Prinzip klar. Ich sende mehrere Bytes hintereinander.
    Wie bastel ich denn jetzt den Sendepuffer-Leer-Interrupt dort rein. In eine Warteschleife kann ich Den Prozessor nicht führen, denn da kommt er nicht wieder raus. Er müsste eigentlich die Sendeschleife durchlaufen und dort bleiben. Sobald der Puffer leer ist müsste er zur ADC-Abfrage springen per Interrupt , Berechnungenanstellen und wieder zum Sender. Aber wo baue ich den Return-Befehl ein, den der Interrupt benötigt ??? !!!

Berechtigungen

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