Hallo Leute,
ich habe mich seit kurzem mal an das UART meines Atmega8 gewagt. Allerdings habe ich das Problem das ich in meinem Terminalprogramm ( Hterm) nur manchmal das vom Chip gesendete 'Test!\n\r' empfange. Wenn ich die Verbindung bei Hterm allerdings öfters neu verbinde kommt das Test irgendwann. Kann mir jemand sagen wo mein Fehler liegt?
Ich möchte damit wenns läuft Messwerte übertragen und es hat ja keinen Sinn wenn die nur manchmal richtig übertragen werden.
Hier ist der von mir verwendete Code:
DankeCode:.include "m8def.inc" .def temp = r16 .def zeichen = r17 .equ F_CPU = 4000000 ; Systemtakt in Hz .equ BAUD = 9600 ; Baudrate ; Berechnungen .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; clever runden .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; Reale Baudrate .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; Fehler in Promille .if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) ; max. +/-10 Promille Fehler .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!" .endif ; Stackpointer initialisieren ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ; Baudrate einstellen ldi temp, HIGH(UBRR_VAL) out UBRRH, temp ldi temp, LOW(UBRR_VAL) out UBRRL, temp ldi temp, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)|(0<<UCSZ2)|(0<<UMSEL)|(0<<UPM0)|(0<<UPM1)|(0<<USBS) out UCSRC, temp sbi UCSRB,TXEN loop: ldi zeichen, 'T' rcall senden ldi zeichen, 'e' rcall senden ldi zeichen, 's' rcall senden ldi zeichen, 't' rcall senden ldi zeichen, '!' rcall senden ldi zeichen, 10 rcall senden ldi zeichen, 13 rcall senden rjmp loop senden: sbis UCSRA,UDRE rjmp senden out UDR, zeichen ret
Michael







Zitieren

Lesezeichen