Gast
#2369163
Hallo! ich habe einen avr 644p und möchte so wie es im "AVR-Tutorial: UART" mit dem mega8 beschrieben ist zeichen an meinen Rechner per rs232 senden. - Hardware Max 232 & Co ist aufgebaut und funktioniert - Hterm installiert - ich benutze AVR Studio - habe versucht den Quelltext aus dem "AVR-Tutorial: UART" auf meinen 644p anzupassen. Was habe ich vergessen anzupassen oder falsch gemacht? Gibt es eine Diagnose-Möglichkeit um festzustellen, wo der 644p hängen bleibt und kann man die Speicher auslesen? Besten Dank im Voraus!!! .include "m644pdef.inc" .def temp = r16 .def zeichen = r17 .def rxy = r19 .equ F_CPU = 2000000 ; 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 ldi temp, HIGH(RAMEND) out SPH, temp ldi temp, LOW(RAMEND) out SPL, temp ; Baudrate einstellen ldi temp, HIGH(UBRR_VAL) sts UBRR0H, temp ldi temp, LOW(UBRR_VAL) sts UBRR0L, temp ; Frame-Format: 8 Bit ldi temp, (1<<USBS0)|(3<<UCSZ00) sts UCSR0C, temp lds rxy,UCSR0B sbr rxy,1<<TXB81 sts UCSR0B,rxy loop: ldi zeichen, 'T' rcall serout ; Unterprogramm aufrufen ldi zeichen, 'e' rcall serout ; Unterprogramm aufrufen ldi zeichen, 's' rcall serout ; ... ldi zeichen, 't' rcall serout ldi zeichen, '!' rcall serout ldi zeichen, 10 rcall serout ldi zeichen, 13 rcall serout rcall sync rjmp loop serout: lds rxy,UCSR0A sbrs rxy,UDRE0 rjmp serout sts UDR0, zeichen ret ; zurück zum Hauptprogramm ; kleine Pause zum Synchronisieren des Empfängers, falls zwischenzeitlich ; das Kabel getrennt wurde sync: ldi r16,0 sync_1: ldi r17,0 sync_loop: dec r17 brne sync_loop dec r16 brne sync_1 ret