Микроконтроллеры для систем автоматики - часть 4

 

  Главная      Учебники - Производство     

 

поиск по сайту           правообладателям

 

 

 

 

 

 

 

 

 

содержание   ..  1  2  3  4  5  ..

 

 

Микроконтроллеры для систем автоматики - часть 4

 

 

 

15 

Окончание табл. 3.1. 

I/O адрес (SRAM 

адрес) 

Имя 

Функция регистра 

$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 

Зарезервированные  (не  указанные  в  таблице)  адреса  при  программировании 

микроконтроллера ATmega163 использовать не допускается. 

Р

Е Г И С Т Р   С О С Т О Я Н И Я

 

Регистр  состояния  (Status register)  предназначен  для  хранения  отдельных 

признаков  результата,  полученного  при  выполнении  различных  арифметических  и 
логических 

операций 

в 

арифметико-логическом 

устройстве. 

Регистр 

обычно 

рассматривается состоящим из отдельных бит (флагов), каждый из которых несет в себе 
определенную информацию о каком либо одном признаке результата. Типовыми флагами 
регистра состояния являются: 

º 

флаг  переноса  (Carry) – устанавливается  при  возникновении  переноса  из 
старшего разряда результата; 

º 

флаг  переполнения  (Overflow)  – устанавливается  при  переполнении 
разрядной  сетки;  при  алгебраическом  сложении  двух  двоичных  чисел 
признаком  переполнения  является  наличие  переноса  в  знаковый  разряд 
суммы  при  отсутствии  переноса  из  её  знакового  разряда  (положительное 
переполнение)  или  наличие  переноса  из  знакового  разряда  суммы  при 
отсутствии  переноса  в  её  знаковый  разряд  (отрицательное  переполнение); 
если  и  в  знаковый,  и  из  знакового  разряда  суммы  есть  переносы  или  нет 
этих обоих переносов, то переполнение отсутствует.  

 

16 

º 

флаг  отрицательного  результата  (Negative) - устанавливается,  когда 
результат  операции  является  отрицательным  числом;  отрицательным 
обычно  считается  число,  содержащее  единицу  в  знаковом  (старшем) 
разряде. 

º 

флаг  нулевого  результата  (Zero) – устанавливается,  когда  результат 
операции равен нулю; 

º 

флаг  полупереноса  (Half Overflow) – устанавливается  при  возникновении  
переноса  из  младшей  тетрады 8-битного  числа  в  старшую  (из  третьего 
разряда в четвертый). 

Разрядность регистра состояния обычно равна разрядности ядра, но некоторые его 

биты могут быть не задействованы или задействованы в работе других узлов ядра. 

Например, 8-битный регистр состояния ядра AVR (SREG – Status register) размещен 

в  пространстве  регистров  ввода/вывода  (табл. 3.1)  по  адресу $3F ($5F) и  его  биты 
определяются в соответствии с рис. 3.4. 

 

 

 

7 6 5 4 3 2 1 0 

SREG $3F 

($5F)  I 

Рис. 3.4. Регистр состояния ядра AVR 

º 

Бит 7 – I (Global Interrupt Enable) - бит разрешения глобального прерывания. 
Для разрешения прерывания должен быть установлен в состояние 1. Работа 
бита будет рассмотрена позднее. 

º 

Бит 6 – T (Bit Copy Storage) - бит  сохранения  копии.  Ряд  инструкций 
копирования используют его как бит-источник или бит-приемник.  

º 

Бит 5 – H (Half Carry Flag) - флаг полупереноса.  

º 

