Interrupt der seriellen schnittstelle

Gast #4001938
Lesenswert?
• ▲
▼
Hallo,

frage zum Interuppt der seriellen Schnittstelle beim 8051.
Ich will gerne ein Array über sie serielle Schnittstelle versenden.

Das erste Versenden starte ich in main nach der initialisierung.
Ich habe das beispiel so aus dem Keil C51 Baldischweiler seite 202 
kapitel 10.

Ich verstehe nicht ganz wann er genau in den Interrupt der seriellen 
Schnittstelle springt.

void main ()
{

initialisierung....

//First send
ACC = uc_massage[uc_offset];   // Determine parity bit
TB8_bit = P_bit;               // Copy parity bit in TB8
SBUF = uc_massage[uc_offset];  // Begin to send
uc_offset++;

while(1);

}


void Serial_ISR () org 0x0023 ilevel 0{

  TI_bit = 0;                             // Reset TI-flag
  if( uc_massage[uc_offset] != 0 ){
      ACC = uc_massage[uc_offset];        // Determine parity bit
      TB8_bit = P_bit;                    // Copy parity bit in TB8
      SBUF = uc_massage[uc_offset];       // Begin to send
      uc_offset++;                        // Increment index of the 
array
  }
}



Angenommen uc_massage hat zwanzig zeichen. Nach dem ersten SBUF befehl 
in main ist doch der sendevorgang gestartet.
wird uc_offset++ in main noch durchgeführt?
Bleibt er solange in der ISR bis alle zwanzig zeichen gesendet sind?
Bei mir habe ich dann keine endlosschleife sondern weitere befehle die 
aber erst weiter abgearbeitet werden sollen wenn alle zweichen gesendet 
sind.
Gast #4001940
Lesenswert?
• ▲
▼
Ansonsten so...,

void Send_massage() {

  for( uc_offset=0; uc_offset<=27 ; uc_offset++){
       SBUF=uc_massage[uc_offset];
       while( TI_bit == 0);
       TI_bit = 0;
       }
}

 aber ich würde gerne den Interrupt verwenden.
Gast #4002004
Lesenswert?
• ▲
▼
Wir wissen jetzt grad nicht um welche Baudrate wir reden. Bei 9600 Baud 
kommt ein byte pro Millisekunde. Dh alle Millisekunde ist der UART 
Buffer leer und muss nachgefuellt werden. Zwischendurch hat ein 
Controller bei 1MHz jeweils 1000 Befehle fuer Anderes.

Bei den Mir bekannten controllern kommt der Transmitter Empty uebrigens 
wenn das letzte Bit des Bytes drauusen ist. Das Stopbit kommt nachher 
noch. Ist aber hier egal.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.