Motorola MC68HC705C8

тестирования, адрес которого содержится во втором байте команды. Третий байт представляет собой знаковое смещение для перехода по состоянию бита. Процессор вычисляет адрес перехода, складывая содержимое программного счетчика и третьего байта команды, если условие перехода выполняется. Условие тестирования битов содержится в коде операции. Диапазон перехода - от -128 до +127 байт от адреса следующей за командой ячейки памяти. Процессор, кроме того, записывает тестируемый бит в бит переноса регистра условий (СС).


BRA Безусловный переход.

Команда осуществляет безусловный переход по адресу, вычисляемому по приведенной ниже формуле, где Rel - относительное смещение, которое содержится в последнем байте кода команды.

PC ¬(PC)+$0002+Rel.

В исходном тексте адрес перехода задается абсолютным значением, символом или выражением, которое может быть вычислено ассемблером (заметим, что правила записи меток или выражений для вычисления адреса перехода могут различаться при использовании разных ассемблеров). Ассемблер вычисляет смещение Rel из абсолютного адреса перехода и текущего значения программного счетчика PC.

Регистр признаков не изменяется.


BRN Нет перехода.

Команда используется как двухбайтовый вариант команды NOP (нет операции) при отладке программ, когда нужно отменить действие команды перехода, и выполняется за 3 цикла. Действие этой команды противоположно действию команды BRA.

Регистр признаков не изменяется.


BRCLR Переход, если бит n ячейки памяти равен 0.

PC ¬ (PC)+$0003+Rel Если бит n ячейки M равен нулю.

Команда проверяет бит n ячейки памяти M на равенство нулю. Переход осуществляется, если проверяемый бит равен нулю. M может быть в адресном пространстве RAM или регистров ввода/вывода в пределах от $0000 до $00FF (таким образом используется прямая адресация). Бит C регистра признаков устанавливается в состояние тестируемого бита.

C Устанавливается, если Mn=1, иначе сбрасывается.


BRSET Переход, если бит n ячейки памяти равен 1.

PC ¬(PC)+$0003+Rel Если бит n ячейки M равен единице.

Команда проверяет бит n ячейки памяти M на равенство единице. Переход осуществляется, если проверяемый бит равен единице. M может быть в адресном пространстве RAM или регистров ввода/вывода в пределах от $0000 до $00FF (таким обрезом используется прямая адресация). Бит C регистра признаков устанавливается в состояние тестируемого бита.

C Устанавливается, если Mn=1, иначе сбрасывается.


BHI Переход, если больше.

PC¬(PC)+$0002+Rel Если (C)+(Z)=0

т.е. если (AC)>(M) (беззнаковые двоичные числа)

Возникает переход, если оба бита C и Z регистра признаков сброшены в ноль. Когда команда BHI используется сразу после выполнения команд CMP или SUB, возникает переход, если беззнаковое число, содержащееся в аккумуляторе, больше, чем беззнаковое число в ячейке памяти M.

Регистр признаков не изменяется.


BLS Переход , если меньше или равно.

PC¬(PC)+$0002+Rel Если [(C)+(Z)]=1

т.е. если (AC)Ј(M) (беззнаковые двоичные числа)

Возникает переход, если бит C или Z регистра признаков установлен в единицу. Когда команда BLS используется сразу после выполнения команд CMP или SUB, возникает переход, если беззнаковое число, содержащееся в аккумуляторе, меньше или равно беззнакового числа в ячейке памяти M.

Регистр признаков не изменяется.


BCC Переход, если сброшен флаг переноса.

PC¬(PC)+$0002+Rel Если (C)=0

Команда BCC является полным аналогом команды BHS. Проверяется состояние бита C регистра признаков. Переход возникает, если бит С сброшен.

Регистр признаков не изменяется.


BHS Переход, если больше или равно.

