Gast
#322837
Hallo zusammen, ich habe versucht einem ATmega162 das UART-Protokoll beizubringen. Allerdings geht da rein gar nichts. Es ist alles ein bisschen chaotisch. Ich benutze ein STK500. Einen externen Quarz mit 3686400 Hz. Jumper sind richtig gesetzt, AVR sitzt in Slot 3000D3. ISP Programmierung. Fuses: Divide clock by 8 ist deaktiviert Int. RC 0sc.; Start-up time: 6CK + 65ms; [CKSEL=0010 SUT=10] Und das ist komisch: ich benutze ja einen externen Quarz, aber wenn ich das entsprechende Fuse setzen möchte, schmiert mir das Teil komplett ab und ich kann gar nichts mehr setzen. So habe ich jetzt schon meinen dritten AVR am Start. :-( Ich habe ein einfaches Testprogramm geschrieben, welches mir Zeichen auf TX an den PC senden soll (empfange mit HyperTerminal) und gleichzeitig über Port B die LEDs ansteuern soll zur Kontrolle. So habe ich herausgefunden, dass das Programm in der Routine USART_Transmit hängen bleibt. Aber wieso????? Bitte helft mir, ich bin kurz davor zu verzweifeln. ;-) Schonmal danke für die Hilfe. Gruss Martin .include "m162def.inc" .def count1 = r16 ; .def akku = r17 ; .def count2 = r18 ; .def count3 = r19 ; ldi akku, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, akku ldi akku, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, akku ldi akku, $ff ; out DDRB, akku ; main: ; andi akku,1 out PORTB,akku rcall USART_Transmit rjmp main USART_Init: ;set baud rate ldi r17,0 ldi r16, 23 out UBRR0H, r17 out UBRR0L, r16 ;Enable receiver and transmitter ldi r16, (1<<RXEN0) | (1<<TXEN0) out UCSR0B,r16 ;set frame format: 8data, 1stop bit ldi r16, (1<<URSEL) | (0<<USBS0) | (3<<UCSZ00) out UCSR0C,r16 ret USART_Receive: sbis UCSR0A, RXC0 rjmp USART_Receive in akku, UDR0 out PORTB, akku ret USART_Transmit: sbis UCSR0A,UDRE0 rjmp USART_Transmit out UDR0,akku ret