; 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 "C:\avrtools\appnotes\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 ; ;Reset-/Interrupt-Vektoren 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