Команда BHS является полным аналогом команды BCC. Мнемонику BCC принято использовать после команд CMP и SUB, так как переход в данном случае возникает, если беззнаковое число в аккумуляторе больше или равно беззнакового числа, содержащегося в ячейке памяти M.


BCS Переход, если установлен флаг переноса.

PC¬(PC)+$0002+Rel Если (C)=-1

Команда BCS является полным аналогом команды BLO. Тестируется состояние бита C регистра признаков. Если бит C установлен в единицу, возникает переход.

Регистр признаков не изменяется.


BLO Переход, если меньше.

PC¬(PC)+@0002+Rel Если (C)=1

т.е. если (ACCX)<(M) (беззнаковые двоичные числа)

Команда BLO является полным аналогом команды BCS. Если команда BLO выполняется сразу после выполнения команд CMP или SUB, переход возникает, если беззнаковое число, содержащееся в аккумуляторе, меньше беззнакового числа, содержащегося в ячейке памяти M.

Регистр условий не изменяется.


BNE Переход, если не равно.

PC¬(PC)+$0002+Rel Если (Z)=0

Тестируется состояние бита Z регистра условий. Возникает переход, если бит Z сброшен. Следуя после сравнения или вычитания, BNE вызовет переход, если аргументы не равны.

Регистр условий не изменяется.


BEQ Переход, если равно.

PC¬(PC)+$0002+Rel Если (Z)=1

Тестируется состояние бита Z регистра условий. Возникает переход, если бит Z установлен. Следуя после сравнения или вычитания, BEQ вызовет переход, если аргументы равны.

Регистр условий не изменяется.


BHCC Переход, если сброшен флаг переноса из младшей тетрады.

PC¬(PC)+$0002+Rel Если (H)=0

Тестируется состояние бита H регистра условий. Возникает переход, если бит H сброшен. Команда используется при работе с числами в BCD формате.

Регистр условий не изменяется.


BHCS Переход, если установлен флаг переноса из младшей тетрады.

PC¬(PC)+$0002+Rel Если (H)=1

Тестируется состояние бита H регистра условий. Возникает переход, если бит H установлен. Команды используется при работе с числами в BCD формате.

Регистр условий не изменяется.


BPL Переход, если плюс.

PC¬(PC)+$0002+Rel Если (N)=0

Тестируется состояние бита N регистра условий. Возникает переход, если бит N сброшен.

Регистр условий не изменяется.


BMI Переход, если минус.

PC¬(PC)+$0002+Rel Если (N)=1

Тестируется состояние бита N регистра условий. Возникает переход, если бит N установлен.

Регистр условий не изменяется.


BMC Переход, если бит маскирования прерываний сброшен.

PC¬(PC)+$0002+Rel Если (I)=0

Тестируется состояние бита I регистра условий. Возникает переход, если бит I сброшен (то есть прерывания разрешения).

Регистр условий не изменяется.


BMS Переход, если бит маскирования прерываний установлен.

PC¬(PC)+$0002+Rel Если (I)=1

Тестируется состояние бита I регистра условий. Возникает переход, если бит I установлен (то есть прерывания запрещены).

Регистр условий не изменяется.


BIL Переход, если вход запроса прерывания в 0.

PC¬(PC)+$0002+Rel Если IRQ=0

Тестируется состояние выводы микропроцессора запроса внешнего прерывания. Возникает переход, если на входе нулевой логический уровень.

Регистр условий не изменяется.


BIH Переход, если вход запроса прерывания в 1.

PC¬(PC)+$0002+Rel Если IRQ=1

Тестируется состояние выводы микропроцессора запроса внешнего прерывания. Возникает переход, если на входе логическая единица.

Регистр условий не изменяется.


BSR Переход на подпрограмму.

PC¬(PC)+$0002 В PC адрес возврата

Я(PCL) Сохраняется младший байт адреса возврата в стек

SP¬(SP)-$0001

Я(PCH) Сохраняется старший байт адреса возврата в стек

SP¬(SP)-$0001

