SUCHE MIT Google
Web virtualuniversity.ch
HOME DIDAKTIK ECDL ELEKTRONIK GUIDES HR MANAGEMENT MATHEMATIK SOFTWARE TELEKOM
DIENSTE
Anmeldung
Newsletter abonnieren
Sag's einem Freund!
VirtualUniversity als Startseite
Zu den Favoriten hinzufügen
Feedback Formular
e-Learning für Lehrer
Spenden
Autoren login
KURSE SUCHEN
Kurse veröffentlichen

Suche nach Datum:

Suche mit Schlüsselwort:

Suche nach Land:

Suche nach Kategorie:
PARTNER
ausbildung24.ch - Ausbildungsportal, Seminare, Kursen... 

 
HTMLopen.de - Alles was ein Webmaster braucht

 
PCopen.de - PC LAN Netze und Netzwerke - alles was ein IT Profi und Systemtechnicker braucht

ELEKTRONIK

Serielle Schnittstellen

SCI (serial communication interface asynchronous)

Port mit langsamer, asynchroner serieller Datenübertragung (bis etwa 100 kHz)

Betriebsart:

  • Empfang: RE = 1
  • Senden: TE = 1

Puffer und Statusbits

Statusbits:

  • RDRF (receive data register full): Wird gesetzt, wenn ein Zeichen vom Empfangsschieberegister ins Register SCDR übertragen wird. Wirdzurückgesetzt durch Lesen von SCSR und SCDR.
  • TDRE (transmit data register empty): Wird gesetzt, wenn ein Zeichen vom Register SCDR ins Sendeschieberegister übertragen wird. Wirdzurückgesetzt durch Lesen von SCSR und Schreiben von SCDR.
  • TC (transmission complete): Wird gesetzt, wenn ein Zeichen komplett aus dem Sendeschieberegister herausgeschoben wurde. Wird zurückgesetztdurch Lesen von SCSR und Schreiben von SCDR.
Empfangs-Funktion:
Die Steuerungslogik erkennt ein seriell ankommendes Zeichen und schiebt es imeingestellten Takt ins Empfangs-Schieberegister (Receive Data Register, RDR). Sobald das Zeichen vollständig im Schieberegister steht, wird es parallel ins Empfangsregister kopiert; gleichzeitig wird im Statusregister (SCSR) das Bit 5 (Receive Data Register Full, RDRF) auf 1 gesetzt. Falls im Steuerregister (SCCR2) der Empfangsinterrupt zugelassen wurde (Receive Interrupt Enable, RIE), wird auch noch ein SCI-Interrupt erzeugt.

Das sofortige Kopieren eines Zeichens vom Schieberegister ins Empfangsregister (SCDR) ist notwendig, damit ein eventuell unmittelbar nachfolgendes serielles Zeichen nicht das vorherige überschreibt. Allerdings muß das Empfangsregister bis spätestens unmittelbar vor dem nächsten Kopieren vom Prozessor gelesen werden, denn sonst geht dieses Zeichen durch Überschreiben verloren. Die Steuerung erkennt ein solches Überschreiben und setzt dann das Bit 3 im Statusregister (SCSR): Overrun Error (OR). Der Zeitabstand, in dem Zeichen eintreffen können, hängt von der Baudrate ab, z. B. beträgt der Zeichenabstand bei 9600 Baud ca. 1 ms.

Sende-Funktion:
Wird ein Zeichen ins Senderegister geschrieben, so prüft die Steuerlogik, ob das Sende-Schieberegister frei ist, um es dann dorthin zu kopieren und den Schiebevorgang zu starten. Damit ist das Senderegister wieder frei und es kann erneut per Store-Befehl beschrieben werden (nächstes Zeichen). Die Tatsache, daß dieses Schreiben erlaubt ist, signalisiert das Bit 8 (Transmit Data Register Empty, TDRE) des Statusregisters (SCSR) mit einer 1. Auch hier kann ein SCI-Interrupt ausgelöst werden, wenn im Steuerregister der Sende-Interrupt per TIE-Bit = 1 (Transmit Interrupt Enable) freigegeben ist. In manchen Fällen kann auch noch das tatsächliche Ende des Schiebevorgängs von Interesse sein (Transmission complete). Für diesen Zweck gibt es auch noch die Möglichkeit, diese Tatsache sowohl am entsprechenden Statusbit (TC) zu erkennen bzw. durch einen Interrupt melden zu lassen.