Бит 4 – S (Sign Bit, S = N V) -  флаг  знака.  Бит S всегда  находится  в 
состоянии,  определяемом  операцией  исключающего  ИЛИ  (exclusive OR
между флагом отрицательного значения N и флагом переполнения V.  

º 

Бит 3 – V (Two’s Complement Overflow Flag) – флаг  переполнения 
(дополнения до двух).  

º 

Бит 2 – N (Negative Flag) - флаг отрицательного значения.. 

º 

Бит 1 – Z (Zero Flag) - флаг нулевого значения.  

º 

Бит 0 – C (Carry Flag) - флаг переноса.  

С

Т Е К

 

Стек – память  данных,  организованная  по  принципу:  последний  зашел – первый 

вышел (LIFO - Last In - First Out). Такая память предназначается, обычно, для оперативного 
сохранения содержимого отдельных регистров при переходах к подпрограммам. Одним из 
таких  регистров  является  программный  счетчик.  Извлечение  из  стека  содержимого 
регистров производится в порядке, обратном порядку записи. Запись в стек и извлечение из 
стека не требует знания адреса ячеек памяти, в которые записываются данные.  

Стек может быть организован либо в специально созданных в ядре ячейках памяти, 

либо  в  области SRAM. В  последнем  случае  в  ядре  предусматривается  специальный 
регистр – указатель  стека  (Stack Pointer).  Указатель  стека  хранит  адрес  последней 
записанной  ячейки  памяти  в  области  стека.  Поскольку  при  последовательной  записи 
адреса  ячеек  всегда  изменяются  последовательно  в  сторону  уменьшения,  а  при 

 

17 

изображении памяти SRAM ячейки с меньшими номерами рисуются сверху, то говорят, что 
стек при записи растет вверх.  

Количество  ячеек  памяти  (количество  уровней  стека),  которые  используются  в 

стеке  для  хранения  данных,  именуется  глубиной  стека.  Глубина  стека  в  различных 
архитектурах ядра может быть различна: от 2-х ячеек до размера SRAM. Например, в ядре 
PIC12  фирмы  Microchip  заложен 2-х  уровневый  стек,  разрядность  ячеек  которого  равна 
разрядности памяти программ (12 бит), а в ядре PIC16 той же фирмы -  8 уровневый стек с 
разрядностью ячеек 13 бит.  

В  микроконтроллерах AVR стек  организуется  в  памяти  данных  типа SRAM. 

Например,  микроконтроллер  ATmega163  оснащен  16-разрядным  указателем  стека, 
размещенным  в  двух  регистрах SPH  (Stack Pointer High)  и SPL (Stack Pointer Low) 
пространства  ввода/вывода  по  адресам $3E ($5E) и $3D ($5D). Поскольку 
рассматриваемый микроконтроллер имеет SRAM с адресами от $000 до $045F (рис. 2.2), то 
в нем используется только 11 бит указателя стека SP0….SP10 (рис. 3.5).  

 

 

 

7 6 5 4 3 2 1 0 

SPH $3E 

($5E)   

 

 

 

 

SP10 

SP9 

SP8 

SPL 

$3D ($5D) 

SP7 

SP6 

SP5 

SP4 

SP3 

SP2 

SP1 

SP0 

Рис. 3.5. Регистры указателя стека микроконтроллера ATmega163  

 
Указатель стека (SP) указывает на область в статической памяти данных, в которой 

размещаются стек. Начальное значение указателя стека должно задаваться в программе 
до  первого  вызова  подпрограмм.  Содержимое  указателя стека уменьшается на единицу, 
при каждом занесении данных в стек, и на две единицы при занесении в стек содержимого 
программного  счетчика.  Указатель  стека  увеличивается  на  единицу,  при  извлечении 
данных  из  стека,  и  на  две  единицы  при  извлечении  из  стека содержимого программного 
счетчика. Для работы со стеком в системе команд микроконтроллера предусматриваются 
специальные инструкции. 

3.2. Система команд 

М

Н Е М О Н И Ч Е С К И Е   О Б О З Н А Ч Е Н И Я

 

Каждая  архитектура  микроконтроллера  имеет  собственную  систему  команд. 

Система  команд  микроконтроллера  описывается  на  специальном  языке  символического 
кодирования.  При  этом  каждая  инструкция  из  системы  команд  представляется  простым 
трех-  или  четырехбуквенным  мнемоническим  символом.  Мнемонические  символы 
ассоциируются  с  функциями  команды  и  однозначно  соответствуют  действиям 
процессорного  ядра  при  выполнении  этой  инструкции.  Каждая  архитектура  имеет 
фиксированный набор символических команд, созданных и описанных его производителем. 
Некоторые символические обозначения, используемые в системе команд ядра AVR: 

º adc 

add with carry 

сложить с переносом, 

º add  

addition    

сложить, 

º and 

and  

операция И, 

º clr 

clear  

очистить, 

º dec 

decrement 

отнять 1, 

º in 

input  

ввод, 

 

18 

º inc 

increment  

прибавить 1, 

º jmp 

jump  

переход 

º ldi 

load immediate 

загрузить непосредственно, 

º mul 

multiply  

умножить, 

º or  

or   операция ИЛИ, 

º out 

output  

вывод, 

º ret 

return  

возврат, 

º sub 

subtract  

вычесть. 

Программа,  записанная  на  языке  символического  кодирования,  процессорным 

ядром  не  воспринимается.  При  вводе  её  в  память  программ  осуществляется  перевод 
каждой инструкции в двоичные коды. При этом каждая символическая команда заменяется 
её  двоичным  эквивалентом.  Эту  операцию  можно  сделать  вручную,  используя  таблицы 
машинных  кодов  микроконтроллера  или  на  компьютере  по  специальной  программе - 
ассемблер. Ассемблер сравнивает каждую мнемоническую команду со списком команд и 
заменяет её двоичным кодом. Процесс преобразования программы с языка символического 
кодирования в двоичные коды называется компиляцией. 

А

Д Р Е С А Ц И Я   Д А Н Н Ы Х

 

Адреса операндов, задействованных в выполнении любой инструкции программы, 

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

Например, в архитектуре AVR большинство команд занимает только одну ячейку 

памяти  программ.  В  этой  16-битной  ячейке  содержится  двоичный  код  операции  (OP - 
Operand
)  и  адрес  регистра  или  ячейки  памяти,  задействованных  при  выполнении  этой 
операции.  Вместе  с  тем,  ряд  инструкций  имеют  размерность 32бита.  В  этом  случае  16-
битный адрес одного из операндов хранится в 16 младших разрядах кода. 

Непосредственная адресация 

При непосредственной адресации одним из операндов команды является числовая 

константа  (К).  Она  хранится  непосредственно  в  коде  инструкции.  Вторым  операндом 
инструкции должен быть какой либо один из регистров общего назначения.  

Например, команда загрузки регистра Rd константой R (Load Immediate) на языке 

ассемблера AVR-микроконтроллера записывается в виде : 

 ldi 

Rd,K 

По  этой  инструкции  константа  К  записывается  в  указанный  регистр Rd. В 

сокращенном виде эти действия можно представить в виде: Rd <- K.  

Формат команды показан на рис. 3.6. В 16-битном коде инструкции номер регистра 

d занимает 5 бит, константа К – 8 бит, а код операции ldi – 3 бита.  

 

 

 

 

 

 

 

 

 

 

содержание   ..  1  2  3  4  5  ..