PC¬(PC)+Rel В PC загружается адрес подпрограммы

Программный счетчик увеличивается на 2 от адреса кода операции BSR, таким образом в PC оказывается адрес следующей за BSR команды, который является адресом возврата из подпрограммы. Младший байт программного счетчика помещается в стек. Указатель стека уменьшается на 1. Затем старший байт программного счетчика помешается в стек, указатель стека уменьшается на 1. Производится переход по адресу, определяемому смещением.

Регистр условий не изменяется.


JMP Длинный безусловный переход.

PC¬Эффективный адрес

Осуществляется переход по эффективному адресу. Эффективный адрес вычисляется в соответствии с правилами для расширенного, прямого и индексного режимов адресации.

Регистр условий не изменяется.


JSR Длинный вызов подпрограммы.

PC¬(PC)+n n=1,2,3 взависимости от режима адресации

Я(PCL); SP¬ SP-$0001 Младший байт адреса возврата в стек

Я(PCH); SP¬ SP-$0001 Старший байт адреса возврата в стек

PC¬Эффективный адрес Загрузить в PC адрес подпрограммы

Программный счетчик увеличивается на n, то есть до адреса следующей за JSR команды. Затем PC сохраняется в стеке. Не используемые биты программного счетчика сохраняются как единицы. Указатель стека указывает на следующую свободную ячейку памяти. Осуществляется переход по эффективному адресу. Эффективный адрес вычисляется в соответствии с правилами для расширенного, прямого и индексного режимов адресации.

Регистр условий не изменяется.


SWI Программное прерывание

(PC)¬(PC)+$0001 В PC адрес возврата

(PCL); SP¬(SP)-$0001 В стек младший байт адреса возврата

(PCH); SP¬(SP)-$0001 В стек старший байт адреса возврата

(X); SP¬(SP)-$0001 В стек индексный регистр

(AC); SP¬(SP)-$0001 В стек аккумулятор

(CCR); SP¬(SP)-$0001 В стек регистр признаков

I бит ¬1

PCH¬($xFFC) Вектор прерывания (x=1 или 3, в зависимости от версии HC05)

PCL¬($xFFD)

Содержимое программного счетчика увеличивается на единицу. Программный счетчик, индексный регистр, аккумулятор и регистр признаков помещаются в стек. Содержимое указателя стека уменьшается на единицу каждый раз после того, как в стек помещен байт. Бит маскирования прерываний устанавливается в единицу. В программный счетчик записывается адрес, хранящийся в векторе прерывания SWI (адрес расположен по адресу n-0002 и n-0003, где n-адрес, соответствующий единичному состоянию всех адресных выходов миропроцессора.). Команда SWI не маскируется установкой бита I регистра признаков.

I Устанавливается в 1.


RTI Возврат из подпрограммы обработки прерывания

SP¬(SP)+$0001 ССR CCR из стека

SP¬(SP)+$0001 AC AC из стека

SP¬(SP)+$0001 X X из стека

SP¬(SP)+$0001 PCH PCH из стека

SP¬(SP)+$0001 PCL PCL из стека

Регистр признаков, аккумулятор, индексный регистр и программный счетчик восстанавливаются из стека. Бит I сбрасывается, если соответствующий бит регистра признаков в стеке был нулевым.

Биты регистра признаков принимают значения в соответствии с байтом, взятым из стека.


RTS Возврат из подпрограммы

SP¬(SP)+$0001 PCH PCH из стека

SP¬(SP)+$0001 PCL PCL из стека

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

Регистр признаков не изменяется.


Арифметические и логические команды, битовые операции.

ADD Сложить содержимое ячейки памяти с аккумулятором

AC¬(AC)+(M)

Сложить содержимое M и содержимое AC и разместить в AC.

H A3*M3+M3*R3+R3*A3

Устанавливается, если имеет место перенос из бита 3, иначе сбрасывается.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C A7*M7+M7*R7+R7*A7

