ok, hier wäre das programm!!!!
.include "m8def.inc"
.def temp = r16
.def save = r15
.equ CLOCK = 4000000
.equ BAUD = 37000
.equ UBRRVAL = CLOCK/(BAUD*16)-1
.org 0x000
rjmp main0
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
rjmp int_rxc
reti
reti
reti
reti
reti
reti
reti
main0:
; Stackpointer initialisieren
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
; Baudrate einstellen
ldi temp, LOW(UBRRVAL)
out UBRRL, temp
ldi temp, HIGH(UBRRVAL)
out UBRRH, temp
; Frame-Format: 8 Bit
ldi temp, (1<<URSEL)|(3<<UCSZ0)
out UCSRC, temp
weiter:
sbi UCSRB,TXEN ; TX aktivieren
sbi UCSRB, RXCIE
sbi UCSRB, RXEN
sei
loop: rjmp loop
; =============================
; Warteschleifen-Generator
; 800 Zyklen:
; -----------------------------
; warte 798 Zyklen:
zeit:
ldi R17, $03
WGLOOP0: ldi R18, $84
WGLOOP1: dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
ret
serout:
sbis UCSRA,UDRE
rjmp serout
out UDR, temp
ret ; zurück zum Hauptprogramm
int_rxc:
cli
in save, SREG
rcall zeit
rcall zeit
rcall zeit
rcall zeit
rcall zeit
rcall zeit
ldi temp, 8
rcall serout ; Unterprogramm aufrufen
rcall zeit
ldi temp, 0
rcall serout
rcall zeit ; Unterprogramm aufrufen
ldi temp, 0
rcall serout
rcall zeit ; ...
ldi temp, 0
rcall serout
rcall zeit
ldi temp, 17
rcall serout
rcall zeit
in temp, UDR
out portd, temp
out SREG, save
reti
so sieht das programm aus!!!!
aber ich verstehe nicht wieso er das zu sendende signal zweimal
schickt. macht für mich keinen sinn und ich suche auch schon ein paar
tage nach dem doofen fehler!!!!