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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Последовательный порт ввода-вывода обеспечивает синхронный и асинхронный режимы связи и предназначен для поддержки взаимодействия микроконтроллера с модемами и другими внешними устройствами. Он работает как универсальный асинхронный приемопередатчик (UART) в трех полнодуплексных режимах (режимы 1, 2 и 3), причем асинхронная передача и прием могут вестись одновременно и с одинаковой или разной скоростью. Блок UART поддерживает обнаружение однобитовых ошибок кадра передачи, мультипроцессорный обмен и автоматическое распознавание адреса. Последовательный порт работает также и в синхронном режиме (режиме 0).

В состав UART входят передающий и принимающий сдвигающие регистры, буфер приемника и передатчика SBUF и блок управления работой порта с регистром управления SCON. Запись байта в буфер приводит к автоматической переписи байта в сдвигающий регистр передатчика и инициирует начало передачи. Наличие буферного регистра приемника позволяет совмещать операцию чтения из SBUF ранее принятого байта с приемом очередного. Если к моменту окончания приема очередного байта предыдущий не был считан из SBUF, то он будет потерян.

Скорость передачи/приема (частота пересылки битов) зависит от запрограммированного режима работы порта и значения бита SMOD в регистре PCON. Последовательный порт может работать в одном из четырех режимов.

Режим 0. Информация и передается и принимается через внешний вывод RxD (линия порта Р3.0). Через выход передатчика TxD (Р3.1) выдаются тактовые импульсы, стробирующие передаваемые или принимаемые биты. Формат посылки - 8 бит. Сдвиг данных (младшим значащим битом вперед) происходит на последней фазе (S6P2) каждого цикла, поэтому частота приема и передачи равна FOSC/12.

Режим 1. Информация передается через вывод TxD, а принимается через RxD. Формат посылки - 10 бит (стартовый - "0", 8 информационных и стоповый - "1"). При приеме стоп-бит поступает в разряд RB8 регистра SCON. Частота обмена задается программированием T/C1.

Режим 2. Последовательные данные выдаются на вывод TxD, а принимаются по выводу RxD. Кадр данных состоит из 11 бит (старт-бит, 8 информационных, программируемый девятый бит и стоп-бит). При передаче девятый бит транслируется из SCON.TB8, а при приеме - передается в SCON.RB8. Девятый бит используется по усмотрению программиста, например, как бит контроля информации по четности или как флаг ("control/data" или "address/data") идентификации передаваемого или принимаемого кадра. Частота обмена равна .

Режим 3. Идентичен режиму 2 с тем отличием, что частота обмена задается программированием T/C1 (как и в режиме 1) и равна , где FOV - частота переполнений таймера 1. В большинстве приложений таймер 1 конфигурируется по схеме режима 2 (8-битовый таймер с автоперезагрузкой), для которого FOV определяется выражением:

,

где (ТН1) - десятичный код содержимого ТН1.

 

Система команд 80С51

Режимы адресации

Система команд семейства MCS-51 содержит 111 базовых команд, которые по функциональному признаку можно подразделить на пять групп:

· команды пересылки данных;

· арифметические команды;

· логические команды;

· команды передачи управления;

· команды обработки битовых переменных.

Формат команд - одно-, двух- и трехбайтовый. Первый байт любых типа и формата всегда содержит код операции, второй и третий байты содержат либо адреса операндов, либо непосредственные операнды.

Состав операндов включает в себя операнды четырех типов: биты, ниблы (4 разряда), байты и 16-битные слова. Время исполнения команд составляет 1, 2 или 4 машинных цикла. При тактовой частоте 12 мГц длительность машинного цикла составляет 1 мкс, при этом 64 команды исполняются за 1 мкс, 45 команд - за 2 мкс и 2 команды (умножение и деление) - за 4 мкс.

Набор команд MCS-51 поддерживает следующие режимы адресации.

Прямаяадресация. Операнд определяется 8-битным адресом в инструкции. Эта адресация используется только для внутренней памяти данных и регистров SFR.

Косвенная адресация. В этом случае инструкция адресует регистр, содержащий адрес операнда. Данный вид адресации может применяться при обращении, как к внутреннему, так и внешнему ОЗУ. Для указания 8-битных адресов могут использоваться регистры R0 и R1 выбранного регистрового банка или указатель стека SP. Для 16-битной адресации используется только регистр "указатель данных" (DPTR - Data Pointer).

Регистроваяадресация. Данная адресация применяется для доступа к регистрам R0+R7 выбранного банка. Команды с регистровой адресацией содержат в байте кода операции трехбитовое поле, определяющее номер регистра. Выбор одного из четырех регистровых банков осуществляется программированием битов селектора банка (RS1, RS0) в PSW.

Непосредственнаяадресация. Операнд содержится непосредственно в поле команды вслед за кодом операции и может занимать один или два байта (data8, data16).

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

Другой тип индексной адресации применяется в командах "перехода по выбору" (Case Jump). При этом адрес перехода вычисляется как сумма указателя базы и аккумулятора.