Serielles Rahmenformat:

Idle: Im Ruhezustand ist die Leitung auf auf 1-Pegel.
Beim Datenformat von 9 Bit (M = 1) ist das neunte Bit im Register SCCR1 zu finden. Beim Wert M = 0 werden 8 Bit empfangen/gesendet (Normalfall).

Setzen der Datenrate

Die Erzeugung der Datenrate erfolgt mehrstufig und ist daher etwas komplex. Es spielen dabei vier Teiler für die Taktfrequenz (in der Regel 8 MHz) zusammen (Register BAUD):

Der Takt gelangt erst in einen Prescaler mit vier möglichen Divisionsfaktoren (1, 3, 4, 13), dessen Output dann nochmals durch acht Divisoren geteilt werden kann. Bei einer Taktrate von 8 MHz lassen sich folgende Raten wählen (Einstellungen für das Praktikumssystem farbig hinterlegt):

Neben den beiden schon erwähnten Bits TE und RE sind im Register SCCR2 die Steuerbits für die Interruptfreigabe enthalten.

Das SCI-Statusregister SCSR liefert Informationen über den Ablauf der Kommunikation. Die Fehlerflags werden zurückgesetzt durch das Lesen von SCSR und SCDR.

SPI (serial peripherial interface synchronous)

Port mit schneller, synchroner serieller Datenübertragung (bis etwa 2 MHz).
Wird im Rahmen dieser Vorlesung nicht besprochen.

Programmbeispiele

Beispiel 1:

Serielles Senden und Empfangen von Zeichen mit 9600 Bd

Vereinbarungen:

                                       scdr      equ  $102F
                                       scsr      equ  $102E
                                       baud      equ  $102B
                                       sccr1     equ  $102C
                                       sccr2     equ  $102D
                                       

Einstellungen:

                                       init     ldaa  #$30
                                                staa  baud      baudrate = 9600 bit/s
                                                ldaa  #0
                                                staa  sccr1
                                                ldaa  #$0C
                                                staa  sccr2     enable transmit & receive
                                                rts
                                       

Datenverkehr:

                                       * Zeichen in Speichezelle "char" ausgeben
                                       chou     ldaa  char
                                                ldab  scsr      Sendereg. leer?
                                                andb  #$80
                                                beq   chou
                                                staa  scdr      transmit
                                                rts
                                       
                                       * Zeichen nach Speicherzelle "char" einlesen
                                       chin     ldaa  scdr      receive
                                                ldab  scsr      Empfangsreg. leer?
                                                andb  #$20
                                                beq   chin
                                                staa  char
                                                rts
                                       

Sendeschleife:

                                       main     bsr   init
                                                bsr   delay     NUR FUER PRAKTIKUMSSYSTEM:
                                       *                        Wartenzeit fuer Umschalten auf 
                                       *                        Terminalprogramm
                                       loop     bsr   chin      "Schreibmaschine"
                                                bsr   chout    
                                                bra   loop
                                       

Beispiel 2:

Serielles Senden von Zeichenketten mit 9600 Bd

Vereinbarungen:

                                       scdr      equ  $102F
                                       scsr      equ  $102E
                                       baud      equ  $102B
                                       sccr1     equ  $102C
                                       sccr2     equ  $102D
                                       

Einstellungen:

                                       init     ldaa  #$30
                                                staa  baud      baudrate = 9600 bit/s
                                                ldaa  #0
                                                staa  sccr1
                                                ldaa  #$0C
                                                staa  sccr2     enable transmit & receive
                                                rts
                                       

Zeichen in Akku A ausgeben:

                                       chou     ldab  scsr      Sendereg. leer?
                                                andb  #$80
                                                beq   chou
                                                staa  scdr      transmit
                                                rts
                                       

