ATmega8(L)
The following code examples show how to do an atomic write of the TCNT1 Register contents.
Writing any of the OCR1A/B or ICR1 Registers can be done by using the same principle.
Assembly Code Example(1)
TIM16_WriteTCNT1:
; Save Global Interrupt Flag
in r18,SREG
; Disable interrupts
cli
; Set TCNT1 to r17:r16
outTCNT1H,r17
outTCNT1L,r16
; Restore Global Interrupt Flag
outSREG,r18
ret
C Code Example(1)
void TIM16_WriteTCNT1( unsigned int i )
{
unsigned char sreg;
unsigned int i;
/* Save Global Interrupt Flag */
sreg = SREG;
/* Disable interrupts */
_CLI();
/* Set TCNT1 to i */
TCNT1 = i;
/* Restore Global Interrupt Flag */
SREG = sreg;
}
Note:
1. See “About Code Examples” on page 8.
The assembly code example requires that the r17:r16 Register pair contains the value to be writ-
ten to TCNT1.
Reusing the
Temporary High Byte
Register
If writing to more than one 16-bit register where the High byte is the same for all registers writ-
ten, then the High byte only needs to be written once. However, note that the same rule of
atomic operation described previously also applies in this case.
81
2486T–AVR–05/08