www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Serielle Schnittstelle Atmal 89C5131A


Autor: Alfred Hunter (mcjunkie)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernhard Spitzer (b_spitzer)
Datum:

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.