Hallo zusammen,
ich habe erst vorkurzem mit der Assembler Programmierung angefangen, habe auch schon einige kleinere Programme (Lauflicht etc.) in Assembler als Hausaufgabe für die Uni gemacht.
Ich wollte jetzt mein RN-Control (ATmega32) mit dem PC reden lassen, und zwar über USART. Ich habe diesen Code dazu aus einem Buch, ich
verstehe den Code, doch leider macht er nicht das was er soll.Ich nutze als Programm auf dem PC HTerm, und dies zeigt mir an das egal was ich dem uC senden lasse, immer ZWEIMAL 0x00 am PC ankommt. Ich finde den Fehler leider nicht wirklich, und wäre froh über ein wenig Hilfe.
Schonmal im voraus danke für eure Mühe.
NemesisoD
Code:
.INCLUDE "m32def.inc"
.EQU F_CPU = 16000000
.EQU BAUD = 9600
.CSEG
.ORG 0x00
rjmp Reset ; Sprung nach dem Reset
.ORG 0x029
Reset:
;Initialisiere den Stack
;-----------------------
ldi r16,LOW(RAMEND)
out SPL,r16
ldi r17,HIGH(RAMEND)
out SPH,r17
;-----------------------
ldi r17,0xFF
out DDRC,r17
ldi r17,0xFE
out PORTC,r17
;Initialisiere den USART
;-----------------------
ldi r16,LOW(F_CPU/(16*BAUD)-1) ; Berechnung des Teilers
out UBRRL,r16
ldi r17,HIGH(F_CPU/(16*BAUD)-1) ; Berechnung des Teilers
andi r16,0b01111111 ; URSEL = 0
out UBRRH,r16
sbi UCSRB,RXEN ; Empfänger aktivieren
sbi UCSRB,TXEN ; Sender aktivieren
ldi r16,(1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); URSEL=1
out UCSRC,r16 ; async, ohne Parität. 1 Stopbit, 8 Datenbit
in r17,UDR
;-----------------------
sbi UCSRB,RXCIE
sei
ldi r18,'>'
rcall send
Main:
rjmp Main
send:
sbis UCSRA,UDRE
rjmp send
out UDR,r18
ret
Lesezeichen