Hallo.
Das TerminalProgramm zeigt immer nur das gleiche Zeichen.
Mein Programm:
.include <m48def.inc>
.equ XTAL= 10000000
.equ Baud= 9600
; Berechnungen
.equ UBRR_VAL = ((XTAL+baud*8)/(BAUD*16)-1) ; berechnet die Baudrate
;.equ UBRR_VAL = xtal/(baud*16)-1
.equ BAUD_REAL = (XTAL/(16*(UBRR_VAL+1))) ; und den Fehler
.equ BAUD_ERROR = ((BAUD_REAL*1000)/baud-1000) ;
.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) ;
.error "Fehler der Baudrate > 1%!"
.endif
.def i = r16
.def s = r17
.def l = r18
.def zahl = r19
.def temp1 = r23
.def temp2 = r24
.def temp3 = r25
init:
ldi i, LOW(RAMEND)
out SPL, i
ldi i, HIGH(RAMEND)
out SPH, i
;ldi i, 0x0c
;out DDRD, i ; Ein- & Ausgänge PORTD festlegen
;ldi i, 0x10
;out PORTD, i ; Pullup einschalten
ldi i, LOW(UBRR_VAL) ; eintragen
sts UBRR0L, i
ldi i, HIGH(UBRR_VAL) ; Übertragungsrate ins
sts UBRR0H, i ; entsprechende Register
ldi i, (1<<USBS0) | (3<<UCSZ00) ; 8bit Mode
sts UCSR0C, i
lds i, UCSR0B
ldi i, (1<<TXEN0); senden aktivieren
sts UCSR0B, i
loop:
ldi i, 'A'
rcall sertrans
ldi i, '7'
rcall sertrans
ldi i, 'c'
;rcall sertrans
ldi i, 'h'
;rcall sertrans
ldi i, '!'
;rcall sertrans
ldi i, 10
;rcall sertrans
ldi i, 13
;rcall sertrans
rcall delay5ms
rjmp loop
sertrans:
lds s, UCSR0A
sbrs s, UDRE0 ; kiecken ob noch übertragen wird
rjmp sertrans
sts UDR0, i
ret
delay5ms:
push i
push s ; i & s auf dem stack sichern
ldi i, 65 ; 65 Durchläufe für 5ms
delay50ms0:
ldi s, 0xff
delay50ms1:
dec s
brne delay50ms1
dec i
brne delay50ms0
pop s
pop i
ret
Die Fusebits sind korrekt gesetzt (CKSEL0111), hab schon verschiedene
Quarze probiert und das Signal am 9pol Stecker sieht auch sauber aus und
ändert wenn ick verschiedene Zeichen sende. Hab keine Ahnung wo die Säge
klemmt.
Kann mir jemand sagen, weswegen Hyperterm nur Kästchen zeigt und HTerm
nur 0x00 & 0x80 empfängt?