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.
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.
Anfänger schrieb: > Ich verstehe nicht ganz wann er genau in den Interrupt der seriellen > Schnittstelle springt. Genau dann wenn er mit dem Senden eines Bytes fertig ist: Das Stop Bit ist raus. Dann wird nämlich TI gesetzt.
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.
Okay, danke. Also wird der uc_offsett++ noch locker ausgeführt. Danke
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.