sytse
Euh......
Hey allemaal,
IK krijg het niet voor elkaar om de USART van een mega8 aan de gang te krijgen. Denk dat het een fout met initalizeren is maar ik kan het niet vinden.
.device ATmega8
.include "m8def.inc"
.def var = r16 ;Werkregister
.def var2 = r17 ;2e Werkregister
.def rec_buffer = r18
.CSEG
.ORG $0000 ;Begin van het programma
rjmp main ;Spring naar hoofdprogramma
init_port:
ldi var, 0xFE
out DDRD, var
ldi var, 0xFF
out DDRB, var
ldi var, 0x00
out portB, var
ret
USART_Init:
; Set baud rate
ldi var, 0x00
ldi var2, 0x19
out UBRRH, var
out UBRRL, var2
; Set frame format: 8data, 1stop bit
ldi var, (1<<URSEL)|(3<<UCSZ0)
out UCSRC, var
; Enable Receiver
ldi var, (1<<RXEN)
out UCSRB, var
ret
USART_Receive:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
; Get and return received data from buffer
in rec_buffer, UDR
out PORTB, rec_buffer
ret
main:
ldi var, high(RAMEND) ; set stack
out SPH, var
ldi var, low(RAMEND)
out SPL, var
rcall init_port
rcall USART_Init
loop:
call USART_Receive
rjmp loop
Dit is de ASM-code waarin ik het probleem heb uitgefilterd. het is dus de bedoeling dat ik via de USART een byte stuur en dat dat als binaire code op poortB word weergegeven. De instellingen die ik gebruik zijn 9600kbs geen pariteit, een stop-bit, 4Mhz
Als ik nu een byte stuur via m'n terminal dan word er af en toe 1 bit(BIT0) hoog maar meestal zijn ze allemaal laag. als ik de baudrate van m'n terminal op 2400 zet dan worden de eerst 6 bits van de verzonden byte goed weer gegeven maar de laatse 2 niet.
Wie kan me helpen??
Sytse
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
sven
pointers don't kill programs, programmers kill programs
heb je je CKSEL fuses wel ingesteld op external Xtal?
Standaard wordt de avr verscheept met cksel =0001 (interne RC-osc)
Als deze niet juist staat, klopt je UBRR niet meer
[Bericht gewijzigd door sven op ]
sytse
Euh......
Op 9 april 2003 18:18:14 schreef sven:
heb je je CKSEL fuses wel ingesteld op external Xtal?
Standaard wordt de avr verscheept met cksel =0001 (interne RC-osc)
Als deze niet juist staat, klopt je UBRR niet meer
Ja je heb gelijk, die stond verkeerd. Ik dacht dat als je dat ingesteld had dat ie altijd zo bleef staan, niet dus. Nu werkt alles. En dat die laatse twee bits niet weergegeven worden komt omdat PB6 en PB7 door het kristal worden gebruikt.Is trouwens wel jammer dat je op de mega8 geen volle 8 bits poort overhoud als je de USART gebruikt.
Bedankt nu kan ik weer een stuk verder
Sytse
Ps. Bastiaan die mail mag je wel laten zitten 
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Op 10 april 2003 09:57:08 schreef sytse:
[...]
Ps. Bastiaan die mail mag je wel laten zitten
Ok, fijn dat het nu wel werkt. 