Устанавливается, если имеет место перенос из старшего бита результата, иначе сбрасывается.


ADC Сложить содержимое ячейки памяти с аккумулятором
и флагом переноса.

AC¬(AC)+(M)+(C)

Сложить содержимое бита C и сумму содержимого M и содержимого AC и разместить в AC.

H A3*M3+M3*R3+R3*A3

Устанавливается, если имеет место перенос из бита 3, иначе сбрасывается.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C A7*M7+M7*R7+R7*A7

Устанавливается, если имеет место перенос из старшего бита результата, иначе сбрасывается.


SUB Вычесть.

AC¬(AC)-(M)

Вычесть содержимое M из AC и разместить результат в AC.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C A7*M7+M7*R7+R7*A7

Устанавливается, если абсолютная величина содержимого M больше абсолютной величины аккумулятора, иначе сбрасывается.


SBC Вычесть содержимое ячейки памяти из аккумуляторе
с флагом заема
.

AC¬(AC)-(M)-(C)

Вычесть содержимое M из AC и разместить результат в AC.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C A7*M7+M7*R7+R7*A7

Устанавливается, если абсолютная величина одержимого M, плюс предыдущее значение C, больше абсолютной величины аккумулятора, иначе сбрасывается.


AND Операция И содержимого ячейки памяти и аккумулятора.

AC¬(AC)*(M)

Произвести логическое умножение между содержимым аккумулятора и содержимым M и разместить результата в AC. (С каждым битом аккумулятора и соответствующим битом M производится операция логического умножения).

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все битв результата сброшены. Иначе сбрасывается.


ORA Операция ИЛИ содержимого ячейки памяти и аккумулятора.

AC¬(AC)+(M)

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

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все битв результата сброшены, иначе сбрасывается.


CMP Арифметическое сравнение аккумулятора и ячейки памяти.

(AC)-(M)

Сравнить содержимое M и AC и установить биты в регистре признаков. Содержимое AC и M не изменяется.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C A7*M7+M7*R7+R7*A7

Устанавливается, если абсолютная величина содержимого M больше абсолютной величины аккумулятора, иначе сбрасывается.


CPX Арифметическое сравнение индексного регистра и ячейки памяти.

(X)-(M)

Сравнить содержимое M и X и установить биты в регистре признаков. Содержимое X и M не изменяется.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C A7*M7+M7*R7+R7*A7

Устанавливается, если абсолютная величина одержимого M больше абсолютной величины регистра X, иначе сбрасывается.


BIT Поразрядное сравнение ячейки памяти с аккумулятором.

(ACCX)*(M)

Производит сравнение содержимого AC и M посредством операции логическое И и устанавливает соответственно результату биты в регистре признаков. Ни содержимое AC, ни содержимое M не изменяются

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.


MUL Умножение.

X : A¬=X x A

Умножается 8-битное число в индексном регистре X на 8-битное число в аккумуляторе. 16-битный результат помещается в индексный регистр и аккумулятор. В индексном регистре старшие 8 бит результата, в аккумуляторе младшие 8 бит.

H 0 (сбрасывается)

C 0 (сбрасывается)


INC Инкремент на 1

AC¬(AC)+$01 или M¬(M)+$01 или X¬(X)+$01

Добавляет единицу к содержимому аккумулятора, индексного регистра или ячейки памяти. Биты N и Z регистра признаков устанавливаются или сбрасываются в соответствии с результатом. Бит C регистра признаков не изменяются, поэтому после команды INC имеют смысл только следующие команды перехода BEQ, BNE, BPL и BMI.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.


DEC Декремент на 1

AC¬(AC)-$01 или M¬(M)-$01 или X¬(X)-$01

Вычитает единицу из содержимого аккумулятора, индексного регистра или ячейки памяти. Биты N и Z регистра признаков устанавливаются или сбрасываются в соответствии с результатом. Бит C регистра признаков не изменяются, поэтому после команды DEC имеют смысл только следующие команды перехода:

