When doing a write access of this I/O location, the high bit of the value written, the USART Register Select (URSEL) bit, controls which one of the two registers that will be written. If URSEL is zero during a write operation, the UBRRH value will be updated. If URSEL is one, the UCSRC setting will be updated.
The following code examples show how to access the two registers.
:. ; Set UBRRH to 2 ldi r16,0x02 out UBRRH,r16 :. ; Set the USBS and the UCSZ1 bit to one, and ; the remaining bits to zero. ldi r16,(1<<URSEL) | (1<<USBS) | (1<<UCSZ1) out UCSRC,r16 :.
:. /* Set UBRRH to 2 */ UBRRH = 0x02; :. /* Set the USBS and the UCSZ1 bit to one, and */ /* the remaining bits to zero. */ UCSRC = (1<<URSEL) | (1<<USBS) | (1<<UCSZ1); :.
As the code examples illustrate, write accesses of the two registers are relatively unaffected of the sharing of I/O location.