Регистры общего назначения

Регистры общего назначения предназначены для временного хранения данных в процессе вычислений. Разрядность регистров определяет разрядность вычислений и, в конечном счете, разрядность самого микроконтроллера. Количество регистров может быть произвольным. Обычно в этих регистрах хранится информация, обрабатываемая в арифметико-логическом устройстве и полученный в нем результат вычислений. На некоторые из регистров могут быть возложены ещё какие либо дополнительные функции. В большинстве архитектур один из регистров отличается от других большими возможностями. Он обычно называется аккумулятор или рабочий регистр. В этом регистре может храниться одна из переменных, обрабатываемых в арифметико-логическом устройстве, и туда же помещается результат операции.

Например, ядро AVR имеет 32 регистра общего назначения(GPR - General purpose registers). Каждому регистру (рис. 3.1) соответствует дополнительно адрес в памяти данных, отображающий их в первых 32 ячейках пространства данных. Хотя они не используются как физические ячейки SRAM, такая организация памяти обеспечивает гибкое обращение к регистрам.

 
 

 

 


Рис.3.1. Файл регистров общего назначения ядра AVR

Все инструкции, в которых происходит обращение к регистрам, выполняются процессорным ядром AVR в течении одного тактового цикла.

Самые общие арифметические и логические инструкции между двумя регистрами или с одним регистром используют для записи результата тоже регистры этого регистрового файла.

Шесть из 32 регистров ( R26 …. R31), кроме обычной для прочих регистров функций, выполняют функцию 16-битных указателей адреса при косвенной адресации памяти данных и памяти программ . Эти три регистра косвенной адресации определяются как регистры X, Y и Z. При этом в четных регистрах хранятся младшие байты 16-битных переменных, а в нечетных- старшие (рис. 3.3).

 
 

 


Рис. 3.3 Регистры косвенной адресации архитектуры AVR

Регистры ввода/вывода

 

Регистры ввода/вывода предназначены для управления функциональными блоками микроконтроллера, энергонезависимой памятью данных и программ. В различных операциях регистры могут участвовать целиком или отдельными битами. Отдельный бит регистра обычно именуется флагом (flag). Обращение к регистрам в различных архитектурах организуется различным образом. Обычно обращение к ним осуществляется как к элементам процессорного ядра по присвоенным в архитектуре именам и адресам, в ряде случаев к ним обращаются с помощью специальных команд ввода/вывода.

Например, в микроконтроллере АТтеда163 предусмотрено 64 регистра ввода/вывода (Input/output registers). Все они размещены в пространстве ввода/вывода процессорного ядра по адресам от $00 по $3F. Для обращения к регистрам можно использовать специальные инструкции (IN) и вывода (OUT). При этом в инструкции необходимо указывать адрес регистра. Одновременно регистры ввода/вывода представлены также в адресном пространстве памяти данных (рис. 2.2) и к ним можно адресоваться как к обычным ячейкам SRAM с адресами от $20 до $5F. Адрес SRAM получается простым добавлением $20 к непосредственному адресу регистра. В дальнейшем, при описании регистров, адрес SRAM приводится в круглых скобках после непосредственного адреса регистра ввода/вывода. Регистры побитно адресуются специальными командами работы с битами: установки бита в регистре и очистки бита в регистре. Состояние каждого отдельного бита этих регистров может быть проверено командами переходов. Каждый регистр микроконтроллера имеет своё оригинальное имя. Все регистры микроконтроллера ATmega163 представлены в следующей таблице.

 

Таблица 3.1.

Регистры ввода/вывода микроконтроллера АТтеда163

 

I/O адрес (SRAM адрес) Имя Функция регистра
$3F ($5F) SREG Status Register
$3E ($5E) SPH Stack Pointer High
$3D ($5D) SPL Stack Pointer Low
$3B ($5B) GIMSK General Interrupt Mask Register
$3A ($5A) GIFR General Interrupt Flag Register
$39 ($59) TIMSK Timer/Counter Interrupt Mask Register
$38 ($58) TIFR Timer/Counter Interrupt Flag Register
$37 ($57) SPMCR SPM Control Register
$36 ($56) TWCR 2-wire Serial Interface Control Register
$35 ($55) MCUCR MCU general Control Register
$34 ($54) MCUSR MCU general Status Register
$33 ($53) TCCR0 Timer/Counter0 Control Register
$32 ($52) TCNT0 Timer/Counter0 (8-bit)
$31 ($51) OSCCAL Oscillator Calibration Register
$30 ($50) SFIOR Special Function I/O Register
$2F ($4F) TCCR1A Timer/Counter1 Control Register A
$2E ($4E) TCCR1B Timer/Counteri1Control Register B
$2D ($4D) TCNT1H Timer/Counter1 High-byte
$2C ($4C) TCNT1L Timer/Counter1 Low-byte
$2B ($4B) OCR1AH Timer/Counter1Output Compare Register A High-byte
$2A ($4A) OCR1AL Timer/Counter1 Output Compare Register A Low-byte
$29 ($49) OCR1BH Timer/Counter1 Output Compare Register B High-byte
$28 ($48) OCR1BL Timer/Counter1 Output Compare Register B Low-byte
$27 ($47) ICR1HT/C1 Input Capture Register High-byte
$26 ($46) ICR1LT/C1 Input Capture Register Low-byte
$25 ($45) TCCR2 Timer/Counter2 Control Register
$24 ($44) TCNT2 Timer/Counter2 (8-bit)
$23 ($43) OCR2 Timer/Counter2 Output Compare Register
$22 ($42) ASSR Asynchronous Mode Status Register
$21 ($41) WDTCR Watchdog Timer Control Register
$20 ($40) UBRRHI UART Baud Rate Register High-byte
$1F($3F) EEARH EEPROM Address Register High-byte
$1Е($ЗЕ) EEARL EEPROM Address Register Low-byte
$1D($3D) EEDR EEPROM Data Register
$1С($ЗС) EECR EEPROM Control Register
$1В($ЗВ) PORTA Data Register, Port A
$1А ($3A) DDRA Data Direction Register, Port A
$19 ($39) PINA Input Pins, Port A
$18 ($38) PORTB Data Register, Port B
$17 ($37) DDRB Data Direction Register, Port B
$16 ($36) PINB Input Pins, Port B
$15 ($35) PORTC Data Register, Port C
$14 ($34) DDRC Data Direction Register, Port C
$13 ($33) PINC Input Pins, Port C
$12 ($32) PORTD Data Register, Port D
$11 ($31) DDRD Data Direction Register, Port D
$10 ($30) PIND Input Pins, Port D
$0F ($2F) SPDR SPI I/O Data Register
$0E ($2E) SPSR SPI Status Register
$0D ($2D) SPCR SPI Control Register
$0C ($2C) UDR UART I/O Data Register
$0B ($2B) UCSRA UART Control and Status Register A
$0A ($2A) UCSRB UART Control and Status Register B
$09 ($29) UBRR UART Baud Rate Register
$08 ($28) ACSR Analog Comparator Control and Status Register
$07 ($27) ADMUX ADC Multiplexer Select Register
$06 ($26) ADCSR ADC Control and Status Register
$05 ($25) ADCH ADC Data Register High

 

Зарезервированные (не указанные в таблице) адреса при программировании микроконтроллера АТтеда163 использовать не допускается.