Zeichenkette senden: Die Adresse der Zeichenkette wird in X übergeben, Ende der Zeichenkette wird durch ETX markiert definiert durch: ETX EQU 3.

                                       saus     ldaa  0,x       Zeichen holen
                                                cmpa  #ETX      ETX (3) ? 
                                                beq   saus_e    dann fertig 
                                                inx             X inkrementieren 
                                                bsr   chou      Zeichen senden 
                                                bra   saus      und nächstes Zeichen 
                                       saus_e   rts 
                                       

Sendeschleife:

                                       main     bsr   init
                                                bsr   delay     NUR FUER PRAKTIKUMSSYSTEM:
                                       *                        Wartenzeit fuer Umschalten auf 
                                       *                        Terminalprogramm
                                       loop    ldx   #TEXT
                                                bsr   saus
                                                bra   loop
                                       *
                                       TEXT   dc.b 'Hello World'   Meldungstext 
                                              dc.b $0D,$0A,ETX     Zeilenvorschub, ETX 
                                       

Beispiel 3:

Serielles Senden und Empfangen von Zeichenketten mit 9600 Bd

Vereinbarungen: - siehe oben -

Einstellungen: - siehe oben -

Zeichen in Akku A ausgeben: - siehe oben -

Zeichenkette senden: - siehe oben -

Zeichen nach Akku A einlesen

                                       chin     ldaa  scdr      receive
                                                ldab  scsr      Empfangsreg. leer?
                                                andb  #$20
                                                beq   chin
                                                rts
                                       
Zeichenkette einlesen: Die Adresse eines Eingabepuffers wird in X übergeben. Das Eingabeende wird durch die Taste Carriage-Return (CR, $0D) signalisiert.
                                       sein     bsr   chin      Zeichen einlesen 
                                                cmpa  #$0D      Carriage Return? 
                                                beq   sein_e    ja, Ende 
                                                staa  0,x       Zeichen im Puffer speichern
                                                inx             X inkrementieren 
                                                bra   sein      und nächstes 
                                       sein_e   ldaa  #ETX      ETX anhängen (CR wird nicht mit gesp.) 
                                                staa  0,x
                                                rts 
                                       

Sendeschleife:

                                       main     bsr   init
                                                bsr   delay     NUR FUER PRAKTIKUMSSYSTEM:
                                       *                        Wartenzeit fuer Umschalten auf 
                                       *                        Terminalprogramm
                                       loop    ldx   #PUF
                                                bsr   sein
                                                bsr   saus
                                                bra   loop
                                       

Irgendwo im Programm wird ein Puffer definiert, z. B.:

                                                org   data
                                       PUF      ds.b  80        80 Bytes Puffer reservieren 
                                       

Anmerkung: "sein" überprüft nicht, ob der maximale Pufferbereich überschritten wird und so eventuell andere Variablen überschrieben werden. Versuchen Sie, eine Begrenzung der Eingabe auf z. B. 80 Zeichen zu programmieren.

DIPLOMARBEITEN UND BÜCHER

Diplomarbeiten zum Runterladen:

Suche im Katalog:
Architektur / Raumplanung
Betriebswirtschaft - Funktional
Erziehungswissenschaften
Geowissenschaften
Geschichtswissenschaften
Informatik
Kulturwissenschaften
Medien- und Kommunikationswissenschaften
Medizin
Psychologie
Physik
Rechtswissenschaft
Soziale Arbeit
Sozialwissenschaften


JOBS
HOME | E-LEARNING | SITEMAP | LOGIN AUTOREN | SUPPORT | FAQ | KONTAKT | IMPRESSUM
Virtual University in: Italiano - Français - English - Español
VirtualUniversity, WEB-SET Interactive GmbH, www.web-set.com, 6301 Zug

Partner:   Seminare7.de - PCopen.de - HTMLopen.de - WEB-SET.com - YesMMS.com - Ausbildung24.ch - Manager24.ch - Job und Karriere