Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Применение микроконтроллеров MCS-51 при проектировании электронных устройств. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
С помощью этих команд можно, например, некоторый внутренний флаг (бит) вывести на одну из линий порта:
MOV C, FLAG
MOV P1.0, C
Хотя среди битовых инструкций нет операции "исключающее ИЛИ", она достаточно просто реализуется программно (см., например, [5], стр. 1–15).
7.4. Команды переходов
Команды группы переходов можно подразделить на 3 подгруппы. Первая подгруппа – безусловные переходы. Список команд этой под­группы приведён в табл. 7.7.
Таблица 7.7
Команды безусловных переходов
Мнемоника Операция Время, мкс JMP addr Переход по адресу 2 JMP @A+DPTR Переход по @A+DPIR 2 CALL addr Вызов подпрограммы по адресу 2 RET Возврат из подпрограммы 2 RETI Возврат из прерывания 2 NOP No operation 1
Под одним мнемоническим обозначением JMP скрыты три коман­ды перехода: SJMP, LJMP и AJMP, которые отличаются форматом ад­реса перехода. JMP является общим обозначением, применяемым в тех случаях, когда программисту безразлично, какую команду перехода использовать.
Для короткого перехода (Short JMP, Short – короткий) адрес перехода определяется смещением, в качестве которого выступает второй байт
команды. Этот байт интерпретируется как число со зна­ком, что обеспечивает переход на величину от –128 до +127 байт отно­сительно адреса команды, следующей за инструкцией SJMP.
Инструкция длинного перехода LJMP (Long JMP, Long – длин-
ный) имеет длину в три байта, причём два последних байта представ-
41
ляют адрес. Эта команда дает возможность перехода к любому адресу из 64 Кбайт памяти программ.
Команда среднего перехода (Average JMP, Average – сред- ний) является двухбайтной. Первый байт помимо кода операции со­держит 3 бита адреса перехода, а второй байт – остальные 8 бит адреса перехода. При выполнении команды AJMP эти 11 бит подставляются в
11 младших разрядов PC
, а старшие 5 бит остаются без изменений.
Следовательно, переход возможен в пределах блока в 2 Кбайт, в кото­ром расположена команда AJMP.
Во всех случаях программисту следует описывать адрес перехода или в виде метки, или в виде 16-битной константы. Ассемблер сам подставит корректный формат адреса.
Инструкция JMP @A+DPTR предназначена для выполнения пере­ходов по
таблице. В момент выполнения команды адрес перехода вы­числяется как сумма содержимого шестнадцатибитного DPTR и со­держимого аккумулятора. Обычно DPTR устанавливается на адрес таблицы переходов, а в аккумуляторе находится смещение (индекс) относительно начала таблицы. Практический пример использования этой команды приведен ниже:
MOV DPTR, #JUMP_TABLE MOV A, INDEX_NUMBER RL A ;обеспечивается двухбайтовый интервал
;при последовательных значениях номера ;индекса (0,1,2,3...)
JMP «A+DPTR
JMP_TABLE:
AJMP CASE_0 AJMP CASE_1 AJMP CASE_2 AJMP CASE_3 AJMP CASE_4
По аналогии с командой JMP команда CALL addr имеет две фор­мы: короткую и среднюю: LCALL и ACALL. Все замечания относи­тельно форматов JMP верны и для CALL.
Единственное различие команд RET и RETI заключается в том, что при выполнении команды RETI система организации прерываний уве­домляется об окончании подпрограммы прерываний.
42
Вторая подгруппа – условные переходы. Их характеристики приве­дены в табл.7.8. Все команды этой подгруппы выполняют короткий переход и содержат байт смещения, который из-за отсутствия места в табл. 7.8 не показан. Отметим, что переход по нулевому/ненулевому условию производится на основе содержимого аккумулятора, а флаг Z в слове состояния программы отсутствует.
Таблица 7.8
Команды условных переходов
Мнемоника Операция
JZ JNZ DJNZ <byte> Decr. and jump if not 0 X X 2 CJNE A, <byte> Переход, если А=<byte> X X 2 CJNE <byte>,
#data
Переход, если А = 0 Только аккумулятор 2 Переход, если А ≠ 0 Только аккумулятор 2
Jump if <byte>≠#data X X 2
Режим адресации
Reg Ind Imm Dir
Время,
мкс
Инструкция DJNZ (Decrement and Jump if Not Zero – уменьшить и перейти, если не нуль) используется для организации циклов. Чтобы выполнить цикл N раз, в байт-счетчик загружается число N и в конце цикла ставится команда перехода DJNZ, указывающая на начало цик­ла, как это показано ниже:
MOV COUNTER, #10 LOOP: ;(начало цикла)
*
*
*
;(конец цикла)
DJNZ COUNTER, LOOP
;(продолжение)
Инструкции «сравнить
и перейти» CJNE (Compare and Jump if Not Equal) также может быть использована для управления циклом. В этой инструкции происходит сравнение двух байт, указанных в поле опе­рандов, и переход произойдет, если эти байты не равны.
43
Другое применение этой конструкции – сравнение типа «больше чем, меньше чем». Два байта в поле операнда рассматриваются как беззнаковые целые. Если первый байт меньше второго, то флаг C уста­навливается в 1. Если первый байт больше второго или равен ему, то флаг C очищается.
Таблица 7.9
Условные переходы по состоянию бита
Мнемоника Операция Время, мкс
JC rel JNC rel JB bit, rel JNB bit, rel
JBC bit, rel
Переход, если С=1 2 Переход, если С=0 2 Переход, если бит=1 2 Переход, если бит=0 2 Переход, если бит=1, сброс
бита
2
Команды, относящиеся к третьей подгруппе, перечислены в табл. 7.9. Это команды, анализирующие состояние адресуемого бита и осу­ществляющие (или не осуществляющие) короткий (Short) переход в соответствии с байтом смещения.
44
8. ПОРТЫ ВВОДА-ВЫВОДА
Остановимся несколько подробнее на работе с портами P0 - P1 в моделях i8051 - i8052. Каждый порт состоит из защёлки (Special Func­tion Registers от P0 до P3 с адресами 80H, 90H, A0H и B0H соответ­ственно), выходного драйвера и входного буфера.
Выходные драйверы портов P0 и P2 и входные буферы P0 исполь­зуются при обращении к внешней памяти. В этом случае P0 выводит младший байт адреса внешней памяти, мультиплексированный мени с записываемым или читаемым байтом. При 16-разрядном адресе внешней памяти порт P2 выводит старший байт адреса внешней памя­ти. В противном случае P2 продолжает передавать содержимое P2
SFR.
Все выводы порта P3 (а также выводы P1.0 и P1.1 для i8052) явля­ются многофункциональными. Они не только служат выводами порта, но и выполняют некоторые специальные функции ниже:
Вывод порта Альтернативная функция
P1.0 T2 (внешний вход для Timer/Counter 2 в i8052) P1.1 T2EX (запуск Timer/Counter 2 Capture/Reload в i8052) P3.0 RxD (вход последовательного порта) P3.1 TxD (выход последовательного порта) P3.2 INT0\ (внешнее прерывание) P3.3 INT1\ (внешнее прерывание) P3.4 T0 (внешний вход Timer/Counter 0) P3.5 T1 (внешний вход Timer/Counter 1) P3.6 WR\ (строб записи во внешнюю память данных) P3.7 RD\ (строб чтения из внешней памяти данных)
, как это показано
во вре-
Альтернативная функция будет активизироваться, если ствующий бит защёлки SFR записана единица. В противном случае вывод порта будет поддерживать уровень 0.
45
в соответ-
В качестве иллюстрации на рис. 8.1 и рис. 8.2 показаны схемы за-
Z
Z
щёлок портов P0 и P3.
Чтение защёлки
Внутр.
шина
Запись
в защёлку
Чтение вывода
TT
D
Защёлка P0.X
Q
QC
Адрес/Данные
MUX
Управлени
е Vcc
&
Вывод
P0.X
Рис. 8.1. Схема защёлок порта P0
Из них следует, что защёлки для каждого разряда представляют со­бой D-триггер, в который записывается информация с внутренней ши­ны в соответствии с сигналом CPU "записать в защёлку". Выход триг­гера Q может быть прочитан на внутреннюю шину по сигналу CPU "прочитать защёлку". Состояние вывода порта может быть прочитано на внутреннюю шину с
помощью сигнала CPU "прочитать вывод пор­та". Некоторые инструкции, которые читают порт, активизируют сиг­нал "прочитать защёлку", другие – "прочитать вывод порта".
Как следует из рис. 8.1, выходные драйверы P0 (а также и порта P2) могут переключаться на внутреннюю шину ADDR и ADDR/DATA с помощью внутреннего сигнала CONTROL для доступа к внешней па­мяти. Во время доступа к внешней
памяти в P0 SFR записываются 1, а
значения P2 SFR остаются неизменными.
Кроме того, из рис. 8.2 видно, что альтернативные функции могут быть активизированы, если соответствующие защёлки P3 содержат 1. В то же время входные сигналы альтернативных функций доступны всегда.
46
Чтение защёлки
у
Z
Z
Внутр.
шина
D
TT
Vcc
Альтернативная
выходная
функция
Внутренняя
«подтяжка»
Q
Вывод РЗ.Х
Запись в защёлк
Чтение вывода
C Q
Защёлка
РЗ.Х
&
Альтернативная входная функция
Рис. 8.2. Схема защёлок порта P3
Порты P1, P2, и P3 имеют внутреннюю «подтяжку» к напряжению источника питания. Каждая линия ввода-вывода может быть незави­симо использована как входная или выходная. (К портам P0 и P1 это относится, когда они не используются как шины адреса-данных.) Что­бы линии могли быть использованы как входные, защёлки должны со­держать 1, чтобы закрыть МОП-транзистор
выходного драйвера.
Порт P0 отличается тем, что не имеет внутренней «подтяжки». МОП-транзистор используется в качестве «подтяжки» только тогда, когда при обращении к внешней памяти порт P0 выводит 1. В осталь­ных случаях этот транзистор отключен. Следовательно, выходные ли­нии порта P0 могут рассматриваться как выходные линии с открытым стоком. Запись 1 в бит защёлки
оставляет оба МОП-транзистора за-
47
крытыми, поэтому вывод оказывается «плавающим». В этих условиях он может рассматриваться как высокоимпедансный вход.
Поскольку порты P1, P2, и P3 имеют внутреннюю фиксированную «подтяжку», они часто называются квазидвунаправленными портами. Рассматриваемые как входы, они имеют на входе 1 и служат источни­ками тока при подключении внешней нагрузки. С другой стороны, порт P0 считается истинно двунаправленным, поскольку
как входной
он является плавающим.
При сбросе во все порты записываются 1. Если затем в них записы­вается 0, то для осуществления ввода нужно записать 1.
Нагрузочная способность выходных буферов портов P1, P2 и P3 составляет четыре маломощных ТТЛШ входа. Для порта P0 в режиме обращения к внешней памяти нагрузочная способность выходных бу­феров равна восьми маломощным
ТТЛШ входам. В качестве выводов порта они нуждаются во внешней «подтяжке» для управления другими входами.
Некоторые инструкции при обращении к портам читают защёлки, другие – состояние выводов. Инструкции, которые читают защёлки, могут считывать значения выходов защёлок, изменять их и снова запи­сывать в защёлку. Они являются командами считывания-модифи­кации-записи. Ниже
перечислены такие инструкции. Когда операндом­приемником является порт или бит порта, инструкции считывают зна­чение защёлки, а не выводов.
ANL (логическая операция AND, например, ANL P1, A) ORL (логическая операция OR, например, ORL P1,A) XRL (логическая операция XOR, например, XRL P1,A) JBC (переход, если бит=1 и сброс бита, например, JBC P1.1 LABEL) CPL (инвертировать бит, например, CPL P3.0) INC (инкрементировать, например, INC P2) DEC (декрементировать, например, DEC P2) DJNZ (декремент и переход, если не 0: DJNZ P3, LABEL) MOV PX.Y,C (поместить флаг переноса CLR PX.Y (очистить бит Y порта X) SETB PX.Y (установить бит Y порта X)
в бит Y порта X)
Совсем не очевидно, что три последние команды относятся к ин-
струкциям чтения-модификации-записи, но это именно так. Они чита-
48
ют байт порта, все 8 бит, модифицируют адресуемый бит и записыва­ют новый байт обратно в защёлку.
Одной из причин, по которой команды чтения-модификации­записи обращаются к защёлкам, становится необходимость устранить возможные ошибки при чтении уровня напряжения. Например, вывод порта может быть подключен к базе транзистора. Когда в данный бит будет записана 1, транзистор будет включен (и на его базе напряжение будет около 0.6 В). Если CPU будет читать этот вывод, он прочтёт напряжение базы транзистора, которое будет интерпретировано как уровень 0. В то же время при чтении защёлки будет прочитано значе­ние 1, что соответствует истине.
Во время обращения к внешней памяти CPU записывает 0FFH в защёлки
порта P0 (SFR), что уничтожает предыдущую информацию в
SFR P0. Если пользователь записывает что-либо в порт P0 во время
выборки команд из внешней памяти, коды команд могут быть искаже­ны. Поэтому ничего не записывайте в порт P0 во время работы с внешней памятью.
Внешняя память программ доступна при двух условиях:
1) когда активен сигнал EA\ (т
. е. когда на нем 0);
2) когда PC содержит адрес, больший чем 0FFFH (для i8051) или
1FFFH (для i8052), – ведь здесь рассматриваются только эти модели.
Из этого следует, что при использовании версии без ПЗУ вывод EA\ должен быть подсоединен к уровню 0.
Когда CPU выполняет команды из внешней памяти программ, все 8 бит предназначены только для работы с памятью
и не могут быть
использованы как линии ввода-вывода общего назначения. Во время выборки команд из внешней памяти порт P2 выставляет старший байт PC.
При обращении к внешней памяти данных может быть использова­на как шестнадцатиразрядная адресация (MOVX @DPTR), так и вось­миразрядная (MOVX @Ri). Во время использования 16 разрядов со­держимое SFR P2 заменяется на значение адреса, а
в следующем цикле (если он, конечно, снова не является циклом обращения к внешней па­мяти данных) вновь восстанавливается значение SFR P2. Во время страничной адресации на выходах порта P2 всегда находятся значения
SFR P2.
В заключение раздела приведём информацию о состоянии SFR по-
сле включения питания или сброса для микроконтроллеров i8051 и
i8052 (табл. 8.1).
49
Таблица 8.1
Начальные значения регистров специального назначения
Регистр Значение в двоичном коде
SP PO P1 P2 P3 IP
IE
SBUF PCON
00000111 11111111 11111111 11111111 11111111 8051 XXX00000 8052 XX000000 8051 0XX00000 8052 0X000000 Не определено CHMOS 0XXX0000
Регистры ACC, B, PSW, DPTR (DPH, DPL), TMOD, TCON, TH0, TL0, TH1, TL1, SCON (и регистры T2CON, TH2, TL2, RCAP2H, RCAP2L в 8052) при этом обнуляются.
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]