Неявнаяадресация Некоторые инструкции используют индивидуальные регистры (например, операции с аккумулятором, DPTR), это заложено в код операции.

 

Команды пересылки данных

Данную группу команд можно подразделить на следующие подгруппы:

· команды передачи данных, использующие внутреннюю память данных;

· команды передачи данных, использующие внешнюю память данных;

· команды работы с таблицами.

В табл.7.1. показаны команды, использующие внутреннее ОЗУ и применяемые при этом режимы адресации.

Таблица 7.1.. Команды передачи данных, использующие внутреннее ОЗУ.
Мнемоника Операция Режимы адресации
    Dir Ind Reg Imm
MOV A, <src> A=<src> x x x x
MOV <dest>, A <dest>=A x x x  
MOV <dest>, <src> <dest>=<src> x x x x
MOV DPTR, #data16 DPTR=16-bit immediate constant       x
PUSH <src> INC SP:MOV"@SP",<src> x      
POP <dst> MOV <dest>, "@SP": DEC SP x      
XCH A, <byte> ACC and <byte> exchange data x x x  
XCHD A, @Ri ACC and @Ri exchange low nibbles   x    

 

В приведенной таблице используются стандартные обозначения: <src>, (source) - иcточник, <dest>, (destination) - приемник. Команда MOV <dest>, <src> позволяет пересылать данные между ячейками внутреннего ОЗУ или SFR без использования аккумулятора. При этом работа с верхними 128 байтами внутреннего ОЗУ может осуществляться только в режиме косвенной адресации, а обращение к регистрам SFR - только в режиме прямой адресации.

В MCS-51 стек размещается непосредственно в резидентной памяти данных и растет в сторону увеличения адресов. Поскольку по отношению к SP используется косвенная адресация, то стек может попасть и в область "Upper 128", но не в SFR. В тех кристаллах, где "Upper 128" отсутствует, увеличение стека за границу 128 байт приведет к потере данных.

Операция XCH A, <byte> применяется для обмена данными (exchange) между аккумулятором и адресуемым байтом. Команда XCHD A, @Ri аналогична предыдущей, но выполняется только для младших тетрад (ниблов), участвующих в обмене.

В табл.7.2. приведены команды для работы с внешней памятью данных.

 

Таблица 7.2. Команды передачи данных, использующие внешнюю память данных
Мнемоника Операция Разрядность данных
MOVX A, @Ri Read external RAM @Ri 8 bits
MOVX @Ri, A Write external RAM @Ri 8 bits
MOVX A, @DPTR Read external RAM @DPTR 16 bits
MOVX @DPTR, A Write external RAM @DPTR 16 bits

 

Отметим, что при любом доступе к внешней памяти данных используется только косвенная адресация и обмен информацией осуществляется исключительно через аккумулятор. В случае 8-разрядных адресаций используется R0 или R1 текущего регистрового банка, а для 16-разрядных - регистр DPTR. Сигналы чтения и записи ( и ) активизируются только во время выполнения команд MOVX.

В табл.7.3. отражены две команды, предназначенные для чтения табличных данных, размещенных в программной памяти.

 

Таблица 7.3.

Команды для работы с таблицами.

Мнемоника Операция
MOVC A, @A+DPTR Read Program Memory at (A+DPTR)
MOVC A, @A+PC Read Program Memory at (A+PC)

С помощью этих команд, осуществляющих доступ исключительно к памяти программ, возможно только чтение таблиц, но не их изменение, мнемонически эти команды выглядят как MOVC ("move constant"). Если таблица расположена во внешней программной памяти, то чтение байта из нее сопровождается стробом (Program Store Enable).

Первая команда MOVC предназначена для обращения к таблице с максимальным числом входов - до 156 (от 0 до 255). Номер требуемого входа в таблицу загружается в аккумулятор, а регистр DPTR устанавливается на точку начала таблицы. Вторая команда MOVC работает аналогичным образом за исключением того, что в качестве указателя базы используется счетчик команд - РС и обращение к таблице производится из подпрограммы. Вначале номер требуемой точки входа загружается в аккумулятор, затем вызывается подпрограмма:

 

MOV A, Entry Number

CALL Table

 

Подпрограмма "Table" будет выглядеть следующим образом:

 

Table: MOVC A, @A+PC
  RET  

 

Таблица должна находится в памяти программ непосредственно за инструкцией RET, причем такая таблица может иметь до 255 точек входа (от 1 до 256). Номер 0 не может быть использован, потому что во время выполнения инструкции MOVC A, @A+PC счетчик команд содержит адрес инструкции RET, и значением точки входа "0" будет сам код этой инструкции.

Команды обработки данных

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

ADD A,X - сложение;

ADDС A,X - сложение с учетом переноса;

SUBB A,X - вычитание с учетом заема;

INC X - единичное положительное приращение (инкремент)

DEC X - единичное отрицательное приращение (декремент);

MUL AB - беззнаковое умножение;

