Forum: Mikrocontroller und Digitale Elektronik Serielle Schnittstelle Atmal 89C5131A


von Alfred H. (mcjunkie)


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.

von Bernhard S. (b_spitzer)


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.

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
Noch kein Account? Hier anmelden.