BEQ, BNE, BPL и BMI.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.


COM Дополнение.

AC¬(AC)=$FF-(AC) или M¬(M)=$FF-(M) или X¬X=$FF-(X)

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

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C 1

Устанавливается


NEG Дополнение до двух (инверсия знака).

AC¬(AC) или M¬(M) или X¬X

Содержимое аккумулятора, индексного регистра или ячейки памяти заменяется на его дополнение до 2. Заметим, что величина $80 не изменяется.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C R7+R6+R5+R3+R2+R1+R0

Устанавливается во всех случаях за исключением числа $00.


ROL Циклический сдвиг влево через флаг переноса

C¬b7-...-b0¬C

Все биты аккумулятора, индексного регистра или ячейки памяти сдвигаются влево. Бит 0 загружается содержимым бита С. Бит C загружается содержимым старшего бита аккумулятора, индексного регистра или ячейки памяти.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C b7

Устанавливается, если перед сдвигом был установлен старший бит, иначе сбрасывается.


ROR Циклический сдвиг вправо через флаг переноса

C®b7-...-b0®C

Все биты аккумулятора, индексного регистра или ячейки памяти сдвигаются вправо. Бит 7 загружается содержимым бита С. Бит C загружается содержимым младшего бита аккумулятора, индексного регистра или ячейки памяти.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C b0

Устанавливается, если перед сдвигом был установлен младший бит, иначе сбрасывается.


LSL Логический сдвиг влево

C¬b7-...-b0¬0

Все биты аккумулятора, индексного регистра или ячейки памяти сдвигаются влево. Бит 0 загружается нулем. Бит C загружается содержимым старшего бита аккумулятора, индексного регистра или ячейки памяти.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C b7

Устанавливается, если перед сдвигом был установлен старший бит, иначе сбрасывается.


LSR Логический сдвиг вправо.

0®b7-...-b0®C

Все биты аккумулятора, индексного регистра или ячейки памяти сдвигаются вправо. Бит 7 загружается нулем. Бит C загружается содержимым младшего бита аккумулятора, индексного регистра или ячейки памяти.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C b0

Устанавливается, если перед сдвигом был установлен младший бит, иначе сбрасывается.


ASR Арифметический сдвиг вправо

¬®b7-...-b0®C

Все биты аккумулятора, индексного регистра или ячейки памяти сдвигаются влево. Бит 7 остается неизменным. Бит C загружается содержимым младшего бита аккумулятора, индексного регистра или ячейки памяти.

N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C b0

Устанавливается, если перед сдвигом был установлен младший бит, иначе сбрасывается.


TST Проверка на отрицательность и равенство нулю

(AC)-$00 или (X)-$00 или (M)-$00

Установить биты N и Z в регистре признаков в соответствии с содержимым аккумулятора, индексного регистра или ячейки памяти. Содержимое аккумулятора, индексного регистра или ячейки памяти не изменяется.


N R7

Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z R7*R6*R5*R4*R3*R2*R1*R0

Устанавливается, если все биты результата сброшены. Иначе сбрасывается.


BSET n (n=0...7) Установить бит n

Mn=1

Устанавливается в 1 бит n (n=7,6,5,4,3,2,1,0) ячейки памяти M, другие биты не изменяются. Ячейкой памяти может быть ОЗУ или I/O регистр от адреса $0000 до $00FF (то есть используется прямая адресация).

Регистр признаков не изменяется.


BCLR n (n=0...7) Сбросить бит n

Mn=0

Сбрасывается бит n (n=7,6,5,4,3,2,1,0) ячейки памяти M, другие биты не изменяются. Ячейкой памяти может быть ОЗУ или I/O регистр от адреса $0000 до $00FF (то есть используется прямая адресация).

Регистр признаков не изменяется.


SEC Установить флаг переноса

C бит ¬1