DIV AB - беззнаковое деление;

DA A - десятичную коррекцию аккумулятора.

 

Команда ADD реализует функцию вычисления суммы содержимого аккумулятора с операндом X (либо как целых чисел без знака, либо как целых со знаком в дополнительном коде) и запись результата в аккумулятор. Содержимое операнда X (если это ячейка памяти) при этом не изменится. При выполнении команды формируется признак переноса С.

Команда ADDC (SUBB) в дополнение к вычислению суммы (разности) учитывает распространение переносов между байтами и может быть использована для обработки операндов, длина которых превышает 8 разрядов.

Команда MUL AB перемножает целые числа без знаков из аккумулятора и регистра B. Произведение двух восьмиразрядных чисел будет, естественно, иметь длину 16 разрядов и занимать 2 байта. Старший байт произведения помещается в регистр В, а младший - в аккумулятор. Если результат произведения превышает 255, то устанавливается флаг переполнения OV в регистре признаков, в противном случае он сбрасывается. В любом случае сбрасывается флаг переноса.

Команда DIV AB осуществляет беззнаковое деление восьмибитного целого числа из аккумулятора на восьмибитное число из регистра B. Частное от деления заносится в аккумулятор, остаток - в регистр В. Флаги переноса С и переполнения OV сбрасываются.

Группа команд л огических операций включает команды логического ИЛИ (ORL), И (ANL) и исключающее ИЛИ (XRL), реализующие соответствующие поразрядные операции над содержимым операндов.

Характерным для семейства MCS-51 является необязательность использования аккумулятора в логических командах ни в качестве одного из источников операндов, ни в качестве приемника результата операции.

Команды побитовой обработки Микросхемы MCS-51 содержат в своем составе "булевый" процессор, который можно рассматривать как независимый процессор побитовой обработки, имеющий свое побитово-адресуемое ОЗУ, свой ввод-вывод и выполняющий свой набор команд. Команды поддерживают группу операций: сброс CLR, установку SETB, инверсию CPL, конъюнкцию ANL, дизъюнкцию ORL и пересылки MOV операндов, в качестве которых используются биты.

Внутреннее ОЗУ имеет 128 прямоадресуемых бит, пространство регистров SFR также поддерживает до 128 битовых полей. Побитно-адресуемыми являются все порты ввода-вывода, каждая линия которых может рассматриваться как однобитовый порт.

Каждый из отдельно адресуемых бит может быть установлен в "1", сброшен в "0", инвертирован, передан в разряд "Carry" или принят из него. Между любым прямоадресуемым битом и флагом переноса могут быть произведены логические операции "И" и "ИЛИ". Кроме того, по результату анализа состояния адресуемого бита возможно осуществление короткого (Short) условного перехода в соответствии с байтом смещения (relative).

Команды передачи управления

Команды безусловных переходов имеют формат "JMP addr", хотя имеется 3 варианта - SJMP, LJMP и AJMP, различающихся форматом адреса перехода.

Для короткого перехода (Short JMP) адрес перехода определяется смещением (второй байт команды), при этом "дальность" перехода ограничена диапазоном -128/+127 байт относительно инструкции, следующей за JMP.

В инструкции длинного перехода (Long JMP) используется адрес назначения в виде 16-битной константы, что дает возможность перехода по любому адресу из 64К памяти программ.

Команда AJMP (Absolute JMP) является двухбайтной и использует 11-битную константу адреса. При выполнении инструкции младшие 11 бит РС замещаются 11-битным адресом из команды, старшие 5 бит остаются неизменными.

Инструкция JMP @A+DPTR предназначена для выполнения перехода "по выбору". Адрес назначения вычисляется как сумма значения регистра DPTR и аккумулятора. Обычно DPTR устанавливается на адрес таблицы переходов, а аккумулятор содержит индекс этой таблицы.

Команда "CALL addr" (аналогично команде "JMP addr") имеет две формы - LCALL и ACALL. Инструкция LCALL использует 16-битный адресный формат, ACALL - 11-битный. Подпрограмма завершается инструкцией RET, позволяющей вернуться к инструкции, следующей за командой CALL.

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

Все условные переходы определяют адрес назначения как относительное смещение (rel) с длиной перехода, находящейся в пределах от -128 до +127 байт (относительно инструкции, следующей за условным переходом).

В PSW отсутствует флаг нуля, поэтому инструкции JZ и JNZ проверяют условие "равен нулю" тестированием данных в аккумуляторе.

Инструкция DJNZ (Decrement and Jump if Not Zero) используется для организации циклов. Инструкция CJNE (Compare and Jump Not Equal) также может использоваться для управления циклами. Другим применением данной инструкции является проверка условий "больше чем", "меньше чем". Два байта в поле операндов представлены как "беззнаковое целое". Если первый операнд меньше, чем второй, то бит переноса "С" устанавливается в "1"; если больше или равен, то флаг "С" очищается.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 188; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.200.248.66 (0.132 с.)