Serielle Schnittstelle Atmal 89C5131A

OP #1909689
Lesenswert?
• ▲
▼
Hallo Zusammen,

bin komplett neu hier und mache gerade meine erstne ERfahrungen mit dem 
Assembler Programmieren.
HAb mir auch schon Lektüre gekauft usw.
Muss jetzt einen Vortrag über die Serielle Übertragung halten und ein 
Progrämmchen schreiben.
Das erste Hinderniss ist welche Schnittstelle es ist S0 oder S1 und 
welchen Modus sie unterstützt. Weiß das Jemand?
Ich habe ein Microcontrollerboard mit UART, ADC´s LED´s Display usw. und 
Programmieren tu ich das über Flip bzw. KEIL.
Kann mir evtl. JEmand weiterhelfen der sich auskennt?
Steh irgendwie komplett im Wald :-)
Wäre echt spitze.
Wäre auch dankbar wenn ich tipps bekomme auf was ich beim PRogrammeiren 
achten soll. Das PRogramm soll evtl erstmal nur Senden und wenn es 
möglich ist über ein Terminal am PC was ausgeben oder dergleichen.

Danke schonmal im Vorraus.
#1958037
Lesenswert?
• ▲
▼
> Das erste Hinderniss ist welche Schnittstelle es ist S0 oder S1 und
> welchen Modus sie unterstützt.
Der AT89C5131 ist im Kern ein Standard-8051 und hat (zumindest nach 
meinem Datenblatt) nur eine serielle Schnittstelle (UART). Weiterhin 
gibt es noch serielle Busse I2C un SPI.
Die Datenübertragung erfolgt Zeichenweise über das Register SBUF. Wenn 
ein Zeichen empfangen wurde, setzt der UART das Flag RI (Receive 
Interrupt, kann aber auch einfach per Polling jb RI, Zeiche_Abholen 
bedient werden)
Das Sende-Flag TI zeigt an, dass das vorige Zeichen vollständig 
versendet wurde. Man kann das Flag auf 2 Arten nutzen:
- Zeichen senden, warten bis TI=1, TI löschen
- warten bis TI=1, Zeichen senden, TI löschen
Der Unterschied ist, dass man im 2. Fall weiterarbeiten kann und nicht 
auf das Zeichen warten muss (das dauert ja einige ms). Dabei muss aber 
bei der Initialisierung darauf geachtet werden, dass man TI auf 1 setzt, 
sonst hängt das Programm beim ersten senden.

Fehlt nur noch die Initialisierung im Register SCON und die 
Baudratenerzeugung. Serielle Betriebsarten sind eigentlich nur 2 
interessant. Mode 1 (8 Bit UART) und Mode 3 (9 Bit UART, nutzbar für 
Parity). Die Modi 0 und 2 sind Synchrone Schnittstellen, die (fast) 
niemand mehr braucht.
Die Baudrate kann beim 89C5131 der Timer 1, Timer 2 oder der 
Baudratengenerator erzeugen. Der BRG kann eh nix anderes, also nimmt man 
den, wenn vorhanden.

Initialisierung für 12 MHz-Quarz, 4800 Baud, mit Timer 1:
1
orl  PCON,#10000000b  ;Bit SMOD1=1 bei 4800 Baud 
2
mov  TH1,#243   ;Reloadwert ins Timer-HByte 
3
mov  TL1,#243  ;Anfangswert Timer 
4
anl  TMOD,#00001111b  ;8-Bit-Timer1 mit Reload 
5
orl  TMOD,#00100000b  ; 
6
setb  TR1  ;Start Timer1 
7
mov  SCON,#01010010b   ;8-Bit-UART, Empfang zulassen, TI setzen 
8
clr  ES  ;kein serieller Interrupt 
9
clr  ET1  ;kein Timer-Interupt
Initialisierung mit Baudratengenerator für 9600 Baud, 12MHz:
1
orl  PCON,#10000000b  ;SMOD1=1 bei 9600 Baud 
2
mov  BDRCON,#00011111b ;int. Baudraten-Generator für Senden und Empfangen, SPD=1 
3
mov  BRL,#217 ;Reloadwert für int. Baudratengenerator 
4
mov  SCON,#01010010b   ;8-Bit-UART, Empfang zulassen, TI gesetzt
5
clr  ES  ;kein serieller Interrupt
Programmteil Zeichen_Senden:
1
jnb  TI,weiter  ;ist Schnittstelle frei? 
2
mov  SBUF,#41h  ;Ascii „A“ ausgeben 
3
  ; oder mov SBUF,#'A'
4
clr  TI  ;Flag löschen, Schnittstelle belegt 
5
weiter:
Programmteil Zeichen_empfangen:
1
jnb  RI,weiter  ;Sprung wenn kein Zeichen empfangen 
2
mov  a,SBUF  ;Zeichen abholen 
3
clr   RI  ;Empfangsflag löschen 
4
weiter:    ;weiter im Programm

Für die Berechnung der Baudrate (Formeln siehe Datenblatt oder Lehrbuch) 
muss man beim int.Baudratengenerator beachten, das nicht der 
Maschinentakt (FOsz/12 bzw. FOsz/6 bei X2-Mode) sondern der 
Peripherietakt FPER= FOsz/2 einzusetzen ist. Mit 12MHz-Quarz ist bei 
38400 Baud schluss, mit 11.0592MHz geht es bis 115.200 Baud.

tschuessle
B.

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.