Установить бит C регистра признаков. Команда SEC может применятся для предустановки бита C перед использованием команд сдвига.

Флаг C устанавливается в 1.


CLC Сбросить флаг переноса

C бит ¬0

Сбрасывается бит C регистра признаков. Команда SEC может применятся для предустановки бита C перед использованием команд сдвига.

Флаг C сбрасывается.


SEI Установить флаг маскирования прерываний.

I бит¬1

Устанавливается бит маскирования прерываний в регистре признаков. Когда бит C установлен, прерывания запрещены.

Флаг I устанавливается.


CLI Сбросить флаг маскирования прерываний

I бит¬0

Сбрасывается бит маскирования прерываний в регистре признаков. Когда бит C сброшен, прерывания разрешены. На очистку бита требуется задержка на один цикл, таким образом, если прерывания до выполнения команды CLI были запрещены, то следующая за CLI команда всегда выполняется.

Флаг I сбрасывается.


Прочие команды.


NOP Нет операции

Эта однобайтная команда вызывает только увеличение программного счетчика на единицу. Другие регистры не изменяются.


STOP Останов

Выполнение команды приводит к уменьшению энергопотребления.

1) Сбрасывается предделитель таймера;

2) запрещаются прерывания от таймера;

3) сбрасывается флаг прерывания от таймера;

4) разрешаются внешние прерывания;

5) останавливается тактовый генератор.

Когда поступает внешний сигнал RESET или IRQ, включается тактовый генератор, после задержки на инициализацию, которая длится 1920 циклов процессора, защелкиваются вектор прерывания и вектор начальной установки, и запускается на выполнение процедура обработки RESET или IRQ, в зависимости от поданного сигнала.

Флаг I сбрасывается.

Более подробно о режиме STOP см. раздел "Специальные режимы работы".


WAIT Ожидание

Выполнение команды приводит к уменьшению энергопотребления. Таймер, делитель таймера и другая встроенная периферия продолжают работать, так как они являются потенциальными источниками прерываний. WAIT разрешает прерывания сбросом бита I регистра признаков и останавливает цепи синхронизации процессора.

Когда поступает внешний сигнал RESET, IRQ или прерывания от встроенной периферии, включается цепи синхронизации процессора, защелкиваются вектор прерывания и вектор начальной установки, и запускается на выполнение процедура, взвисимости от поданного сигнала.

Более подробно о режиме WAIT см. раздел "Специальные режимы работы".


2. Аппаратные средства

2.1 Линии (порты) параллельного ввода-вывода.


МС68НС705С8 содержит 31 линию ввода-вывода общего назначения, объединенные в 4 порта. Порты А, В и С представляют собой 8-битные порты общего назначения, в которых направление работы каждой линии задается через программно-доступные регистры, порт D является 7-битным портом, настроенным только на ввод данных, кроме того, линии порта D могут выполнять некоторые специальные функции. Подробнее про порт D смотрите п. 2.4. Каждый 8-битный порт имеет соответствующий 8-битный регистр направления данных (DDR), как показано на рис. 5, а так же регистр данных (DR), в который помещаются данные при передаче, или из которого они читаются при приеме.

Каждый из трех портов - A, B, или C можно представить схематически следующим образом:


Бит 7 6 5 4 3 2 1 Бит 0
DDR7 DDR6 DDR5 DDR4 DDR3 DDR2 DDR1 DDR0 DDR

Ѕ Ѕ Ѕ Ѕ Ѕ Ѕ Ѕ Ѕ

0 0 0 0 0 0 0 0 После RESET

Ї Ї Ї Ї Ї Ї Ї Ї









Порт (DR)

Ѕ Ѕ Ѕ Ѕ Ѕ Ѕ Ѕ Ѕ

Регистр порта не изменяется после RESET.

­ ­ ­ ­ ­ ­ ­ ­

Ї Ї Ї Ї Ї Ї Ї Ї

P7 P6 P5 P4 P3 P2 P1 P0 Контакты


