Pfad:
Home =>
AVR-Übersicht =>
Hardware => SIO
(This page in English:
)
; Testet die Serielle Schnittstelle
;
; Sendet auf der Schnittstelle mit 9k6 8N1 einen
; Text und echot dann eingehende Zeichen zurück.
;
; Hardware: Verbindung zwischen Schnittstellen
; Win-Ansteuerung: mit HyperTerminal (siehe Anleitung)
;
.NOLIST
.INCLUDE "8515def.inc"
.LIST
;
; Konstanten
;
.EQU fq=4000000 ;
Quarzfrequenz
.EQU baud=9600 ; Baudrate
.EQU bdteiler=(fq/(16*baud))-1
; Baud-Teiler
;
; Register
;
.DEF mpr=R16 ;
Universalregister
.DEF nc=R17 ; Zähler
.DEF c=R18 ; Zeichen
;
RJMP main
;
main: LDI mpr,bdteiler
; Baudgenerator
OUT UBRR,mpr
; Teiler setzen
LDI mpr,0b00011000
; Enable TX und RX
OUT UCR,mpr
; an UART Control Register
;
; Sende alle Grossbuchstaben
;
LDI c,'A'
; erster Buchstabe
LDI nc,90-65+1
; Anzahl Buchstaben
tloop: SBIS USR,UDRE
; Springe, wenn Senderegister leer
RJMP tloop
; Warte noch ein Weilchen
OUT UDR,c
; Buchstabe an Senderegister übergeben
INC c
; nächster Buchstabe
DEC nc
; Zähler Anzahl Buchstaben zu senden abwärts
BRNE tloop
; nächster Buchstabe
;
; Warte bis Zeichen empfangen, Echo zurück, für immer
;
rloop: SBIS USR,RXC
; Teste RXC-bit auf vorliegendes Zeichen
RJMP rloop
; Kein Zeichen vorhanden, warte
IN c,UDR
; Hole Zeichen vom UART ab
rwait: SBIS USR,UDRE
; Warte bis Sender bereit
RJMP rwait
; Sender noch nicht frei
OUT UDR,c
; Sende Zeichen aus
CPI c,0x0D
; Return-Zeichen?
BRNE rloop
; Kein Return, einfach weiter
LDI c,0x0A
; Lade Linefeed
RJMP rwait
; Sende noch Linefeed hinterher
©2002 by http://www.avr-asm-tutorial.net