DDRB_o = 0x4 PORTB_o = 0x5 DDRD_o = 0x0a PORTD_o = 0x0b UCSR0A = 0xc0 UCSR0B = 0xc1 UCSR0C = 0xc2 UBRR0L = 0xc4 UBRR0H = 0xc5 UDR0 = 0xc6 .global main .global __vector_18 /* rutina de transmissió de byte, el valor a transmetre és al registre r16 */ tx: lds r17,UCSR0A sbrs r17,5 rjmp tx sts UDR0,r16 ret /* defineixo la rutina d'interrupció per recepció de byte a la USART */ __vector_18: lds r16,UDR0 call tx reti main: /* set baud rate a 9600*/ ldi r16, 0 sts UBRR0H,r16 ldi r16, 103 sts UBRR0L,r16 /* set frame format */ /* tot i que el valor dels registres després d'un reset ja és correcte (asíncron, 8 bits de dades, 1 bit de parada, sense paritat, velocitat normal, comunicació no multiprocessor) assegurem aquesta configuració escrivint el valor als registres*/ ldi r16, 0b00100000 sts UCSR0A, r16 ldi r16, 0b00000110 sts UCSR0C, r16 /* enable rx, tx, amb interrupció de rx */ ldi r16, 0b10011000 sts UCSR0B,r16 /* configuració dels pins */ ldi r16,0b00000010 out DDRD_o,r16 /* habilitem interrupcions globals */ sei /* el bucle principal no fa res */ loop: rjmp loop ret