Рис. 2-1 Схема порта ввода/вывода.


Канал настроен на вывод информации, если соответствующий бит в DDR установлен в 1. Если бит сброшен, то канал настроен на ввод (так предусмотрено при начальной установке). То есть разные каналы одного и того же порта могут быть настроены на ввод или вывод информации одновременно независимо друг от друга. На рис. 2-2 представлена структура канала параллельного порта, а в таблице 2-1 приведены различные режимы работы линии ввода-вывода.


Таблица 2-1. Функции контактов ввода-вывода.

R/W* DDR Функция
0 0 Режим ввода. Данные записываются в выходную защелку
0 1 Данные записываются в выходную защелку и передаются на контакт.
1 0 Читается состояние контакта
1 1 Контакт в режиме вывода. Читаются данные из защелки.

*R/W - внутренний сигнал, указывающий на чтение/запись данных.


Из рисунка и таблицы видно, что когда канал настраивается на вывод, чтение регистра данных приводит к чтению данных из выходного триггера, а не с вывода непосредственно. Регистры направления данных расположены по адресам 04Н, 05Н, 06Н для портов А, В и С, соответственно. Регистры данных расположены по адресам 00Н, 01Н, 02Н в той же последовательности.

1. Буфер вывода, разрешает вывод, когда соответствующий бит в регистре DDR установлен в 1 (вывод данных).

2. Буфер ввода, включен, когда соответствующий бит в регистре DDR сброшен на 0 (ввод данных).

3. Буфер ввода, включен, когда соответствующий бит в регистре DDR установлен в 1 (вывод данных).


Рис. 2-2 Структура канала параллельного порта

2.2 Система прерываний.

МС68НС705С8 имеет 5 типов прерываний, включающих 4 маскируемых аппаратных прерывания и одно немаскируемое программное прерывание. К аппаратным прерываниям относятся:

-внешнее прерывание, поступающее через вывод IRQ/ микросхемы

-прерывание от последовательного интерфейса связи

-прерывание от последовательного периферийного интерфейса

-прерывание от таймера

При возникновении прерывания процессор сохраняет содержимое регистров в стеке, и затем устанавливает бит маски прерываний I в регистре признаков, запрещая последующие прерывания. Команда возврата из прерывания (RTI), которая является последней командой в программе обработки любого прерывания, восстанавливает содержимое регистров из стека. Порядок загрузки и выгрузки регистров из стека показан на рис. 2-3.

В отличие от RESET, прерывание не вызывает прекращения выполнения текущей команды, обработка прерывания начинается лишь после ее завершения.

Таймер и оба последовательных интерфейса имеют собственные регистр статуса и управляющий регистр. В регистре статуса расположены флаги прерываний, каждый из которых соответствует определенному действию, вызвавшему прерывание. Например, у таймера таких флагов три. Флаги в регистрах статуса предназначены только для чтения. В управляющем регистре каждому из этих флагов поставлен в соответствие управляющий бит, с помощью которого можно разрешить или запретить определенное прерывание установкой или сбросом соответствующего бита. Если управляющий бит сброшен, то прерывание блокируется, но это не мешает изменению состояния флага запроса прерывания. Во время начальной установки все управляющие биты сбрасываются, чтобы предотвратить прерывания в течение процедуры начальной установки.


Рис. 2-3 Порядок загрузки регистров в стек и

выгрузки их из стека.


На рисунке 2-4 показан процесс обработки прерывания, а в таблице 2-2 даны векторы всех прерываний. В первом столбце таблицы указан регистр статуса, в котором находится соответствующий флаг прерывания, во втором столбце даны названия флагов прерываний. В третьем столбце кратко описана причина возникновения прерывания, в четвертом столбце указано устройство-источник прерывания, и в пятом столбце приведен адрес по которому хранится вектор прерывания. Важно отметить, что бит маски прерываний (бит I в регистре признаков) будет сброшен только в том случае, если соответствующий бит в стеке хранит 0.

