VI. Register
General Purpose Register (GPR)
Dieses Registerfile mit 32 8-Bit-Arbeitsregistern ist direkt mit der ALU verbunden, so dass ein direkter Zugriff auf zwei unabhängige Register innerhalb eines einzigen Maschinenzyklus erfolgt.
Die Register können direkt oder über den Adressraum des Datenspeichers angesprochen werden.
Alle Befehle, die im Operanden ein Register und einen unmittelbaren Wert haben (immediate), müssen über die (oberen) Register R16 bis R31 ausgeführt werden:
Besondere Bedeutung besitzen die Register R26 bis R31. Das Register mit der tieferen Adresse bildet das Low-Byte, das mit der höheren Adresse das High-Byte.
- Registerpaar R26/R27 X-Pointer (16 Bit)
- Registerpaar R28/R29 Y-Pointer (16 Bit)
- Registerpaar R30/R31 Z-Pointer (16 Bit)
Beim ATS901200 ist nur der Z-Pointer (8 Bit) vorhanden. Er befindet sich im Register R30.
STATUS-Register
Das Statusregister (SREG) enthält die nach einer ausgeführten Operation existenten CPU-Zustände. Das SREG befindet sich im I/O-Register an der Adresse $3F und demgemäss im Datenspeicher-Adressraum an der Adresse $5F.
Die Bits 0 bis 7 werden durch Flags mit spezieller Bedeutung verkörpert.
7 6 5 4 3 2 1 0 I T H S V N Z C
C
Carry-Flag Z
Zero-Flag N
Negative-Flag V
Zweierkomplement-Überlauf-Flag S
Sign-Flag, S = N .XOR. V für vorzeichenbehaftete Vergleiche H
Half-Carry-Flag T
Bit-Copy-Storage I
Globale-Interrupt-Enable
I/O-Register
Sämtliche Ports und Peripheriemodule sind im I/O-Adressraum von $00 bis $3F abgelegt (= 64 I/O-Register). Zwischen den I/O- Re- gistern und den Arbeitsregistern (GPR) können Daten direkt mit den Befehlen IN und OUT ausgetauscht werden.
Werden die I/O- Register über den Adressraum des Datenspeichers angesprochen, muss zur jeweiligen I/O-Register-Adresse der Wert $20 addiert werden.
Bei allen I/O-Registern mit der Adresse $00 bis $1F können einzelne Bits über die Befehle SBI und CBI gesetzt bzw. gelöscht werden.Aufgrund der unterschiedlichen Hardwaretiefe der einzelnen AVR-Mikrocontroller sind nicht an allen 64 I/O-Adressen auch wirklich physikalische Register implementiert (hervorgehobene Zellen für den at90s1200).
$00 |
reserviert |
PINF Input Pins Port F |
|
$01 |
reserviert |
PINE Input Pins Port E |
|
$02 |
reserviert |
DDRE Data Direction Register Port E |
|
$03 |
reserviert |
Port E Data Register Port E |
|
$04 |
ADCL |
ADC Data Register Low |
|
$05 |
ADCH |
ADC Data Register High |
|
$06 |
ADCSR |
ADC Control and Status Register |
|
$07 |
ADMUX |
ADC Multiplexer Select Register |
|
$08 |
ACSR |
Analog Comparator Control and Status |
|
Register |
|||
$09 |
UBRR |
UART Baude Rate Register |
|
$0A | UCR | UART Control Register | |
$0B | USR | UART Status Register | |
$0C | UDR | UART I/O Data Register | |
$0D | SPCR | SPI Control Register | |
$0E | SPSR | SPI Status Register | |
$0F | SPDR | SPI I/O Data Register | |
$10 | PIND | Input Pins Port D | |
$11 | DDRD | Data Direction Register Port D | |
$12 | PORTD | Data Register Port D | |
$13 | PINC | Input Pins Port C | |
$14 | DDRC | Data Direction Register Port C | |
$15 | PORTC | Data Register Port C | |
$16 | PINB | Input Pins Port B | |
$17 | DDRB | Data Direction Register Port B | |
$18 | PORTB | Data Register Port B | |
$19 | PINA | Input Pind Port A | |
$1A | DDRA | Data Direction Register Port A | |
$1B | PORTA | Data Register Port A | |
$1C | EECR | EEPROM Control Register | |
$1D | EEDR | EEPROM Data Register | |
$1E | EEARL | EEPROM Adress Register Low Byte | |
$1F | EEARH | EEPROM Adress Register High Byte | |
$20 | reserviert | ||
$21 | WDTCR | Watchdog Timer Control register | |
$22 | reserviert | ||
$23 | reserviert | OCR2 Timer/Counter 2 | |
Output Compare register | |||
$24 | ICR1L | T/C 1 Input Capture Register Low Byte | TCNT2 Timer/Counter 2 (8-Bit) |
$25 | ICR1H | T/C 1 Input Capture Register High Byte | TCCR2 Timer/Counter2 |
Control Register | |||
$26 | reserviert | ICR1L | |
$27 | reserviert | ICR1H | |
$28 | OCR1BL | Timer/Counter1 Output Compare | |
Register B Low Byte | |||
$29 | OCR1BH | Timer/Counter1 Output Compare | |
Register B High Byte | |||
$2A | OCR1AL | Timer/Counter1 Output Compare | |
Register A Low Byte | |||
$2B | OCR1AH | Timer/Counter1 Output Compare | |
Register A High Byte | |||
$2C | TCNT1L | Timer/Counter1 Low Byte | |
$2D | TCNT1H | Timer/Counter1 High Byte | |
$2E | TCCR1B | Timer/Counter1 Control Register B | |
$2F | TCCR1A | Timer/Counter1 Control Register A | |
$30 | reserviert | ASSR Asynchronous Mode Status Register | |
$31 | reserviert | OCR0 Timer/Counter0 | |
Output Compare Register | |||
$32 | TCNT0 | Timer/Counter 0 (Bit) | |
$33 | TCCR0 | Timer/Counter 0 Control Register | |
$34 | reserviert | MCUSR MCU Status Register | |
$35 | MCUCR | MCU General Control Register | |
$36 | reserviert | TIFR | |
$37 | reserviert | TIMSK | |
$38 | TIFR | Timer/Counter Interrupt Flag Register | |
$39 | TIMSK | Timer/Counter Interrupt Mask Register | |
$3A | GIFR | General Interrupt Flag Register | |
EICR External Interrupt Control Register | |||
$3B | GIMSK | General Interrupt Mask Register | |
RAMPZ RAM Page Z Select Register | |||
$3C | reserviert | XDIV XTAL Divide Control Register | |
$3D | SPL | Stack Pointer Low | |
$3E | SPH | Stack Pointer High | |
$3F | SREG | Status Register |