Шумахер У. Полупроводниковая электроника
.pdfINFSEMI_2-Text.fm, стр. 272 из 589 (September 3, 2010, 17:05)
272 7. Микроконтроллеры |
|
|
|
|
||||
|
|
|
|
|||||
Команда ADDC (суммирование с пере- |
Флаги |
|||||||
|
носом) суммирует содержимое регистра |
|
Помимо вышеуказанных причин, состо- |
|||||
|
А (аккумулятора) с операндом-источни- |
|
||||||
|
яние флагов может быть изменено в резуль- |
|||||||
|
ком, прибавляет к результату единицу, |
|||||||
|
тате следующих операций: |
|||||||
|
если флаг переноса CY был установлен, а |
|||||||
|
|
Флаг переноса CY устанавливается в 1, |
||||||
|
затем помещает результат в А. |
|||||||
|
|
если вследствие той или иной операции |
||||||
Команда |
DA |
(десятичная |
коррекция) |
|
||||
|
возникает перенос в старший бит резуль- |
|||||||
|
корректирует результат сложения двух- |
|
||||||
|
|
тата или заимствование из него. Во всех |
||||||
|
значных |
операндов в двоично-десяти- |
|
|||||
|
|
остальных случаях флаг CY сбрасывается |
||||||
|
чном формате, приводя его к упакован- |
|
||||||
|
|
в ноль. |
||||||
|
ному двоично-десятичному формату. Ре- |
|
||||||
|
Флаг дополнительного переноса AC ус- |
|||||||
|
зультат исполнения команды помещает- |
|||||||
|
|
танавливается, если операция вызывает |
||||||
|
ся в аккумулятор. Флаг CY устанавлива- |
|
||||||
|
|
перенос из младшего полубайта резуль- |
||||||
|
ется в 1, если результат больше чем 99, в |
|
||||||
|
|
тата (при сложении) или заимствование |
||||||
|
противном случае этот флаг сбрасывает- |
|
||||||
|
|
из старшего бита в младший бит (при вы- |
||||||
|
ся в 0. |
|
|
|
|
|
||
|
|
|
|
|
|
читании). Во всех остальных случаях |
||
|
Вычитание: |
|
|
|
|
|||
|
|
(вычитание |
с заёмом) |
|
флаг AC сбрасывается в ноль. |
|||
Команда |
SUBB |
|
Флаг переполнения OV устанавливается |
|||||
|
вычитает |
второй |
операнд-источник из |
|||||
|
|
в 1, если в результате операции происхо- |
||||||
|
первого (аккумулятора), затем вычитает |
|
||||||
|
|
дит перенос в старший бит при отсут- |
||||||
|
единицу, если CY был установлен в 1, и |
|
||||||
|
|
ствии заимствования из него, и наобо- |
||||||
|
вновь помещает результат в аккумулятор. |
|
||||||
|
|
рот. Во всех остальных случаях флаг OV |
||||||
Команда DEC (декрементирование) вы- |
|
|||||||
|
сбрасывается в ноль. Флаг OV использу- |
|||||||
|
читает 1 из операнда-источника и поме- |
|
||||||
|
|
ется при арифметических операциях в |
||||||
|
щает результат в операнд-источник (при |
|
||||||
|
|
дополнительном коде, поскольку он ус- |
||||||
|
этом состояние флагов в регистре PSW |
|
||||||
|
|
танавливается в 1, когда результат не мо- |
||||||
|
не изменяется). |
|
|
|
||||
|
|
|
|
жет быть представлен в виде 8 бит. |
||||
|
|
|
|
|
|
|
||
|
Умножение: |
|
|
|
Флаг чётности P устанавливается в 1, ес- |
|||
Команда MUL реализует операцию без- |
|
ли сумма по модулю 2 восьми отдельных |
||||||
|
знакового умножения содержимого ак- |
|
битов числа, содержащегося в аккумуля- |
|||||
|
кумулятора на содержимое регистра В и |
|
торе, равна 1 (нечётное количество еди- |
|||||
|
возвращает |
двухбайтный |
результат. |
|
ниц). Во всех остальных случаях (чётное |
|||
|
Младший байт записывается в аккумуля- |
|
количество) флаг P сбрасывается в 0. Ес- |
|||||
|
тор, а старший — в регистр B. Флаг пере- |
|
ли происходит запись в регистр PSW, то |
|||||
|
полнения OV устанавливается в 0, если |
|
значение бита P остается неизменным, |
|||||
|
старший байт результата (записываемый |
|
поскольку оно всегда показывает резуль- |
|||||
|
в регистр B) равен 0, и устанавливается в |
|
тат проверки чётности содержимого ак- |
|||||
|
1, если старший байт результата не равен |
|
кумулятора. |
|||||
|
0. Флаг переноса CY всегда сбрасывается |
Логические команды |
||||||
|
в 0, значение флага дополнительного пе- |
|||||||
|
|
|
|
|||||
|
реноса AC не изменяется. |
|
|
В систему команд микроконтроллеров |
||||
|
Деление: |
|
|
|
|
семейства С500 также входят логические |
||
|
Команда DIV реализует операцию без- |
операции как с битовыми, так и байтовыми |
||||||
|
знакового деления содержимого аккуму- |
операндами. |
||||||
|
лятора на содержимое регистра В и со- |
|
Команды, использующие один операнд: |
|||||
|
храняет целую часть результата в аккуму- |
|
Команда CLR сбрасывает аккумулятор |
|||||
|
ляторе, а остаток в регистре В. В случае |
|
целиком или любой непосредственно ад- |
|||||
|
деления на ноль в регистрах А и В будут |
|
ресуемый бит в ноль. |
|||||
|
содержаться непредсказуемые значения, |
Команда SETB устанавливает любой не- |
||||||
|
флаг OV при этом устанавливается в 1 (во |
|
посредственно адресуемый бит в 1. |
|||||
|
всех остальных случаях флаг OV сбрасы- |
Команда CPL возвращает двоичный до- |
||||||
|
вается в 0). Флаг CY сбрасывается в ноль, |
|
полнительный код содержимого аккуму- |
|||||
|
значение флага AC не изменяется. |
|
лятора; при этом состояние флагов (в ре- |
гистре PSW) или других непосредствен-
|
|
|
|
|
|
INFSEMI_2-Text.fm, стр. 273 из 589 (September 3, 2010, 17:05) |
||||||
|
|
|
|
7.2. Восьмибитные микроконтроллеры 273 |
||||||||
|
|
|
|
|
||||||||
|
|
но адресуемых битов памяти не изменя- |
Безусловный переход, команды вызова под- |
|
||||||||
|
ется. |
|
программы и возврата из подпрограммы |
|
|
|||||||
Команды RL, RLC, RR, RRC, SWAP |
|
Эти три команды передают управление с |
||||||||||
|
|
предназначены для работы с аккумуля- |
|
|||||||||
|
|
текущего значения счётчика команд по за- |
||||||||||
|
|
тором. RL осуществляет циклический |
||||||||||
|
|
данному адресу. Поддерживается как пря- |
||||||||||
|
|
сдвиг содержимого аккумулятора влево, |
||||||||||
|
|
мой, так и косвенный способы передачи уп- |
||||||||||
|
|
RR — циклический сдвиг вправо, RLC — |
||||||||||
|
|
равления. |
|
|
|
|
|
|
||||
|
|
циклический сдвиг влево через перенос, |
|
|
|
|
|
|
||||
|
|
|
Команда ACALL (LCALL) помещает ад- |
|||||||||
|
|
RR — циклический сдвиг вправо через |
||||||||||
|
|
|
рес следующей за ней команды в стек, а |
|||||||||
|
|
перенос, а SWAP — циклический сдвиг |
|
|||||||||
|
|
|
затем передаёт управление по адресу, не- |
|||||||||
|
|
аккумулятора влево на четыре бита (т.е. |
|
|||||||||
|
|
|
посредственно заданному в теле коман- |
|||||||||
|
|
старший и младший полубайты меняют- |
|
|||||||||
|
|
|
ды. ACALL — это двухбайтная команда, |
|||||||||
|
|
ся местами). В результате выполнения |
|
|||||||||
|
|
|
используемая для адресации внутри те- |
|||||||||
|
|
команд RLC и RRC значение флага пере- |
|
|||||||||
|
|
|
кущей 2-Кбайт страницы памяти про- |
|||||||||
|
|
носа CY устанавливается равным значе- |
|
|||||||||
|
|
|
грамм. LCALL — это трёхбайтная коман- |
|||||||||
|
|
нию бита, который в процессе цикличес- |
|
|||||||||
|
|
|
да, |
которая |
может |
адресовать |
все |
|||||
|
|
кого сдвига был последним «вытолкнут» |
|
|||||||||
|
|
|
64 Кбайт доступного пространства памя- |
|||||||||
|
|
из аккумулятора. Команда SWAP сдвига- |
|
|||||||||
|
|
|
ти |
программ. При использовании |
ко- |
|||||||
|
|
ет содержимое аккумулятора на четыре |
|
|||||||||
|
|
|
манды ACALL адрес, задаваемый в теле |
|||||||||
|
|
позиции влево, т.е. биты 3…0 (младший |
|
|||||||||
|
|
|
команды (т.е. в 11-битном поле адреса |
|||||||||
|
|
полубайт) меняются местами с битами |
|
|||||||||
|
|
|
команды), дополняется пятью старши- |
|||||||||
|
|
7…4 (старший полубайт). |
|
|||||||||
|
|
|
ми битами счётчика команд (который |
|||||||||
|
|
Команды, использующие два операнда: |
|
|||||||||
|
|
содержит адрес следующей команды). |
||||||||||
Команда ANL осуществляет логическую |
|
Если команда ACALL физически распо- |
||||||||||
|
|
операцию «Побитовое И» с двумя операн- |
|
|||||||||
|
|
|
ложена в последних двух байтах текущей |
|||||||||
|
|
дами (операнды могут быть как битовы- |
|
|||||||||
|
|
|
2-Кбайт страницы памяти программ, то |
|||||||||
|
|
ми, так и байтовыми) и помещает резуль- |
|
|||||||||
|
|
|
вызов произойдет из пространства сле- |
|||||||||
|
|
тат обратно в первый из этих операндов. |
|
|||||||||
|
|
дующей |
страницы, поскольку счётчик |
|||||||||
Команда |
ORL выполняет логическую |
|
||||||||||
|
команд |
(PC) инкрементируется перед |
||||||||||
|
|
операцию |
«Побитовое ИЛИ» с двумя |
|
||||||||
|
|
|
выполнением следующей команды. |
|
|
|||||||
|
|
операндами (операнды могут быть как |
|
|
|
|||||||
|
|
Команда RET передаёт управление по |
||||||||||
|
|
битовыми, так и байтовыми) и помещает |
||||||||||
|
|
|
адресу |
возвращения, |
сохранённому |
в |
||||||
|
|
результат обратно в первый из этих опе- |
|
|||||||||
|
|
|
стеке предыдущей командой вызова под- |
|||||||||
|
|
рандов. |
|
|
||||||||
|
|
|
|
программы |
(ACALL |
или LCALL), |
и |
|||||
Команда XRL реализует логическую опе- |
|
|||||||||||
|
дважды декрементирует содержимое ре- |
|||||||||||
|
|
рацию «Побитовое исключающее ИЛИ» |
|
|||||||||
|
|
|
гистра указателя стека, чтобы он указы- |
|||||||||
|
|
с двумя операндами (операнды могут |
|
|||||||||
|
|
|
вал на адрес следующей команды. |
|
|
|||||||
|
|
быть как битовыми, так и байтовыми) и |
|
|
|
|||||||
|
|
Команды AJMP, LJMP и SJMP передают |
||||||||||
|
|
помещает |
результат в первый из этих |
|||||||||
|
|
|
управление по непосредственно задан- |
|||||||||
|
|
операндов. |
|
|||||||||
|
|
|
ному в них адресу. AJMP и LJMP работа- |
|||||||||
|
|
|
|
|
||||||||
Команды передачи управления |
|
ют аналогично ACALL и LCALL. Коман- |
||||||||||
|
да SJMP (короткий переход) передаёт |
|||||||||||
|
|
Существует три основных класса таких |
|
|||||||||
|
|
|
управление в пределах 256-байтной (от |
|||||||||
команд: |
|
|
-128 до +127 байт) окрестности адреса |
|||||||||
безусловный переход, команды вызова и |
|
команды, следующей за SJMP. |
|
|
||||||||
|
возврата из подпрограммы; |
|
Команда JMP@A+DPTR выполняет пе- |
|||||||||
условные переходы; |
|
реход относительно адреса, содержаще- |
||||||||||
|
прерывания. |
|
гося в регистре DPTR. Операнд А ис- |
|||||||||
|
|
В результате выполнения команд переда- |
|
пользуется |
для |
определения смещения |
||||||
чи управления микроконтроллер продол- |
|
(0…255 байт) относительно адреса в дан- |
||||||||||
жает свою работу под управлением команд, |
|
ном регистре. Это означает, что действи- |
||||||||||
расположенных в другом месте памяти про- |
|
тельный адрес перехода может находить- |
||||||||||
грамм (иногда для этого требуется выполне- |
|
ся в любом месте адресного пространс- |
||||||||||
ние определённых условий). |
|
тва памяти программ. |
|
|
|
INFSEMI_2-Text.fm, стр. 275 из 589 (September 3, 2010, 17:05)
7.3. Шестнадцатибитные микроконтроллеры 275
Блок |
ОЗУ |
|
|
|
энергосберегающих |
Порт 0 |
I/O |
||
режимов |
256 × 8 |
|
|
|
T0 |
|
Порт 1 |
I/O |
|
T2 |
ЦПУ |
USART |
|
|
T1 |
|
Порт 2 |
I/O |
|
8K × 8 ПЗУ (C501-1R) |
Порт 3 |
I/O |
||
8K × 8 ОППЗУ (C501-1E) |
||||
|
|
Рис. 7.14. Функциональная схема микроконтроллера C501-F.
поддержкимодульВстроенный |
|
Генератор сторожевого таймера |
XRAM |
|
ОЗУ |
|
|
|
эмуляциирежима |
|
|
Порт 0 |
I/O |
||||
10-битный АЦП |
256 × 8 |
256 × 8 |
||||||
|
|
|||||||
|
|
|
|
|||||
|
|
Таймер 2 |
|
|
|
|
8-битный цифровой порт |
|
|
|
16-битный модуль захвата |
T0 |
|
|
Порт 1 |
ввода/вывода |
|
|
|
Процессорное |
|
8-битный |
|
4-канальный аналоговый вход |
||
|
|
и сравнения |
|
|
|
|||
|
|
ядро C500 |
|
USART |
|
|
||
|
|
|
|
|
|
|||
|
|
10-битный модуль сравнения |
T1 |
|
|
Порт 2 |
I/O |
|
|
|
|
|
|
|
|
||
|
|
|
ПЗУ/ОППЗУ |
|
|
8-битный цифровой порт |
||
|
|
Сторожевой таймер |
|
Порт 3 |
ввода/вывода |
|||
|
|
|
16К × 8 |
|
|
|
4-канальный аналоговый вход |
|
|
|
Рис. 7.15. Функциональная схема микроконтроллера C504. |
|
|
Генератор сторожевого таймера |
XRAM |
|
ОЗУ |
|
|
|
|
|
C505/C505C: 256 байт |
|
Порт 0 |
I/O |
|
|
|
|
256 байт |
||||
Встроенный модуль поддержки |
|
АЦП |
C505A/C505CA: 1 Кбайт |
|
|
||
|
|
|
|
|
|||
|
|
|
|
|
8 аналоговых входов/ |
||
|
C505/C505C: 8-битный |
|
|
|
|
||
режима эмуляции |
C505A/C505CA: 10-битный |
|
|
|
Порт 1 |
8-битный цифровой |
|
|
Таймер 0 |
|
|
порт ввода/вывода |
|||
|
|
8-битный |
|
||||
|
Процессорное |
|
|
|
|||
Таймер 2 |
ядро C500 |
|
USART |
|
|
||
|
|
|
|
|
|||
|
8 регистров- |
|
|
Порт 2 |
I/O |
||
|
|
|
|
|
|||
Полнофункциональный |
Таймер 1 указателей данных |
|
|
|
|||
контроллер шины CAN |
|
|
|
|
I/O |
||
(только для C505/C505A) |
|
|
|
Порт 3 |
|||
|
Память программ |
|
|
|
|||
|
C505/C505C: 16К ПЗУ |
|
|
||||
|
|
|
|
|
|||
|
|
Сторожевой таймер |
C505A/C505CA: 1К ППЗУ |
Порт 4 |
I/O (двухбитный порт |
||
|
|
|
|
|
ввода/вывода) |
||
|
|
|
|
|
|
|
|
|
|
Рис. 7.16. Функциональная схема микроконтроллеров C505/C505C/C505A/C505CA. |