Name: SREG
Offset: 0x5F
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x3F
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
I T H S V N Z C
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
R0 0x00
R1 0x01
R2 0x02
R13 0x0D
Most of the instructions operating on the register file have direct access to all registers, and most of them
are single cycle instructions. As shown in the figure, each register is also assigned a data memory
address, mapping them directly into the first 32 locations of the user data space. Although not being
physically implemented as SRAM locations, this memory organization provides great flexibility in access
of the registers, as the X-, Y-, and Z-pointer registers can be set to index any register in the file.
The SPL and SPH register pair represents the 16-bit value, SP. The low byte [7:0] (suffix L) is accessible
at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01. For more details on
reading and writing 16-bit registers, refer to Accessing 16-bit Timer/Counter Registers.
When using the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F must be used. When
addressing I/O registers as data space using LD and ST instructions, 0x20 must be added to these offset
addresses.
Bit 15 14 13 12 11 10 9 8
SP11 SP10 SP9 SP8
Access R R R R RW RW RW RW
Reset 0 0 0 0 0 1 0 0
Bit 7 6 5 4 3 2 1 0
SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0
Access RW RW RW RW RW RW RW RW
Reset 1 1 1 1 1 1 1 1
The EEARL and EEARH register pair represents the 16-bit value, EEAR. The low byte [7:0] (suffix L) is
accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01. For
more details on reading and writing 16-bit registers, refer to accessing 16-bit registers in the section
above.
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 15 14 13 12 11 10 9 8
EEAR[9:8]
Access R/W R/W
Reset x x
Bit 7 6 5 4 3 2 1 0
EEAR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset x x x x x x x x
Name: EEDR
Offset: 0x40 [ID-000004d0]
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x20
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
EEDR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: EECR
Offset: 0x3F [ID-000004d0]
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x1F
Bit 7 6 5 4 3 2 1 0
EEPM[1:0] EERIE EEMPE EEPE EERE
Access R/W R/W R/W R/W R/W R/W
Reset x x 0 0 x 0
CAUTION
An interrupt between step 5 and step 6 will make the write cycle fail, since the EEPROM Master
Write Enable will time-out. If an interrupt routine accessing the EEPROM is interrupting another
EEPROM access, the EEAR or EEDR register will be modified, causing the interrupted
EEPROM access to fail. It is recommended to have the global interrupt flag cleared during all
the steps to avoid these problems.
When the write access time has elapsed, the EEPE bit is cleared by hardware. The user
software can poll this bit and wait for a zero before writing the next byte. When EEPE has been
set, the CPU is halted for two cycles before the next instruction is executed.
The following code examples show one assembly and one C function for writing to the EEPROM. The
examples assume that interrupts are controlled (e.g. by disabling interrupts globally) so that no interrupts
will occur during execution of these functions. The examples also assume that no Flash Boot Loader is
present in the software. If such code is present, the EEPROM write function must also wait for any
ongoing SPM command to finish.
Assembly Code Example(1)
EEPROM_write:
; Wait for completion of previous write
sbic EECR,EEPE
rjmp EEPROM_write
C Code Example(1)
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR (1<<EEPE))
;
/* Set up address and Data Registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMPE */
EECR |= (1<<EEMPE);
/* Start eeprom write by setting EEPE */
EECR |= (1<<EEPE);
}
EEPROM_read:
; Wait for completion of previous write
sbic EECR,EEPE
rjmp EEPROM_read
; Set up address (r18:r17) in address register
out EEARH, r18
out EEARL, r17
; Start eeprom read by writing EERE
sbi EECR,EERE
; Read data from Data Register
in r16,EEDR
ret
C Code Example(1)
Name: GPIOR2
Offset: 0x4B [ID-000004d0]
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x2B
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
GPIOR2[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: GPIOR1
Offset: 0x4A [ID-000004d0]
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x2A
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
GPIOR1[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: GPIOR0
Offset: 0x3E [ID-000004d0]
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x1E
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
GPIOR0[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: OSCCAL
Offset: 0x66
Reset: Device Specific Calibration Value
Property: -
Bit 7 6 5 4 3 2 1 0
CAL[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset x x x x x x x x
Name: CLKPR
Offset: 0x61
Reset: Refer to the bit description
Property: -
Bit 7 6 5 4 3 2 1 0
CLKPCE CLKPS[3:0]
Access R/W R/W R/W R/W R/W
Reset 0 x x x x
Related Links
System Clock Prescaler
Name: SMCR
Offset: 0x53
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x33
The Sleep Mode Control register contains control bits for power management.
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
SM[2:0] SE
Access R/W R/W R/W R/W
Reset 0 0 0 0
Note:
1. Standby mode is only recommended for use with external crystals or resonators.
Name: MCUCR
Offset: 0x55
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x35
The MCU Control register controls the placement of the interrupt vector table in order to move interrupts
between application and boot space.
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
BODS BODSE PUD IVSEL IVCE
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
to IVSEL. If IVSEL is not written, interrupts remain disabled for four cycles. The I-bit in the Status register
is unaffected by the automatic disabling.
Note: If interrupt vectors are placed in the boot loader section and Boot Lock bit BLB02 is programmed,
interrupts are disabled while executing from the application section. If interrupt vectors are placed in the
application section and Boot Lock bit BLB12 is programmed, interrupts are disabled while executing from
the boot loader section.
Move_interrupts:
; Get MCUCR
in r16, MCUCR
mov r17, r16
; Enable change of Interrupt Vectors
ori r16, (1<<IVCE)
out MCUCR, r16
; Move interrupts to Boot Flash section
ori r17, (1<<IVSEL)
out MCUCR, r17
ret
C Code Example
void Move_interrupts(void)
{
uchar temp;
/* GET MCUCR*/
temp = MCUCR;
/* Enable change of Interrupt Vectors */
MCUCR = temp|(1<<IVCE);
/* Move interrupts to Boot Flash section */
MCUCR = temp|(1<<IVSEL);
}
Name: PRR
Offset: 0x64
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
PRTWI0 PRTIM2 PRTIM0 PRTIM1 PRSPI0 PRUSART0 PRADC
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Name: MCUSR
Offset: 0x54 [ID-000004d0]
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x34
To make use of the Reset flags to identify a reset condition, the user should read and then Reset the
MCUSR as early as possible in the program. If the register is cleared before another reset occurs, the
source of the reset can be found by examining the Reset Flags.
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
WDRF BORF EXTRF PORF
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: WDTCSR
Offset: 0x60 [ID-000004d0]
Reset: 0x00
Bit 7 6 5 4 3 2 1 0
WDIF WDIE WDP[3] WDCE WDE WDP[2:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: MCUCR
Offset: 0x55
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x35
The MCU Control register controls the placement of the interrupt vector table in order to move interrupts
between application and boot space.
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
BODS BODSE PUD IVSEL IVCE
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
to IVSEL. If IVSEL is not written, interrupts remain disabled for four cycles. The I-bit in the Status register
is unaffected by the automatic disabling.
Note: If interrupt vectors are placed in the boot loader section and Boot Lock bit BLB02 is programmed,
interrupts are disabled while executing from the application section. If interrupt vectors are placed in the
application section and Boot Lock bit BLB12 is programmed, interrupts are disabled while executing from
the boot loader section.
Move_interrupts:
; Get MCUCR
in r16, MCUCR
mov r17, r16
; Enable change of Interrupt Vectors
ori r16, (1<<IVCE)
out MCUCR, r16
; Move interrupts to Boot Flash section
ori r17, (1<<IVSEL)
out MCUCR, r17
ret
C Code Example
void Move_interrupts(void)
{
uchar temp;
/* GET MCUCR*/
temp = MCUCR;
/* Enable change of Interrupt Vectors */
MCUCR = temp|(1<<IVCE);
/* Move interrupts to Boot Flash section */
MCUCR = temp|(1<<IVSEL);
}
Name: EICRA
Offset: 0x69
Reset: 0x00
Property: -
The External Interrupt Control Register A contains control bits for interrupt sense control.
Bit 7 6 5 4 3 2 1 0
ISC1[1:0] ISC0[1:0]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Value Description
00 The low level of INT1 generates an interrupt request.
01 Any logical change on INT1 generates an interrupt request.
10 The falling edge of INT1 generates an interrupt request.
11 The rising edge of INT1 generates an interrupt request.
Value Description
00 The low level of INT0 generates an interrupt request.
01 Any logical change on INT0 generates an interrupt request.
10 The falling edge of INT0 generates an interrupt request.
11 The rising edge of INT0 generates an interrupt request.
Name: EIMSK
Offset: 0x3D
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x1D
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
INT1 INT0
Access R/W R/W
Reset 0 0
Name: EIFR
Offset: 0x3C
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x1C
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
INTF1 INTF0
Access R/W R/W
Reset 0 0
Name: PCICR
Offset: 0x68
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
PCIE2 PCIE1 PCIE0
Access R/W R/W R/W
Reset 0 0 0
Name: PCIFR
Offset: 0x3B
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x1B
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
PCIF2 PCIF1 PCIF0
Access R/W R/W R/W
Reset 0 0 0
Name: PCMSK2
Offset: 0x6D
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
PCINT[23:16]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: PCMSK1
Offset: 0x6C
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
PCINT[14:8]
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Name: PCMSK0
Offset: 0x6B
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
PCINT[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: MCUCR
Offset: 0x55
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x35
The MCU Control register controls the placement of the interrupt vector table in order to move interrupts
between application and boot space.
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
BODS BODSE PUD IVSEL IVCE
Access R/W R/W R/W R/W R/W
Reset 0 0 0 0 0
to IVSEL. If IVSEL is not written, interrupts remain disabled for four cycles. The I-bit in the Status register
is unaffected by the automatic disabling.
Note: If interrupt vectors are placed in the boot loader section and Boot Lock bit BLB02 is programmed,
interrupts are disabled while executing from the application section. If interrupt vectors are placed in the
application section and Boot Lock bit BLB12 is programmed, interrupts are disabled while executing from
the boot loader section.
Move_interrupts:
; Get MCUCR
in r16, MCUCR
mov r17, r16
; Enable change of Interrupt Vectors
ori r16, (1<<IVCE)
out MCUCR, r16
; Move interrupts to Boot Flash section
ori r17, (1<<IVSEL)
out MCUCR, r17
ret
C Code Example
void Move_interrupts(void)
{
uchar temp;
/* GET MCUCR*/
temp = MCUCR;
/* Enable change of Interrupt Vectors */
MCUCR = temp|(1<<IVCE);
/* Move interrupts to Boot Flash section */
MCUCR = temp|(1<<IVSEL);
}
Name: PORTB
Offset: 0x25
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x05
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: DDRB
Offset: 0x24
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x04
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
DDRB7 DDRB6 DDRB5 DDRB4 DDRB3 DDRB2 DDRB1 DDRB0
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: PINB
Offset: 0x23
Reset: N/A
Property: When addressing as I/O Register: address offset is 0x03
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset x x x x x x x x
Name: PORTC
Offset: 0x28
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x08
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Name: DDRC
Offset: 0x27
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x07
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
DDRC6 DDRC5 DDRC4 DDRC3 DDRC2 DDRC1 DDRC0
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Name: PINC
Offset: 0x26
Reset: N/A
Property: When addressing as I/O Register: address offset is 0x06
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0
Access R/W R/W R/W R/W R/W R/W R/W
Reset x x x x x x x
Name: PORTD
Offset: 0x2B
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x0B
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: DDRD
Offset: 0x2A
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x0A
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
DDRD7 DDRD6 DDRD5 DDRD4 DDRD3 DDRD2 DDRD1 DDRD0
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: PIND
Offset: 0x29
Reset: N/A
Property: When addressing as I/O Register: address offset is 0x09
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset x x x x x x x x
Name: TCCR0A
Offset: 0x44
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x24
Bit 7 6 5 4 3 2 1 0
COM0A[1:0] COM0B[1:0] WGM0[1:0]
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
The table below shows the COM0A[1:0] bit functionality when the WGM0[1:0] bits are set to fast PWM
mode.
Table 19-4. Compare Output Mode, Fast PWM(1)
Note:
1. A special case occurs when OCR0A equals TOP and COM0A[1] is set. In this case the compare
match is ignored, but the set or clear is done at BOTTOM. Refer to Fast PWM Mode for details.
The table below shows the COM0A[1:0] bit functionality when the WGM0[2:0] bits are set to phase
correct PWM mode.
Table 19-5. Compare Output Mode, Phase Correct PWM Mode(1)
Note:
1. A special case occurs when OCR0A equals TOP and COM0A[1] is set. In this case, the compare
match is ignored, but the set or clear is done at TOP. Refer to Phase Correct PWM Mode for
details.
The table below shows the COM0B[1:0] bit functionality when the WGM0[2:0] bits are set to fast PWM
mode.
Table 19-7. Compare Output Mode, Fast PWM(1)
Note:
1. A special case occurs when OCR0B equals TOP and COM0B1 is set. In this case, the compare
match is ignored, but the set or clear is done at TOP. Refer to Fast PWM Mode for details.
The table below shows the COM0B[1:0] bit functionality when the WGM0[2:0] bits are set to phase
correct PWM mode.
Table 19-8. Compare Output Mode, Phase Correct PWM Mode(1)
Note:
1. A special case occurs when OCR0B equals TOP and COM0B[1] is set. In this case, the compare
match is ignored, but the set or clear is done at TOP. Refer to Phase Correct PWM Mode for
details.
Note:
1. MAX = 0xFF
2. BOTTOM = 0x00
Name: TCCR0B
Offset: 0x45
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x25
Bit 7 6 5 4 3 2 1 0
FOC0A FOC0B WGM02 CS0[2:0]
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
If external pin modes are used for the timer/counter0, transitions on the T0 pin will clock the counter even
if the pin is configured as an output. This feature allows software control of the counting.
Name: TIMSK0
Offset: 0x6E
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
OCIE0B OCIE0A TOIE0
Access R/W R/W R/W
Reset 0 0 0
Name: GTCCR
Offset: 0x43
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x23
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
TSM PSRASY PSRSYNC
Access R/W R/W R/W
Reset 0 0 0
Name: TCNT0
Offset: 0x46
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x26
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
TCNT0[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: OCR0A
Offset: 0x47
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x27
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
OCR0A[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: OCR0B
Offset: 0x48
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x28
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
OCR0B[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: TIFR0
Offset: 0x35
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x15
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
OCF0B OCF0A TOV0
Access R/W R/W R/W
Reset 0 0 0
Name: TCCR1A
Offset: 0x80
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
COM1A[1:0] COM1B[1:0] WGM1[1:0]
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
The table below shows the COM1x[1:0] bit functionality when the WGM1[3:0] bits are set to the fast PWM
mode.
Table 20-4. Compare Output Mode, Fast PWM
Note:
1. A special case occurs when OCR1A/OCR1B equals TOP and COM1A[1]/COM1B[1] is set. In this
case the compare match is ignored, but the set or clear is done at BOTTOM. Refer to Fast PWM
Mode for details.
The table below shows the COM1x[1:0] bit functionality when the WGM1[3:0] bits are set to the phase
correct or the phase and frequency correct, PWM mode.
Table 20-5. Compare Output Mode, Phase Correct, and Phase and Frequency Correct PWM
Note:
1. A special case occurs when OCR1A/OCR1B equals TOP and COM1A[1]/COM1B[1] is set. Refer to
Phase Correct PWM Mode for details.
Mode WGM1[3] WGM1[2] WGM1[1] WGM1[0] Timer/ TOP Update of TOV1 Flag
Counter
(CTC1)(1) (PWM1[1])(1) (PWM1[0])(1) OCR1x at Set on
Mode of
Operation
Note:
1. The CTC1 and PWM1[1:0] bit definition names are obsolete. Use the WGM1[3:0] definitions.
However, the functionality and location of these bits are compatible with previous versions of the
timer.
Name: TCCR1B
Offset: 0x81
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ICNC1 ICES1 WGM13 WGM12 CS1[2:0]
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Name: TCCR1C
Offset: 0x82
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
FOC1A FOC1B
Access R/W R/W
Reset 0 0
The TCNT1L and TCNT1H register pair represents the 16-bit value, TCNT1. The low byte [7:0] (suffix L)
is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01. For
more details on reading and writing 16-bit registers, refer to Accessing 16-bit Timer/Counter Registers.
Bit 15 14 13 12 11 10 9 8
TCNT1[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
TCNT1[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
The ICR1L and ICR1H register pair represents the 16-bit value, ICR1. The low byte [7:0] (suffix L) is
accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01. For
more details on reading and writing 16-bit registers, refer to Accessing 16-bit Timer/Counter Registers.
Bit 15 14 13 12 11 10 9 8
ICR1[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
ICR1[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
The OCR1AL and OCR1AH register pair represents the 16-bit value, OCR1A. The low byte [7:0] (suffix L)
is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01. For
more details on reading and writing 16-bit registers, refer to Accessing 16-bit Timer/Counter Registers.
Bit 15 14 13 12 11 10 9 8
OCR1A[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
OCR1A[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
The OCR1BL and OCR1BH register pair represents the 16-bit value, OCR1B. The low byte [7:0] (suffix L)
is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01. For
more details on reading and writing 16-bit registers, refer to Accessing 16-bit Timer/Counter Registers.
Bit 15 14 13 12 11 10 9 8
OCR1B[15:8]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
OCR1B[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: TIMSK1
Offset: 0x6F
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ICIE1 OCIE1B OCIE1A TOIE1
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: TIFR1
Offset: 0x36
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x16
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
ICF1 OCF1B OCF1A TOV1
Access R/W R/W R/W R/W
Reset 0 0 0 0
Name: GTCCR
Offset: 0x43
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x23
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
TSM PSRASY PSRSYNC
Access R/W R/W R/W
Reset 0 0 0
Name: TCCR2A
Offset: 0xB0
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
COM2A[1:0] COM2B[1:0] WGM2[1:0]
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
The table below shows the COM2A[1:0] bit functionality when the WGM2[1:0] bits are set to fast PWM
mode.
Table 22-4. Compare Output Mode, Fast PWM(1)
Note:
1. A special case occurs when OCR2A equals TOP and COM2A[1] is set. In this case the compare
match is ignored, but the set or clear is done at BOTTOM. Refer to Fast PWM Mode for details.
The table below shows the COM2A[1:0] bit functionality when the WGM2[2:0] bits are set to phase
correct PWM mode.
Table 22-5. Compare Output Mode, Phase Correct PWM Mode(1)
Note:
1. A special case occurs when OCR2A equals TOP and COM2A1 is set. In this case, the compare
match is ignored, but the set or clear is done at TOP. Refer to Phase Correct PWM Mode for
details.
The table below shows the COM0B[1:0] bit functionality when the WGM0[2:0] bits are set to fast PWM
mode.
Table 22-7. Compare Output Mode, Fast PWM(1)
Note:
1. A special case occurs when OCR2B equals TOP and COM2B[1] is set. In this case, the compare
match is ignored, but the set or clear is done at TOP. Refer to Fast PWM Mode for details.
The table below shows the COM2B[1:0] bit functionality when the WGM2[2:0] bits are set to phase
correct PWM mode.
Table 22-8. Compare Output Mode, Phase Correct PWM Mode(1)
Note:
1. A special case occurs when OCR2B equals TOP and COM2B[1] is set. In this case, the compare
match is ignored, but the set or clear is done at TOP. Refer to Phase Correct PWM Mode for
details.
Note:
1. MAX = 0xFF
2. BOTTOM = 0x00
Name: TCCR2B
Offset: 0xB1
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
FOC2A FOC2B WGM22 CS2[2:0]
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
If external pin modes are used for the timer/counter0, transitions on the T0 pin will clock the counter even
if the pin is configured as an output. This feature allows software control of the counting.
Name: TCNT2
Offset: 0xB2
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
TCNT2[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: OCR2A
Offset: 0xB3
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
OCR2A[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: OCR2B
Offset: 0xB4
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
OCR2B[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: TIMSK2
Offset: 0x70
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
OCIE2B OCIE2A TOIE2
Access R/W R/W R/W
Reset 0 0 0
Name: TIFR2
Offset: 0x37
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x17
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
OCF2B OCF2A TOV2
Access R/W R/W R/W
Reset 0 0 0
Name: ASSR
Offset: 0xB6
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
EXCLK AS2 TCN2UB OCR2AUB OCR2BUB TCR2AUB TCR2BUB
Access R/W R/W R R R R R
Reset 0 0 0 0 0 0 0
If a write is performed to any of the five timer/counter2 registers while its update busy flag is set, the
updated value might get corrupted and cause an unintentional interrupt to occur.
Related Links
Timer/Counter Oscillator
Name: GTCCR
Offset: 0x43
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x23
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
TSM PSRASY PSRSYNC
Access R/W R/W R/W
Reset 0 0 0
Name: SPCR0
Offset: 0x4C [ID-000004d0]
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x2C
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
SPIE0 SPE0 DORD0 MSTR0 CPOL0 CPHA0 SPR0[1:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: SPSR0
Offset: 0x4D [ID-000004d0]
Reset: 0x00
Property: When addressing as I/O Register: address offset is 0x2D
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
SPIF0 WCOL0 SPI2X0
Access R R R/W
Reset 0 0 0
Name: SPDR0
Offset: 0x4E [ID-000004d0]
Reset: 0xXX
Property: When addressing as I/O Register: address offset is 0x2E
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
SPID[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset x x x x x x x x
Name: UDR0
Offset: 0xC6
Reset: 0x00
Property: -
The USART transmit data buffer register and USART receive data buffer registers share the same I/O
address referred to as USART Data Register (UDR0). The Transmit Data Buffer register (TXB) will be the
destination for data written to the UDR0 location. Reading the UDR0 location will return the contents of
the Receive Data Buffer register (RXB).
For 5-, 6-, or 7-bit characters the upper unused bits will be ignored by the transmitter and set to zero by
the receiver.
The transmit buffer can only be written when the UDRE0 Flag in the UCSR0A register is set. Data written
to UDR0 when the UDRE0 flag is not set, will be ignored by the USART transmitter. When data is written
to the transmit buffer, and the transmitter is enabled, the transmitter will load the data into the Transmit
Shift register when the Shift register is empty. Then the data will be serially transmitted on the TxD0 pin.
The receive buffer consists of a two level FIFO. The FIFO will change its state whenever the receive
buffer is accessed. Due to this behavior of the receive buffer, do not use Read-Modify-Write instructions
(SBI and CBI) on this location. Be careful when using bit test instructions (SBIC and SBIS), since these
also will change the state of the FIFO.
Bit 7 6 5 4 3 2 1 0
TXB / RXB[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: UCSR0A
Offset: 0xC0
Reset: 0x20
Property: -
Bit 7 6 5 4 3 2 1 0
RXC0 TXC0 UDRE0 FE0 DOR0 UPE0 U2X0 MPCM0
Access R R/W R R R R R/W R/W
Reset 0 0 1 0 0 0 0 0
Name: UCSR0B
Offset: 0xC1
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
RXCIE0 TXCIE0 UDRIE0 RXEN0 TXEN0 UCSZ02 RXB80 TXB80
Access R/W R/W R/W R/W R/W R/W R R/W
Reset 0 0 0 0 0 0 0 0
Name: UCSR0C
Offset: 0xC2
Reset: 0x06
Property: -
Bit 7 6 5 4 3 2 1 0
UMSEL0 [1:0] UPM0 [1:0] USBS0 UCSZ01 / UCSZ00 / UCPOL0
UDORD0 UCPHA0
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 1 1 0
UMSEL0[1:0] Mode
00 Asynchronous USART
01 Synchronous USART
10 Reserved
11 Master SPI (MSPIM)(1)
Note:
1. The UDORD0, UCPHA0, and UCPOL0 can be set in the same write operation where the MSPIM is
enabled.
UPM0[1:0] ParityMode
00 Disabled
01 Reserved
10 Enabled, Even Parity
11 Enabled, Odd Parity
UDPRD0: Master SPI Mode: When set to one the LSB of the data word is transmitted first. When set to
zero the MSB of the data word is transmitted first. Refer to the USART in SPI Mode - Frame Formats for
details.
UCPOL0 Transmitted Data Changed (Output of TxD0 Received Data Sampled (Input on RxD0
Pin) Pin)
0 Rising XCK0 Edge Falling XCK0 Edge
1 Falling XCK0 Edge Rising XCK0 Edge
Master SPI Mode: The UCPOL0 bit sets the polarity of the XCK0 clock. The combination of the UCPOL0
and UCPHA0 bit settings determine the timing of the data transfer. Refer to the SPI Data Modes and
Timing for details.
The UBRR0L and UBRR0H register pair represents the 16-bit value, UBRR0. The low byte [7:0] (suffix L)
is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset + 0x01. For
more details on reading and writing 16-bit registers, refer to Accessing 16-bit Timer/Counter Registers.
Bit 15 14 13 12 11 10 9 8
UBRR0[11:8]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Bit 7 6 5 4 3 2 1 0
UBRR0[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: TWBR
Offset: 0xB8
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
TWBR [7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: TWSR
Offset: 0xB9
Reset: 0xF8
Property: -
Bit 7 6 5 4 3 2 1 0
TWS7 TWS6 TWS5 TWS4 TWS3 TWPS[1:0]
Access R R R R R R R/W R/W
Reset 1 1 1 1 1 0 0 0
To calculate bit rates, refer to Bit Rate Generator Unit. The value of TWPS1...0 is used in the equation.
Name: TWAR
Offset: 0xBA
Reset: 0xFE
Property: -
The TWAR should be loaded with the 7-bit slave address (in the seven most significant bits of TWAR) to
which the TWI will respond when programmed as a slave transmitter or receiver, and not needed in the
Master modes. In multi master systems, TWAR must be set in masters which can be addressed as slaves
by other masters.
The LSB of TWAR is used to enable recognition of the general call address (0x00). There is an
associated address comparator that looks for the slave address (or general call address if enabled) in the
received serial address. If a match is found, an interrupt request is generated.
Bit 7 6 5 4 3 2 1 0
TWA[6:0] TWGCE
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 1 1 1 1 1 1 1 0
Name: TWDR
Offset: 0xBB
Reset: 0xFF
Property: -
In Transmit mode, TWDR contains the next byte to be transmitted. In Receive mode, the TWDR contains
the last byte received. It is writable while the TWI is not in the process of shifting a byte. This occurs when
the TWI Interrupt flag (TWINT) is set by hardware. Note that the data register cannot be initialized by the
user before the first interrupt occurs. The data in TWDR remains stable as long as TWINT is set. While
data is shifted out, data on the bus is simultaneously shifted in. TWDR always contains the last byte
present on the bus, except after a wake up from a sleep mode by the TWI interrupt. In this case, the
contents of TWDR is undefined. In the case of a lost bus arbitration, no data is lost in the transition from
master to slave. Handling of the ACK bit is controlled automatically by the TWI logic, the CPU cannot
access the ACK bit directly.
Bit 7 6 5 4 3 2 1 0
TWD[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 1 1 1 1 1 1 1 1
Name: TWCR
Offset: 0xBC
Reset: 0x00
Property: -
The TWCR is used to control the operation of the TWI. It is used to enable the TWI, to initiate a master
access by applying a START condition to the bus, to generate a receiver acknowledge, to generate a stop
condition, and to control halting of the bus while the data to be written to the bus are written to the TWDR.
It also indicates a write collision if data is attempted written to TWDR while the register is inaccessible.
Bit 7 6 5 4 3 2 1 0
TWINT TWEA TWSTA TWSTO TWWC TWEN TWIE
Access R/W R/W R/W R/W R/W R/W R R/W
Reset 0 0 0 0 0 0 0 0
STOP condition, but the TWI returns to a well-defined unaddressed Slave mode and releases the SCL
and SDA lines to a high impedance state.
Name: TWAMR
Offset: 0xBD
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
TWAM6 TWAM5 TWAM4 TWAM3 TWAM2 TWAM1 TWAM0
Access R/W R/W R/W R/W R/W R/W R/W R
Reset 0 0 0 0 0 0 0 0
TWAR0
Address
Match
Address
Bit 0
TWAMR0
Address Bit Comparator 0
Name: ACSR
Offset: 0x50
Reset: N/A
Property: When addressing as I/O Register: address offset is 0x30
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
ACD ACBG ACO ACI ACIE ACIC ACIS[1:0]
Access R/W R/W R R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
When changing the ACIS1/ACIS0 bits, the analog comparator Interrupt must be disabled by clearing its
interrupt enable bit in the ACSR register. Otherwise, an interrupt can occur when the bits are changed.
Name: DIDR1
Offset: 0x7F
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
AIN1D AIN0D
Access R R R R R R R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: ADMUX
Offset: 0x7C
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
REFS[1:0] ADLAR MUX[3:0]
Access R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0
Related Links
ADCL and ADCH
Name: ADCSRA
Offset: 0x7A
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ADEN ADSC ADATE ADIF ADIE ADPS [2:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
The ADCL and ADCH register pair represents the 16-bit value, ADC data register. The low byte [7:0]
(suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset
+ 0x01. For more details on reading and writing 16-bit registers, refer to Accessing 16-bit Timer/Counter
Registers.
When an ADC conversion is complete, the result is found in these two registers.
When ADCL is read, the ADC data register is not updated until ADCH is read. Consequently, if the result
is left adjusted and no more than 8-bit precision is required, it is sufficient to read ADCH. Otherwise,
ADCL must be read first, then ADCH.
The ADLAR bit and the MUXn bits in ADMUX affect the way the result is read from the registers. If
ADLAR is set (ADLAR=1), the result is left adjusted. If ADLAR is cleared (ADLAR=0, which is the default
value), the result is right adjusted.
Bit 15 14 13 12 11 10 9 8
ADC[9:8]
Access R R
Reset 0 0
Bit 7 6 5 4 3 2 1 0
ADC[7:0]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
The ADCL and ADCH register pair represents the 16-bit value, ADC data register. The low byte [7:0]
(suffix L) is accessible at the original offset. The high byte [15:8] (suffix H) can be accessed at offset
+ 0x01. For more details on reading and writing 16-bit registers, refer to Accessing 16-bit Timer/Counter
Registers.
When an ADC conversion is complete, the result is found in these two registers.
When ADCL is read, the ADC data register is not updated until ADCH is read. Consequently, if the result
is left adjusted and no more than 8-bit precision is required, it is sufficient to read ADCH. Otherwise,
ADCL must be read first, then ADCH.
The ADLAR bit and the MUXn bits in ADMUX affect the way the result is read from the registers. If
ADLAR is set (ADLAR=1), the result is left adjusted. If ADLAR is cleared (ADLAR=0, which is the default
value), the result is right adjusted.
Bit 15 14 13 12 11 10 9 8
ADC[9:2]
Access R R R R R R R R
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
ADC[1:0]
Access R R
Reset 0 0
Name: ADCSRB
Offset: 0x7B
Reset: 0x00
Property: -
Bit 7 6 5 4 3 2 1 0
ACME ADTS[2:0]
Access R/W R/W R/W R/W
Reset 0 0 0 0
Related Links
Analog Comparator Multiplexed Input
Name: DIDR0
Offset: 0x7E
Reset: 0x00
Property: -
When the respective bits are written to logic one, the digital input buffer on the corresponding ADC pin is
disabled. The corresponding PIN Register bit will always read as zero when this bit is set. When an
analog signal is applied to the ADC7...0 pin and the digital input from this pin is not needed, this bit
should be written logic one to reduce power consumption in the digital input buffer.
Bit 7 6 5 4 3 2 1 0
ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D
Access R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0
Name: DWDR
Offset: 0x51 [ID-000004d0]
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x31
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
DWDR[7:0]
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
Name: SPMCSR
Offset: 0x57 [ID-000004d0]
Reset: 0x00
Property: When addressing as I/O register: address offset is 0x37
The Store Program Memory Control and Status Register (SPMCSR) contains the control bits needed to
control the boot loader operations.
When addressing I/O registers as data space using LD and ST instructions, the provided offset must be
used. When using the I/O specific commands IN and OUT, the offset is reduced by 0x20, resulting in an
I/O address offset within 0x00 - 0x3F.
Bit 7 6 5 4 3 2 1 0
SPMIE RWWSB SIGRD RWWSRE BLBSET PGWRT PGERS SPMEN
Access R/W R/W R/W R/W R/W R/W R/W R/W
Reset 0 0 0 0 0 0 0 0
the Z-pointer are ignored. The BLBSET bit will automatically be cleared upon completion of the Lock bit
set, or if no SPM instruction is executed within four clock cycles.
An LPM instruction within three cycles after BLBSET and SPMEN are set in the SPMCSR register
(SPMCSR.BLBSET and SPMCSR.SPMEN), will read either the Lock bits or the Fuse bits (depending on
Z0 in the Z-pointer) into the destination register. Refer to Reading the Fuse and Lock Bits from Software
in this chapter.
0x23 PINB 7:0 PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0
0x24 DDRB 7:0 DDRB7 DDRB6 DDRB5 DDRB4 DDRB3 DDRB2 DDRB1 DDRB0
0x25 PORTB 7:0 PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0
0x26 PINC 7:0 PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0
0x27 DDRC 7:0 DDRC6 DDRC5 DDRC4 DDRC3 DDRC2 DDRC1 DDRC0
0x28 PORTC 7:0 PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0
0x29 PIND 7:0 PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0
0x2A DDRD 7:0 DDRD7 DDRD6 DDRD5 DDRD4 DDRD3 DDRD2 DDRD1 DDRD0
0x2B PORTD 7:0 PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0
0x2C
... Reserved
0x34
0x35 TIFR0 7:0 OCF0B OCF0A TOV0
0x36 TIFR1 7:0 ICF1 OCF1B OCF1A TOV1
0x37 TIFR2 7:0 OCF2B OCF2A TOV2
0x38
... Reserved
0x3A
0x3B PCIFR 7:0 PCIF2 PCIF1 PCIF0
0x3C EIFR 7:0 INTF1 INTF0
0x3D EIMSK 7:0 INT1 INT0
0x3E GPIOR0 7:0 GPIOR0[7:0]
0x3F EECR 7:0 EEPM[1:0] EERIE EEMPE EEPE EERE
0x40 EEDR 7:0 EEDR[7:0]
7:0 EEAR[7:0]
0x41 EEARL and EEARH
15:8 EEAR[9:8]
0x43 GTCCR 7:0 TSM PSRASY PSRSYNC
0x44 TCCR0A 7:0 COM0A[1:0] COM0B[1:0] WGM0[1:0]
0x45 TCCR0B 7:0 FOC0A FOC0B WGM02 CS0[2:0]
0x46 TCNT0 7:0 TCNT0[7:0]
0x47 OCR0A 7:0 OCR0A[7:0]
0x48 OCR0B 7:0 OCR0B[7:0]
0x49 Reserved
0x4A GPIOR1 7:0 GPIOR1[7:0]
0x4B GPIOR2 7:0 GPIOR2[7:0]
0x4C SPCR0 7:0 SPIE0 SPE0 DORD0 MSTR0 CPOL0 CPHA0 SPR0[1:0]
0x4D SPSR0 7:0 SPIF0 WCOL0 SPI2X0
0x4E SPDR0 7:0 SPID[7:0]
0x4F Reserved
0x50 ACSR 7:0 ACD ACBG ACO ACI ACIE ACIC ACIS[1:0]
0x51 DWDR 7:0 DWDR[7:0]
0x52 Reserved
0x53 SMCR 7:0 SM[2:0] SE
35.1 Note
1. For compatibility with future devices, reserved bits should be written to zero if accessed. Reserved
I/O memory addresses should never be written.
2. I/O registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI and CBI
instructions. In these registers, the value of single bits can be checked by using the SBIS and SBIC
instructions.
3. Some of the Status flags are cleared by writing a logical one to them. Note that, unlike most other
AVRs, the CBI and SBI instructions will only operate on the specified bit, and can therefore be used
on registers containing such Status flags. The CBI and SBI instructions work with registers 0x00 to
0x1F only.
4. When using the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F must be used.
When addressing I/O registers as data space using LD and ST instructions, 0x20 must be added to
these addresses. The ATmega328/P is a complex microcontroller with more peripheral units than
can be supported within the 64 location reserved in Opcode for the IN and OUT instructions. For
the extended I/O space from 0x60 - 0xFF in SRAM, only the ST/STS/STD and LD/LDS/LDD
instructions can be used.
FMUL Rd, Rr Fractional Multiply Unsigned R1:R0 ← (Rd x Rr) << 1 Z,C 2
FMULS Rd, Rr Fractional Multiply Signed R1:R0 ← (Rd x Rr) << 1 Z,C 2
FMULSU Rd, Rr Fractional Multiply Signed with Unsigned R1:R0 ← (Rd x Rr) << 1 Z,C 2
BRANCH INSTRUCTIONS
BRANCH INSTRUCTIONS
BRBS s, k Branch if Status Flag Set if (SREG(s) = 1) then PC←PC+k + 1 None 1/2
BRBC s, k Branch if Status Flag Cleared if (SREG(s) = 0) then PC←PC+k + 1 None 1/2
LPM Rd, Z+ Load Program Memory and Post-Inc Rd ← (Z), Z ← Z+1 None 3