Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Регистровая память включает 32 регистра общего назначения (РОН или GPR), объединенных в файл, и служебные регистры ввода/вывода (РВВ). И те и другие расположены в адресном пространстве ОЗУ, но не являются его частью.
В области регистров ввода/вывода расположены различные служебные регистры (регистры управления микроконтроллером, регистры состояния и т. п.), а также регистры управления периферийными устройствами, входящими в состав микроконтроллера. По сути, управление микроконтроллером заключается в управлении этими регистрами.
Файл регистров общего назначения
Структура 32 регистров общего назначения:
Рис. 5. Регистры общего назначения CPU микроконтроллеров AVR
Все регистровые команды обращаются непосредственно к регистрам в течение одного тактового цикла. Исключением являются пять логических и арифметических операций с константами (SBCI, SUBI, CPI и ANDI) и операция ORI между константой и содержимым регистра, и команда непосредственной загрузки константы LDI. Эти команды используют вторую половину регистров регистрового файла - R16..R31.
Самые общие команды SBC, SUB, CP, AND и OR и все прочие операции между двумя регистрами или с одним регистром используют для записи результата регистровый файл.
Как показано на Рис. 5, каждому регистру соответствует адрес памяти данных, отображающий их в первых 32 ячейках пользовательского пространства данных. Хотя они не используются как физические ячейки SRAM, такая организация памяти обеспечивает гибкое обращение к регистрам, поскольку X,Y и Z регистры могут быть использованы для индексации любого регистра в файле.
Регистр X, регистр Y и регистр Z
Шесть регистров (с R26 по R31) регистрового файла, кроме обычной для прочих регистров функций, выполняют функцию 16-разрядных регистров указателей адреса при косвенной адресации SRAM. Эти три регистра косвенной адресации определяются как регистры X,Y и Z.
Рис. 6. Формат регистров X, Y и Z
В различных режимах адресации эти регистры выполняют функции фиксированного смещения, автоматического инкремента и декремента (см. описания команд).
Регистры ввода-вывода и спецфункций
Регистры ввода-вывода можно разделить на 2 группы – служебные регистры МК и регистры, относящиеся к конкретным периферийным устройствам.
К регистрам ввода-вывода можно напрямую обратиться двумя способами:
– как к пространству ввода-вывода (команды IN, OUT), в этом случае используются регистры, ввода-вывода, относящиеся к пространству ввода-вывода (адреса $00-$3F)
– как к регистрам (команды LDI, MOV,..), в этом случае адреса регистров необходимо увеличить на $20 (в таблице 1 указан в скобках), так как в начальной области памяти данных располагается 32 регистра общего назначения (3210=2016).
Таблица 1. Пространство I/O микроконтроллера ATmega8515
Адрес I/O (адрес SRAM) | Обозначение | Функция |
$3F ($5F) | SREG | Регистр статуса (Status REGister) |
$3E ($5E) | SPH | Верхний байт указателя стека (Stack Pointer High) |
$3D ($5D) | SPL | Нижний байт указателя стека (Stack Pointer Low) |
$3C ($5C) | Не используется | |
$3B $5B) | GICR | Общий регистр управления прерываниями |
$3A ($5A) | GIFR | Общий регистр флагов прерываний |
$39 ($59) | TIMSK | Регистр масок прерываний по таймерам/счетчикам (Timer/Interrupt MaSK register) |
$38 ($58) | TIFR | Регистр флагов прерывания по таймерам/счетчикам (Timer/ Counter Interrupt Flag register) |
$37 ($57) | SPMCR | Регистр управления памятью программ |
$36 ($56) | EMCUCR | Дополнительный регистр управления МК |
$35 ($55) | MCUCR | Регистр управления МК |
$34 ($54) | MCUCSR | Регистр управления и состояния МК |
$33 ($53) | TCCR0 | Регистр управления таймером/счетчиком 0 (Timer/Counter0 Control Register) |
$32 ($52) | TCNT0 | Таймер/счетчик0 (Timer/Counter0 (8-bit)) |
$31 ($51) | OCR0 | Регистр сравнения выхода таймера/счетчика 0 (Timer/Counter0 Output Compare Register) |
$30 ($50) | SFIOR | Регистр специальных функций |
$2F ($4F) | TCCR1A | Управляющий регистр A таймера/счетчика 1 (Timer/Counter1 Control Register A) |
$2E ($4E) | TCCR1B | Управляющий регистр B таймера/счетчика 1 (Timer/Counter1 Control Register A) |
$2D ($4D) | TCNT1H | Старший байт таймера/счетчика 1 (Timer/Counter1 High Byte) |
$2C ($4C) | TCNT1L | Младший байт таймера/счетчика 1 (Timer/Counter1 Low Byte) |
$2B ($4B) | OCR1AH | Старший байт регистра A сравнения выхода таймера/счетчика 1 (Timer/Counter1 Output Compare Register A High Byte) |
$2A ($4A) | OCR1AL | Младший байт регистра A сравнения выхода таймера/ счетчика 1 (Timer/Counter1 Output Compare Register A Low Byte) |
$29 ($49) | OCR1BH | Старший байт регистра B сравнения выхода таймера/счетчика 1 (Timer/Counter1 Output Compare Register B High Byte) |
$28 ($48) | OCR1BL | Младший байт регистра B сравнения выхода таймера/счетчика 1 (Timer/Counter1 Output Compare Register B Low Byte) |
$27 ($47) | Не используется | |
$26 ($46) | Не используется | |
$25 ($45) | ICR1H | Старший байт регистра захвата таймера/счетчика 1 (Timer/Counter1 Input Capture Register High Byte) |
$24 ($44) | ICR1L | Младший байт регистра захвата таймера/счетчика 1 (Timer/Counter1 Input Capture Register Low Byte) |
$21 ($41) | WDTCR | Регистр управления сторожевым таймером (Watchdog Timer Control Register) |
$20 ($40) | UBRRH, UCSRC | Регистр скорости передачи данных USART (мл.байт), Регистр управления и состояния USART |
$1F ($3F) | EEARH | Старший байт регистра адреса EEPROM (EEPROM Address Register High) |
$1E ($3E) | EEARL | Младший байт регистра адреса EEPROM (EERPOM Address Register Low) |
$1D ($3D) | EEDR | Регистр данных EEPROM (EEPROM Data Register) |
$1C ($3C) | EECR | Регистр управления EEPROM (EEPROM Control Register) |
$1B ($3B) | PORTA | Регистр данных порта A (Data Register, Port A) |
$1A ($3A) | DDRA | Регистр направления данных порта A (Data Direction Register, Port A) |
$19 ($39) | PINA | Выводы входов порта A (Input Pins, Port A) |
$18 ($38) | PORTB | Регистр данных порта B (Data Register, Port B) |
$17 ($37) | DDRB | Регистр направления данных порта B (Data Direction Register, Port B) |
$16 ($36) | PINB | Выводы входов порта B (Input Pins, Port B) |
$15 ($35) | PORTC | Регистр данных порта C (Data Register, Port C) |
$12 ($32) | PORTD | Регистр данных порта D (Data Register, Port D) |
$11 ($31) | DDRD | Регистр направления данных порта D (Data Direction Register, Port D) |
$10 ($30) | PIND | Выводы входов порта D (Input Pins, Port D) |
$0F ($2F) | SPDR | Регистр данных SPI I/O (SPI I/O Data Register) |
$0E ($2E) | SPSR | Регистр статуса SPI (SPI Status Register) |
$0D ($2D) | SPCR | Регистр управления SPI (SPI Control Register) |
$0C ($2C) | UDR | Регистр данных USART I/O (UART I/O Data Register) |
$0B ($2B) | USRA | Регистр статуса USART (USART Status Register) |
$0A ($2A) | UCRB | Регистр управления USART (USART Control Register) |
$09 ($29) | UBRRL | Регистр управления скоростью USART (USART Baud Rate Register) |
$08 ($28) | ACSR | Регистр статуса и управления аналогового компаратора (Analog Comparator Control and Status Register) |
$07 ($27) | PORTE | Регистр данных порта E (Data Register, Port E) |
$06 ($26) | DDRE | Регистр направления данных порта E (Data Direction Register, Port E) |
$05 ($25) | PINE | Выводы входов порта E (Input Pins, Port E) |
$04 ($24) | OSCCAL | Регистр калибровки тактового генератора |
$03 ($23) | Не используется | |
$02 ($22) | Не используется | |
$01 ($21) | Не используется | |
$00 ($20) | Не используется |
Регистр статуса – SREG
Регистр статуса – SREG – размещен в пространстве I/O по адресу $3F ($5F) и его биты определяются как:
Таблица 2. Формат регистра флагов микроконтроллера ATmega8515
Биты | ||||||||||
$3F ($5F) |
| REG |
Bit 7 – I: Global Interrupt Enable – Разрешение глобального прерывания.
Бит разрешения глобального прерывания для разрешения прерывания должен быть установлен в состояние 1. Управление разрешением конкретного прерывания выполняется регистрами маски прерывания GIMSK и TIMSK. Если бит глобального прерывания очищен (в состоянии 0), то ни одно из разрешений конкретных прерываний, установленных в регистрах GIMSK и TIMSK, не действует. Бит I аппаратно очищается после прерывания и устанавливается для последующего разрешения глобального прерывания командой RETI.
Bit 6 – T: Bit Copy Storage – Бит сохранения копии. Команды копирования бита BLD (Bit LoaD) и BST (Bit STore) используют бит T как бит источник и бит назначения при операциях с битами. Командой BST бит регистра регистрового файла копируется в бит T, командой BLD бит T копируется в регистр регистрового файла.
Bit 5 – H: Half Carry Flag – Флаг половинного переноса. Флаг полупереноса указывает на полуперенос в ряде арифметических операций. Устанавливается в «1», если произошел перенос из младшей половины байта в старшую половину (или заем из старшей тетрады при вычитании).
Bit 4 – S: Sign Bit, S = NÅV – Бит знака. Бит S всегда находится в состоянии, определяемом логическим «исключающим ИЛИ» (exclusive OR) между флагом отрицательного значения N и флага переполнения V.
Bit 3 – V: Two’s Complement Overflow Flag – Дополнение до двух флага переполнения. V = CÅCI. V определяемом логическим «исключающим ИЛИ» над флагом переноса С (перенос из седьмого разряда результата в восьмой) и флагом CI (перенос из шестого разряда результата в седьмой).
Bit 2 – N: Negative Flag – Флаг отрицательного значения. Флаг отрицательного значения N указывает на отрицательный результат ряда арифметических и логических операций. Определяется по старшему 7 знаковому разряду результата операции.
Bit 1 – Z: Zero Flag – Флаг нулевого значения. Флаг нулевого значения Z=1 указывает на нулевой результат ряда арифметических и логических операций.
Bit 0 – C: Carry Flag – Флаг переноса. Флаг переноса C указывает на перенос в арифметических и логических операциях. «С» указывает на перенос из седьмого разряда результата в восьмой при сложении и заем в восьмом разряде при вычитании.
Пример формирования арифметических флагов по результату операции в АЛУ.
Необходимо сложить два числа 49h + 78h и выставить арифметические флаги.
1) Перед операцией сложения необходимо числа представить в двоичной системе счисления:
4916=0100 10012, 7816=0111 10002.
2) Сложить и выставить арифметические флаги:
При сложении двух положительных чисел в дополнительном коде, получен отрицательный результат (С1h), что говорит о переполнении разрядной сетки МК.
Hf=1, перенос из младшей в старшую тетраду байта при сложении;
Nf=1, флаг отрицательного результата определяется по старшему знаковому разряду результата;
Zf=0, полученный результат отличен от нуля;
Сf=0, нет основного переноса за границы байта при сложении;
Vf=1, V = CÅCI=0Å1=1 – переполение;
Sf=0, S = NÅV=1Å1=0, полученный результат положительный, но произошло переполнение разрядной сетки МК.
Дата публикования: 2014-11-03; Прочитано: 914 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!