Рассмотрим подробнее каждый тип прерывания.

Программное прерывание является результатом выполнения команды SWI (SoftWare Interrupt). Оно возникает вне зависимости от состояния бита I. Вектор прерывания содержится в ячейках памяти с адресами 1FFCH и 1FFDH.

Внешнее прерывание происходит если бит маски прерываний (бит I) сброшен и на внешний вывод IRQ/ поступает сигнал активного уровня (режим срабатывания задается записью в бит IRQ регистра конфигурации, см. п. 1.3). Затем текущее состояние процессора запоминается в стеке, и бит I устанавливается в 1 для маскирования всех прерываний до тех пор, пока обслуживается внешнее.

Прерывание от таймера может быть вызвано тремя флагами, как уже упоминалось ранее. Эти три флага расположены в регистре статуса таймера, и имеют один и тот же вектор (см. таблицу 2-2). Каждый флаг имеет соответствующий управляющий бит (ICIE, OCIE и TOIE) в регистре управления таймером. Установка этих битов разрешает соответствующее прерывание, сброс-запрещает. Подробнее назначение каждого флага описано в главе 2.3 "Таймер".

Рис. 2-4 Процесс обработки прерывания


Прерывание от последовательного интерфейса связи происходит в том случае, если один из пяти флагов (TDRE, TC, RDRF, IDLE, OR) в регистре статуса интерфейса связи установлен, бит I в регистре признаков сброшен и управляющий бит во втором управляющем регистре установлен. При обслуживании прерывания приоритет обработки задается программно через проверку флагов в регистре статуса. Подробнее о регистрах интерфейса связи рассказывается в главе 2.4 "Последовательный интерфейс".

Прерывание от последовательного периферийного интерфейса происходит при тех же условиях (установлен один из двух флагов в регистре статуса периферийного интерфейса (SPIF или MODF), бит I сброшен, и управляющий бит в управляющем регистре установлен). Подробнее о периферийном интерфейсе рассказывается в главе 2.4 "Последовательный интерфейс".

Функциональная схема обработки внешних прерываний приведена на рис. 2-5. Внешнее прерывание может определяться либо фронтом сигнала, либо его фронтом и уровнем. Задается это программно через регистр конфигурации (см. гл. 1.3). Если прерывание определяется фронтом сигнала, то следующее прерывание не должно возникать до тех пор, пока не будет обработано первое, т. е. пока не будет выполнена команда возврата из прерывания (RTI). Время между двумя прерываниями должно быть минимум на 21 машинный цикл больше, чем время обработки прерывания (не включая команду RTI). При определении прерывания по уровню сигнала, следующее прерывание будет определяться в том случае, если после обработки первого прерывания на выводе IRQ/ будет сохраняться сигнал низкого уровня. Этот метод обычно используется при работе с несколькими источниками прерываний, объединенными в одну линию. Оба режима реакции на внешнее прерывание наглядно демонстрируются на рис. 2-6 и 2-7, соответственно.


Таблица 2-2. Векторы прерываний.

Регистр Имя флага Причина прерывания Прерывание ЦПУ Адрес вектора


RESET RESET 1FFE-1FFF


Программное SWI 1FFC-1FFD


Внешнее IRQ 1FFA-1FFB
Регистр статуса таймера

ICF


OFC


TOF

Входная фиксация

Выходное сравнение

Переполнение


TIMER


1FF8- 1FF9

Регистр статуса интерфейса связи

TDRE


TC


RDRF


IDLE


OR

Буфер передачи пуст

Передача завершена

Полон буфер приема

Обнаружена свободная линия

Переполнение


SCI


1FF6-1FF7

Регистр статуса периферий-ного интерфейса

SPIF


MODF

Передача завершена

Режим ошибочен


SPI


1FF4-1FF5



Рис. 2-5 Функциональная схема обработки внешнего прерывания.