Скачиваний:
30
Добавлен:
27.04.2015
Размер:
107.41 Кб
Скачать

(Конспект лекций) .sss { font-size: large; text-indent: 40 } --> 1. Структура курса.

1.1. Содержание лекций.

1.1.1. Отладочные средства МП системы. Пакет симуляции AVSIM51 (2 часа).

1.1.2. Ввод и вывод информации в МП системах:

- двоичные датчики (1 час ).

- матричные датчики (1 час ).

- аналого - цифровой и цифроаналоговый преобразователи (2 часа ).

1.1.3. Использование МП средств в системах управления и контроля ЦСП (2 часа ).

1.1.4. Использование микроконтроллеров для низкоскоростной обработки сигналов. (2 часа ).

1.2. Содержание практических занятий.

1.2.1. Изучение пакета симуляции микроконтроллера AVSIM51 (1 час ).

1.2.2. Ввод программы, разработанной в рамках КР (1 час ).

1.2.3. Отладка программы, разработанной в рамках КР (2 часа ).

Пункты 1 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3

Таблицы 1 2 3 4 5 6 7 8 9

Рисунки 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

2. Основы проектирования микропроцессорных систем. Решение задачи проектирования микропроцессорных (МП) систем подразумевает последовательное выполнение следующих обязательных этапов:

- постановка задачи;

- разработка алгоритма работы МП системы;

- выбор базовой серии интегральных микросхем для построения МП системы;

- разработка аппаратного обеспечения МП системы;

- разработка програмного обеспечения МП системы;

- отладка програмного обеспечения МП системы;

- программирование МП системы (запись отлаженной программы в запоминающее устройство МП системы);

- макетирование и испытание МП системы;

- конструктивное оформление и подготовка к серийному производству.

Первые два этапа решают технологическую задачу техники МСП и определяют функциональное назначение МП системы.

Выбор базовой серии микросхем и средств МП техники определяется сложностью решаемой задачи и требованиями к скорости выполнения основных функций.

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

- Операционное устройство (ОУ), обеспечивающее выполнение некоторой группы операций по обработке информации (арифметические, логические, сдвиговые и др., характерные для данного типа МП);

- Управляющее устройство (УУ) формирующее некоторую, заданную пользователем, последовательность выполнения операций (последовательность выполнения программы);

- Порты ввода-вывода информации (ПВВ), подлежащей обработке, реализующие функции взаимодействия микропроцессорной системы с внешними устройствами;

- Запоминающее устройство памяти программ (ЗУПП), предназначенное для размещения информации о последовательности выполнения операций операционным устройством (программе);

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

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

Информация, подлежащая обработке, вводится в МП систему через ПВВ и поступает на ОУ.

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

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

Естественный ход выполнения программы может измениться не только по значению признаков результата операции, но и под воздействием внешних логических сигналов, подаваемых на специальные входы МП системы, называемые входами прерываний.

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

Помимо функциональных узлов, представленных на рис. 1, в состав МП системы может входить ряд других узлов, назначение которых будет пояснено далее по мере их рассмотрения.

ЗУПП и ЗУПД могут быть физически и логически объединены или разделены в разных типах МП, что определяет принадлежность МП к основным видам архитектуры построения МП средств.

Если МП использует единый банк памяти (единое ЗУ) для размещения программ и данных, и при этом любая ячейка данного ЗУ (кроме нулевой - стартовой) может быть использована как для размещения кода операции, так и для размещения любых данных, в том числе результата операции, то такую архитектуру МП называют фон - Наймановской. Фон - Наймановская архитектура обычно используется в МП, предназначенных для построения ЭВМ общего назначения (компьютеров), поскольку позволяет при данном объеме ЗУ осуществить его оптимальное разбиение на ЗУПП и ЗУПД в соответствии с требованиями решаемой задачи. Основным недостатком фон - Наймановской архитектуры является использование одной и той же шины для доступа как к кодам команд, так и к данным, что при прочих равных условиях увеличивает время доступа к ЗУ и тем самым снижает производительность системы.

Если в МП доступ к ЗУПП и ЗУПД организован по разным шинам, а сами ЗУПП и ЗУПД разделены физически и логически, то такие МП относят к Гарвардской архитектуре. Гарвардская архитектура МП обеспечивает более высокую производительность по отношению к фон - Наймановской в части обращения к ЗУ, однако при этом накладывает некоторые ограничения на объем размещаемой в ЗУПП программы, не допуская ее расширения за счет емкости ЗУПД, что, соответственно , ограничивает сложность решаемых задач. Указанное свойство определяет основное направление использования МП Гарвардской архитектуры - специализированные ЭВМ, предназначенные для решения конкретных задач, обычно встраиваемые в аппаратуру и называемые контроллерами.

Существует ряд модификаций Гарвардской архитектуры, позволяющих использовать ЗУПП в качестве ЗУПД (например архитектура процессоров TMS320XX фирмы TEXAS INSTRUMENTS или ADSP-21XX фирмы ANALOG DEVICES), сохраняющих, однако, общий для данного типа архитектуры недостаток - невозможность использования ЗУПД в качестве ЗУПП.

В зависимости от степени концентрации функций МП системы на кристаллах логических интегральных микросхем принята следующая классификация МП средств:

Однокристальные микроЭВМ, предполагающие размещение в одном корпусе микросхемы (на одном кристалле) всех функциональных единиц рис. 1;

МП с фиксированной разрядностью и набором команд, строящиеся в виде микропроцессорных комплектов (МПК), в состав которых входит центральный процессор, совмещающий функции ОУ и УУ, и некоторая номенклатура периферийных устройств, и предполагающие использование микросхем ЗУ общего назначения;

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

Применение МП средств того или иного типа имеет характерные особенности.

Микропроцессоры с фиксированной разрядностью и набором команд в настоящее время представлены, главным образом, изделиями, предназначенными для построения ЭВМ общего назначения. Исторически начиная с МПК серий К580 (ЭВМ серии СМ1800), К581 (Электроника-60, ряд DEC) и Z80 (ZX Spectrum) и до настоящего времени (МПК КМ1810, Pentium, Power PC, Alpha) использование в составе ЭВМ является основным направлением применения МП данного типа, что, однако, не препятствует их использованию как в оборудовании коммутационных станций (EWSD, S12, SI2000, DX200 и др.), так и в других типах телекоммуникационного оборудования (например, транскодерах систем сигнализации).

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

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

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

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

Среди доступных широкому кругу пользователей типов СМПК следует выделить серии KP 1804, KP 588.

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

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

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

Отладочная модификация в разных типах ОМЭВМ выполняется по разному. Практически любая ОМЭВМ имеет отладочную модификацию без встроенного ЗУ, вместо которого в процессе отладки к ОМЭВМ подключается внешнее ЗУ с организацией и объемом памяти, аналогичным встроенному в серийной модификации, что позволяет анализировать правильность работы МП системы по разработанной программе наиболее простым способом и допускает оперативную коррекцию программы. Естественно, что общая схема устройства, предназначенного для отладки ОМЭВМ без встроенного ЗУ, весьма громоздка и за редким исключением не имеет перспектив автономного использования.

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

Однокристальные микроЭВМ являются в настоящее время наиболее широко и быстро развивающимися классом МП устройств. Помимо традиционных ОМЭВМ общего назначения, имеющих фиксированную разрядность данных и обеспечивающих выполнение основных арифметических, логических и сдвиговых операций, в настоящее время выпускается целый ряд специализированных и предметно ориентированных ОМЭВМ. Так, например, целый класс ОМЭВМ составляют цифровые процессоры, предназначенные для обработки сигналов (ЦПОС). Главной отличительной особенностью таких процессоров является их специфическая архитектура, ориентированная на выполнение операций свертки. Обычно ЦПОС содержит встроенный аппаратный умножитель, средства, поддерживающие функцию типа "линия задержки" (либо циклические операции сдвига блока данных, либо специальную кольцевую адресацию информационных блоков), а также средства, позволяющие сохранять в необходимых размерах и корректировать разрядность данных при непрерывной обработке. Кроме того, в настоящее время выпускаются многочисленные ОМЭВМ, ориентированные на использование в телекоммуникационных системах - трансиверы цифровых потоков Е1 и Т1, интегральные устройства сжатия речевой информации, процессоры голосовой почты, автоответчики, тональные приемники/генераторы и т.п.

Как правило, ОМЭВМ строятся в Гарвардской архитектуре и обладают двумя главными недостатками - ограниченным объемом внутренней (резидентной) памяти и невозможностью наращивания разрядности обрабатываемой информации. Большинство выпускаемых в настоящее время ОМЭВМ обеспечивают возможность наращивания объема ЗУ (как ЗУПП, так и ЗУПД) за счет использования внешней памяти, однако такое использование нехарактерно для ОМЭВМ, лишая этот тип МП главного достоинства - дешевизны и компактности.

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

Настоящие методические указания посвящены вопросам использования ОМЭВМ в оборудовании ЦСП.

В качестве задач, решаемых ОМЭВМ, рассматриваются задачи управления и контроля.

В качестве элементной базы рассматриваются ОМЭВМ 1830ВЕ750 и ее зарубежный аналог D87С51 производства фирмы INTEL, а также разновидности этих ОМЭВМ, объединенных понятием микроконтроллеров серии МК51 (MCS51), выпускаемый различными производителями. Эти ОМЭВМ, разработанные в 1982 году, благодаря удобству архитектуры и системы команд поставили своеобразный рекорд долгожительства и до настоящего времени считаются одним из наиболее удачных типов ОМЭВМ, разработанных за всю историю развития средств МП техники.

2.2. Однокристальные микроЭВМ семейства МК51 (MCS51) Основные характеристики.

ОМЭВМ семейства МК51 относятся к устройствам с байтовой организацией, т.е. основной единицей обработки информации в этих ОМЭВМ является байт, содержащий, как известно, 8 двоичных разрядов. Разработанные для n-МОП технологии, ОМЭВМ сохранили свою архитектуру при переходе на технологию КМОП, что позволило, сохранив полную преемственность аппаратных и программных средств, более чем на порядок снизить энергопотребление изделия. В настоящее время серийно выпускаются только ОМЭВМ, выполненные КМОП технологии.

Базовым кристаллом семейства является ОМЭВМ 80С51, имеющая следующие характеристики:

- Объем резидентной памяти программ, Кбайт 4

- Тип резидентной памяти программ ПЗУ

- Объем резидентной памяти данных, байт 128

- Минимальная частота следования тактовых сигналов, МГц 1,2

- Максимальная частота следования тактовых сигналов, МГц 12

- Напряжение питания, В +5+10%

- Ток потребления, мА 8

- Объем внешней адресуемой памяти программ, Кбайт 64

- Объем внешней адресуемой памяти данных, Кбайт 64

В состав ОМЭВМ 80С51 входят следующие дополнительные устройства:

- Четыре восьмиразрядных параллельных порта ввода вывода;

- Два 16-ти разрядных таймера - счетчика;

- Последовательный порт;

- Задающий тактовый генератор;

- Блок регистров специальных функций;

- ЗУ криптограммы;

- Система защиты ЗУПП от несанкционированного доступа.

Обозначение ОМЭВМ несет следующую смысловую нагрузку:

первая цифра:

8 - разрядность АЛУ, бит;

вторая цифра:

0 - внутреннее ЗУПП программ масочного типа;

3 - пониженное (+3В) напряжение питания;

7 - ЗУПП репрограммируемое с ультрафиолетовым стиранием;

9 - ЗУПП репрограммируемое с электрическим стиранием;

буква:

С - устройство, выполненное по КМОП технологии;

последние цифры:

51 - код семейства МК51 (MCS-51);

31 - без внутреннего ЗУПП (отладочная версия).

Система команд ОМЭВМ 80С51 содержит 111 базовых команд.

Двухуровневая система прерываний поддерживает прерывания от 5 источников.

Если перед указанным обозначением стоят буквы, то они означают конструктивное исполнение:

D - керамический корпус DIP 40 выводов;

P - пластиковый корпус DIP 40 выводов;

N - корпус PLCC, 44 вывода.

Керамический корпус DIP имеет встроенное окно, закрытое кварцевым стеклом, для стирания ультрафиолетовым излучением записанной в ЗУПП программы. Пластиковый корпус DIP окна не имеет, поэтому ОМЭВМ Р87С51 считается однократно программируемым изделием, предназначенным для целей мелкосерийного производства.

Выпускаются также изделия с повышенным быстродействием - с предельным значением тактовой частоты 16, 20 и 24 МГц; предельное значение тактовой частоты в этом случае указывается после основного обозначения.

Помимо базового изделия в состав семейства МК51 входят следующие модификации:

- 87С52, 87С54 и 87С58, имеющих резидентные ЗУПД емкостью 256 байт и ЗУПП емкостью, соответственно, 8К, 16К и 32К байт, а также дополнительный таймер - счетчик;

- 87C51FA, 87C51FB, 87C51FC, аналогичные по характеристикам, соответственно, 87С52, 87С54, 87С58, и имеющие в своем составе массив программируемых таймеров - счетчиков, обеспечивающих функции типа ШИМ, ускоренного последовательного вывода и т.п.;

- 87C51GB, имеющий резидентное ЗУПД емкостью 256 байт и ЗУПП емкостью 8К байт, 8 аналоговых входов и 6 параллельных портов ввода/вывода.

Из ОМЭВМ семейства МК51, выпускаемых другими фирмами, особого внимания заслуживают:

- АТ89С51 фирмы Atmel, включающий электрически стираемое ЗУПП и имеющий повышенную нагрузочную способность портов, обеспечивающую прямую работу со светодиодами, а также его модификации:

- АТ89С52, аналогичные 87С52, но с электрически стираемым ЗУПП;

- АТ89С1051 и АТ89С2051, имеющих ЗУПД емкостью. соответственно, 1К и 2К байт, встроенный компаратор аналоговых сигналов, 15 программируемых линий ввода/вывода с повышенной нагрузочной способностью, и, соответственно, один и два таймера/счетчика.

Все изделия фирмы Atmel работают при питании от источника напряжения 2,7...6 Вольт и при изменении частоты задающего тактового генератора в диапазоне от 0 до 24 Мгц.

2.3. Архитектура ОМЭВМ 80С51. Архитектура рассматриваемого семейства ОМЭВМ МК51 не может быть отнесена ни к фон - Наймановскому, ни к Гарвардскому типам в классической интерпретации.

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

Использование одной шины для обращения к памяти данных и памяти программ является для ОМЭВМ 80С51 компромиссной мерой, позволяющей ценой снижения производительности упростить аппаратные средства при работе с внешней памятью и тем самым снизить стоимость МП системы, использующей внешнее ЗУ. При работе же только с внутренними ресурсами можно с известной уверенностью сказать, что ОМЭВМ семейства 80С51 совмещает в себе недостатки, присущие как Гарвардскому так и фон - Наймановскому типам архитектуры, что, впрочем, по-видимому, никак не влияет на популярность этого семейства среди разработчиков телекоммуникационных и др. средств и не препятствует его самому широкому распространению.

Структурная организация ОМЭВМ 80С51 иллюстрируется схемой рис. 2, в состав которой входят следующие функциональные узлы (даются ввиду частой встречаемости как в русской, так и в английской аббревиатуре):

ЦПУ - центральное процессорное устройство (англ. CPU - Сentral Processor Unit);

ПЗУ ПП - постоянное запоминающее устройство памяти программы (англ. ROM - Read Only Memory);

ОЗУ ПД - оперативное запоминающее устройство памяти данных (англ. RAM - Random Access Memory);

ГЕН - задающий генератор (англ. OSCillator);

ППП - программируемые параллельные порты (англ. PROGR.I/O - PROGRammable Input/Output ports);

Посл. П - последовательный порт (англ. SPORT - Serial PORT);

Т/С - таймеры/счетчики (англ. Timers/Counters);

РШ - расширитель шины для работы с внешними ЗУ емкостью до 64 Кбайт (англ. 64KBYTE BUS EXPansion).

Все узлы связаны между собой общей восьмиразрядной шиной, по которой осуществляется обмен информацией между ЦПУ и остальными устройствами.

ЦПУ представляет собой совокупность операционного ОУ и управляющего УУ устройств, выполняющих программу, записанную в ПЗУ ПП, емкость которого составляет 4Кбайт. ЦПУ обеспечивает выполнение следующих групп операций:

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

- логические операции (И, ИЛИ, Исключающее ИЛИ, инверсия);

- сдвиговые операции;

- операции пересылки;

- битовые операции;

- операции передачи управления.

Промежуточные результаты вычислений сохраняются в ОЗУ ПД емкостью 128 байт.

Скорость работы ЦПУ задается генератором ГЕН, вырабатывающим необходимые для работы временные последовательности. Тактовая частота ГЕН задается либо кварцевым резонатором, включаемым между выводами Х1 и Х2, либо внешним задающим генератором, подключаемым ко входу Х1. В целях обеспечения последовательного доступа к ресурсам процессора при использовании одной шины ГЕН формирует машинный цикл процессора из двенадцати тактов резонатора (задающего генератора) в соответствии с рис. 3.

Машинный цикл содержит 6 состояний управляющего автомата S1...S6, каждое состояние разбито на две фазы P1, P2, соответствующее различным действиям процессора. Так, на рис. 3. показаны в качестве примеров 2 действия: формирование сигнала ALE строба адреса внешней памяти и момент записи информации в ППП. Таким образом, если к выводам Х1 и Х2 ОМЭВМ подключается кварцевый резонатор с частотой собственных колебаний fт, длительность машинного цикла Тц будет составлять величину в 12 раз большую периода этой частоты

Тц = 12 / fт, что для предельно допустимого значения fт = 12 МГц составит Тц = 1мкС.

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

Параллельный обмен информации возможен через один из четырех поддерживаемых ОМЭВМ ППП.

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

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

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

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

Расширитель шины РШ используется для работы с внешним ЗУ - памяти программ или памяти данных. Как правило, внешнее ЗУ используется тогда, когда для размещения программы или данных при решении какой-то задачи внутренних ресурсов ОМЭВМ оказывается недостаточно; режим работы с внешним ЗУ не является типичным для ОМЭВМ.

Режим обращения к внешнему ЗУ, между тем, используется в ряде случаев не только по прямому назначению. Так, в последнее время наметилась тенденция оснащения специализированных микроЭВМ внешней шиной, совместимой по интерфейсу с ОМЭВМ 80С51 в режиме обмена с внешней памятью, что позволяет легко программировать режимы специализированных ОМЭВМ и управлять их работой по специальной программе непосредственно из 80С51.

Более подробно архитектура ОМЭВМ 80С51 представлена на рис. 4; это представление архитектуры будет использоваться далее при объяснении различных аспектов работы ОМЭВМ.

В отличие от рис. 2, на рис. 4 узел ЦПУ разделен на управляющее устройство УУ (англ. CU - Control Unit) и четыре блока, в совокупности представляющие собой операционное устройство: АЛУ (англ. ALU), регистры временного хранения операндов TR1 и TR2, и регистр признаков PSW (англ. Program Status Word).

Кроме того, из RAM выделены три регистра специальных функций: аккумулятор (А), регистр В и регистр указателя стека SP, а блок РШ представлен указателем данных DPTR (англ. Datа PoinTeR) с ассоциированными шинами обмена и счетчиком команд PC (англ. Program Counter), назначение которого заключается в формировании адреса команды.

Приведенная на рис. 4 архитектура призвана, в том числе, подчеркнуть два важных аспекта применения ОМЭВМ 80С51:

- при использовании внешнего ЗУ его адресация производится через выводы портов Р0 (младший байт) и Р2 (старший байт), а обмен информацией ( ввод кодов команд, ввод/вывод данных) - через выводы порта Р0, что, если не применять дополнительные аппаратные средства, приводит к потере этих портов для использования;

- таймеры/счетчики, последовательный порт и система прерываний не имеют своих выводов из корпуса ОМЭВМ, а используют выводы порта РЗ ( это называется альтернативными функциями выводов порта РЗ), и, таким образом, использование таймеров/счетчиков в режиме счетчиков внешних событий, линий последовательного порта и внешних прерываний соответствующим образом снижает разрядность порта РЗ.

Цоколевка корпуса ОМЭВМ 80С51 показана на рис. 5, а назначение выводов в таблице 1.

Минимальная схема включения ОМЭВМ 80С51 представлена на рис. 6. К выводам Х1 и Х2 ОМЭВМ подключена резонансная схема, включающая кварцевый резонатор. Ко входу сброса RST - схема автоматического рестарта ОМЭВМ при включении питания.

Таблица 1

Контрольные вопросы

01. Каковы особенности архитектуры микроконтроллеров МК51, отличающие ее от классических типов, и чем обусловлена необходимость выполнения команд за несколько машинных циклов?

02. Каково назначение регистра SP и в каких ситуациях необходимо учитывать его содержимое?

03. Каково назначение указателя DPTR и в каких случаях он используется?

04. Каково назначение расширителя шины и в каких случаях он используется?

05. Каково назначение регистра В и в каких случаях он используется?

06. Как соотносится частота задающего генератора МК51 и время выполнения одного машинного цикла и чем это обусловлено?

07. В чем заключается функциональное назначение параллельных портов МК51 и каковы их функциональные возможности?

08. В чем заключается функциональное назначение таймеров-счетчиков МК51 и каковы их функциональные возможности?

09. В чем заключается функциональное назначение последовательного порта МК51 и каковы его функциональные возможности?

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

2.4. Организация резидентного запоминающего устройства памяти данных. Организация резидентного ЗУПД микроконтроллеров семейства МК51 показана на рис. 7.

Резидентное ЗУПД ОМЭВМ 80С51 содержит два функционально разделенных блока - оперативное запоминающее устройство (ОЗУ), емкостью 128 байт, предназначенное для хранения данных, и блок регистров специальных функций (РСФ), содержащий ряд регистров, формирующих режимы работы некоторых узлов ОМЭВМ; назначение этих регистров будет рассмотрено далее.

ОЗУ ОМЭВМ 80С51 занимает адресное пространство 0...7FH (ВНИМАНИЕ!!! Здесь и далее символ Н в конце числа означает его представление в шестнадцатиричной системе счисления, символ В - в двоичной системе. Такая система обозначений принята в большинстве трансляторов языка АССЕМБЛЕР, ориентированных на процессоры фирмы INTEL.); отдельные ячейки этого ЗУ допускают как прямую (по номеру ячейки), так и косвенную адресацию. Регистры специальных функций формально адресуются в пространстве 80H....FFH, но допускают только прямую адресацию. В модификациях ОМЭВМ семейства МК51, имеющих ОЗУ данных емкостью 256 байт (например, 80С51FA), верхняя половина ОЗУ занимает адресное пространство 80H....FFH, формально совпадающее с адресным пространством РСФ, но на самом деле являющееся продолжением адресного пространства ОЗУ (на рис.7 показано пунктиром). Для того, чтобы при программировании отличать обращение к ячейкам верхней половины ОЗУ от обращения к РСФ, верхняя половина ОЗУ допускает только косвенную адресацию.

Пять групп ячеек памяти ОЗУ предоставляют некоторые дополнительные возможности адресации (см. рис. 7).

32 нижних байта ОЗУ образуют 4 банка регистров по 8 байт каждый. Один банк - любой - может быть установлен как текущий; это делается установкой соответствующей комбинации бит в регистре слова состояния (РSW биты 4 и 3 - RS1 и RS0 - см. далее). В пределах текущего банка регистры допускают более короткую, чем прямая и косвенная, регистровую адресацию; при этом обращение к ячейкам памяти осуществляется по имени регистров R0...R7.

Регистры R0 и R1 в каждом банке могут быть использованы как источники адреса при косвенной адресации.

Например, если в ячейку памяти с номером 9 требуется записать число 37, то при использовании прямой адресации такое действие выполняется командой

MOV 9, #37

где MOV - это код операции пересылки (от английского MOVе - двигать, перемещать)

- 9 - номер ячейки памяти, являющейся адресом назначения

- #37- число 37, причем символ # призван отличить число от номера ячейки памяти. В отличие от рассмотренной команды выполнение команды

MOV 9, 37

продублирует в ячейку памяти с адресом 9 содержимое ячейки памяти с адресом 37.

Указанная команда выполняется процессором за 2 машинных цикла.

Рассмотренное действие может быть выполнено вдвое быстрее, - за 1 машинный цикл, - при использовании регистровой адресации. Если текущим регистровым банком является банк 1, то ячейка памяти с адресом 9 будет соответствовать регистру R1 этого банка и запись числа 37 в эту ячейку может быть выполнен командой

MOV R1, #37

При использовании косвенной адресации адрес ячейки памяти должен быть записан в регистр R0 или R1 текущего банка, например командой

MOV R0, #9

а запись числа в эту ячейку осуществляется командой

MOV @R0, #37

выполнение которой займет 2 цикла. (Символ @ в команде является признаком косвенной адресации)

Использование косвенной адресации удобно, например, при циклических операциях, поскольку позволяет в значительной степени сэкономить объем ЗУПП.

Так, для того, чтобы записать число 37 в 20 ячеек памяти, расположенных подряд (например при записи начальных условий работы какого-то устройства), достаточно в регистр косвенного адреса записать начальный адрес

MOV R0, # n_adr

а в теле двадцатикратного цикла использовать только две команды:

MOV @R0, #37

INC R0

где INC - команда приращения содержимого регистра на единицу.

Область ОЗУ, занимающая 16 байт адресного пространства 20Н...2FH, является областью прямоадресуемых битов. Любой из 128 бит, содержащихся в этой области, может быть использован в битовых операциях. При операциях с битами допускается только прямая их адресация; косвенная адресация бит процессором не поддерживается.

Так, например, крайний правый (нулевой) бит ячейки памяти с адресом 35 может быть установлен в логическую единицу командой

SETB 23h.0

(число 23h соответствует числу 35 в десятичной системе счисления, через точку указан номер бита).

в состав блока РСФ входят:

- побитно адресуемые аккумулятор АСС (адрес 0Е0Н) и регистр В (адрес 0F0H);

- побитно адресуемые регистры портов ППП: Р0 (адрес 80Н), Р1 (адрес 90H), Р2 (адрес 0А0Н) и Р3 (адрес 0В0Н);

- побитно адресуемый регистр слова состояния PSW (адрес 0D0Н);

- побитно адресуемые регистры управления разрешением IE (адрес 0А8Н) и приоритетом IP (адрес 0В8H) прерываний;

- регистры таймеров/счетчиков TH1 (адрес 8DН), TH0 (8CH), TL1 (8BH), TL0 (8AH), регистр их режимов TMOD (89Н) и побитно адресуемый регистр управления их работой TCON (88Н);

- указатель данных DPTR, представленный парой регистров - старшим DPH (адрес 83Н) и младшим DPL (адрес 82H);

- указатель стека SP (адрес 81H);

- регистр обмена SBUF (адрес 99Н) и побитно адресуемый регистр управления SCON (адрес 98H) последовательного порта;

- регистр управления потреблением мощности PCON.

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

При обращении к РСФ по символическим именам следует иметь в виду одну особенность адресации аккумулятора.

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

Так, например, запись числа 18 в аккумулятор может быть осуществлена командой

MOV А, #18

а установка в единицу бита 7 - командой

SETB ACC.7

Контрольные вопросы

01. Какую организацию имеет резидентное ЗУПД микроконтроллеров МК51?

02. В чем заключается назначение регистровых банков, какое их количество одновременно активно и каким образом устанавливается активность регистрового банка?

03. Каким образом осуществляется прямая адресация ячеек ЗУПД, в каком адресном пространстве она допустима и как обращаться к ячейкам за этим пределом? В каких случаях целесообразно использование прямой адресации?

04. Каким образом и через какие ячейки памяти осуществляется косвенная адресация ячеек ЗУПД и какие ячейки допускают обращение по косвенному адресу? Поддерживает ли процессор косвенную адресацию битов? В каких случаях целесообразно использование косвенной адресации?

05. В чем заключается регистровая адресация ячеек памяти, какие ячейки ЗУПД доступны как регистры и в чем состоит достоинство регистровой адресации? В каких случаях целесообразно использование регистровой адресации?

06. Каким образом осуществляется адресация ячеек ЗУПД через регистр SP? В каких случаях факт и момент обращения к ячейкам определяются ходом выполнения программы (команд), а в каких - независимо от выполняемых в текущий момент команд?

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

08. Каково назначение области прямоадресуемых битов и как нумеруются и адресуются биты в пределах этой области?

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

00. Какие действия над состоянием отдельных битов поддерживает процессор МК51?

2.5. Система команд ОМЭВМ семейства МК51. Микроконтроллеры семейства МК51 поддерживают систему из 111 базовых команд, которые можно разбить на группы, рассматриваемые ниже. В дальнейшем изложении используются следующие обозначения:

Rn, n=0...7- регистр текущего регистрового банка;

Ri, i=0.1 - регистры R0 или R1 текущего регистрового банка, используемые при косвенной адресации;

#d - число длиной 1 байт (8бит);

#d16 - число длиной 2 байта ;

ad - прямой адрес в ОЗУ данных или адресном пространстве РСФ;

bit - адрес бита (в битовых операциях);

PC - счетчик команд;

(ad) - содержимое ячейки памяти с адресом (ad);

((Ri)) - содержимое ячейки памяти, адрес которой указан в Ri;

<-- стрелка указывает размещение результата операции.

При выполнении арифметических операций операнды и результаты операции представляются в стандартных для восьмиразрядных вычислительных систем форматах, причем младший разряд числа соответствует разряду D0, а старший - D7.

ГРУППА КОМАНД ПЕРЕДАЧИ ДАННЫХ.

ПЕРЕСЫЛКИ В ПРЕДЕЛАХ РЕЗИДЕНТНОГО ЗУПД осуществляются командой

MOV X,Y

где X - адрес назначения, по которому записывается число или операнд, указанный как Y. Содержимое ячейки памяти, указанной как операнд Y, при выполнении операции MOV не изменяется. Допустимые варианты пересылок в пределах резидентного ЗУПД показаны в виде графа на рис. 8.

Объем памяти в ЗУПП, занимаемый командами MOV, скорость их выполнения в машинных циклах, а также выполняемые функции приведены в таблице 2.

Таблица 2

ПЕРЕСЫЛКИ ЗА ПРЕДЕЛАМИ РЕЗИДЕНТНОГО ЗУПД осуществляются из ЗУПП командой MOVC (MOVe Code memory), а из / во внешнюю память данных - командой MOVX (MOVe eXternal memory).

Система поддерживаемых процессором команд вида MOVX и MOVC сведена в таблицу 3.

Таблица 3

КОМАНДЫ ОБМЕНА имеют мнемокод

XCH A, X

При выполнении этой команды содержимое аккумулятора меняется местом с содержимым ячейки памяти, указанный как операнд X. Допустимые виды команд обмена и их характеристики сведены в таблицу 4. Таблица 4

Помимо указанных команд, к группе команд передачи данных принято относить операции

PUSH ad - запись в стек и

POP ad - извлечение из стека.

Эти команды выполняются за 2 машинных цикла и занимают в памяти программ по 2 байта.

Как известно, стеком называется область ОЗУ с упрощенным доступом по адресу, автоматически формируемому указателем стека SP. Отличие работы стека ОМЭВМ семейства МК51 заключается в том, что при записи информации в стек сначала инкрементируется (увеличивается на единицу) содержимое SP, а потом по адресу, указанному его содержимым, записывается операнд, указанный в команде.

Извлечение операнда из стека производится в обратном порядке.

Такой порядок работы определяет целесообразность размещения стека в самой верхней части ОЗУ, причем адрес вершины стека, записываемый в начале программы в SP, может совпадать с адресом ячейки, используемой как обычное ОЗУ. Естественно, что размер стека должен учитывать не только объем информации, записываемой по командам PUSH, но и объем, записываемый адресами возврата при использовании прерываний и подпрограмм с учетом глубины их вложенности (каждый адрес возврата занимает 2 байта).

Следует иметь в виду, что после рестарта процессора в SP записывается число 7, и, если в программе используются прерывания, подпрограммы или команды РUSH, во избежание потери информации, записанной в регистры банка 1, следует переобъявить значение SP (положение вершины стека).

Группа команд арифметических операций включает в себя:

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 разрядов.

Рассмотрим в качестве примера решение задачи сложения трехбайтовых чисел. Пусть первое число размещено в трех ячейках памяти по адресам 30Н, 31Н, 32Н, причем, младший байт размещен в ячейке 30Н, а старший - в ячейке с адресом 32Н. Аналогично, второе число размещено в ячейках 38Н, 39Н и 3АН. Сумму двух чисел необходимо разместить по месту второго числа (см. рис. 9).

Как и при любом виде сложения, вычисление суммы следует начинать с младших разрядов с помощью команды ADD. Если полученный в результате такого сложения результат окажется меньше, чем максимально представимое в рамках байта число (255 при беззнаковом сложении или 127 при знаковом), то перенос из байта не возникнет и признак С=0.

Если же результат оказывается больше (например, если каждый из операндов больше половины максимального числа), то результат не может быть достоверно представлен в пределах байта; возникает перенос С=1, который следует учитывать далее при сложении более старших байтов. В общем виде при сложении старших байтов должна быть выполнена операция: X + Y + C при этом если С=0 (переноса младших байт не возникло), будет вычислена сумма вида X + Y а если перенос возникто он будет учтен по всем правилам арифметического сложения: X + Y + 1 Функция X + Y + C может быть выполнена с помощью команды ADDC, при этом фрагмент программы, реализующей функцию сложения двух трехбайтовых чисел будет иметь, например, следующий вид (задача оптимизации программы здесь не ставится):

MOV A, 30H

ADD A, 38H

MOV 38H,A

MOV A, 31H

ADDC A, 39H

MOV 39H,A

MOV A, 32H

ADDC A, 3AH

MOV 3AH, A

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

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

Таблица 5

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

Характерным для ОМЭВМ семейства МК51 является необязательность использования аккумулятора в логических командах ни в качестве одного из источников операндов, ни в качестве приемника результата операции. Таблица 6 дает обобщение поддерживаемых типов логических команд и их характеристики.

Таблица 6.

Группа команд операций с битами.

ОМЭВМ семейства МК51 поддерживают группу операций: сброс CLR, установку SETB, инверсию CPL, конъюнкцию ANL, дизъюнкцию ORL и пересылки MOV операндов, в качестве которых используются биты - отдельные разряды побитноадресуемых регистров РСФ или биты из области прямоадресуемых битов ОЗУ (см. рис. 7). Так, например, с помощью команды SETB P1.0 можно установить в состояние логической единицы сигнал на выводе 1 ОМЭВМ (см. рис. 5), а командой

MOV P2.5,C вывести значение признака переноса на вывод 26.

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

Основные характеристики и допустимые конструкции битовых операций сведены в таблицу 7.

Таблица 7

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

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

Различают 2 формата команды безусловных переходов и аналогичные им 2 формата команды вызова подпрограмм:

- LJMP <address> - безусловный переход и

- LCALL <address> - вызов подпрограммы в адресном пространстве 64К байт.

- АJMP <address> - безусловный переход и

- АCALL <address> - вызов подпрограммы в адресном пространстве 2К байт.

Команды AJMP и ACALL занимают по сравнению с LJMP и LCALL меньше места в ЗУПП - 2 байта вместо трех. Это обстоятельство в некоторых случаях может иметь весьма важное значение, поскольку любые условные переходы возможны только на расстояние + 127 байт в ЗУПП относительно кода команды условного перехода.

Условные переходы могут выполняться:

- по значению бита переноса С:

JC <address> - переходить на <address>, если С=1, а

JNC <address> - если С=0.

- по нулевому значению аккумулятора:

JZ <address> - переходить на <address>, если содержимое аккумулятора равно 0 и JNZ <address> - если не равно 0.

- по значению бита:

JB bit, <address> - переходить на <address>, если значение бита bit=1

JNB bit, <address> - переходить, если значение бита bit=0

JBC bit, <address> - переходить, если значение бита bit=1

и сброс значения этого бита в 0.

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

К командам условных переходов относят также

команду организации цикла

DJNZ X, <address>

и команды ожидания события

CJNE X, #d, <address>

CJNE A, ad, <address>

Команда DJNZ X,<address> вычитает единицу из содержимого операнда X, в качестве которого может быть указан регистр или прямоадресуемая ячейка памяти, сохраняя его новое значение, и сравнивает результат с нулем. Если результат не равен 0, то процессор переходит к выполнению команды, расположенной по адресу <address>, а если равен, то следующей за DJNZ команды. Команда DJNZ обычно используется для организации цикла. Так, например, фрагмент программы

позволяет организовать 36 проходов тела цикла.

Команда CJNE X, #d, <address> сравнивает значение операнда X, в качестве которого могут быть указаны аккумулятор, регистр или косвенно адресуемая ячейка памяти, и числа #d, и, если они не равны, процессор переходит к выполнению команды, расположенной по адресу <address>. Если же равны, то к выполнению следующей за CJNE команды. Действие команды CJNE A, ad, <address> аналогично. Так, например, команда

STP: CJNE А, P0, STP

останавливает выполнение программы до тех пор, пока на выводы порта Р0 не поступит комбинация логических сигналов, эквивалентная содержимому аккумулятора.

То обстоятельство, что условные переходы возможны только на сравнительно "короткие расстояния", часто вызывает неудобства при программировании, однако практически всегда эти неудобства могут быть обойдены. Например, если тело цикла занимает в ЗУПП более 127 байт, можно применить следующую конструкцию.

или в крайнем случае, если это по каким то причинам невозможно:

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

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

Возвращение из подпрограммы осуществляется по команде RET, размещенной в конце подпрограммы.

Команда RETI используется для возвращения процессора из подпрограммы прерываний; ее отличия от команды RET будут рассмотрены далее при описании процесса прерываний.

Возможные конструкции команд передачи управления и их длина приведены в таблице 8, где:

ad 16 - шестнадцатиразрядный адрес ( 64К байт );

ad 11 - одиннадцатиразрядный адрес ( 2К байт );

rel - восьмиразрядный адрес ( 127 байт );

Таблица 8

Команды операций сдвига

ОМЭВМ семейства МК51 поддерживают операции циклического сдвига аккумулятора:

- замкнутые - RR ( вправо) и RL ( влево )

- через бит С - RRC( вправо) и RLC ( влево )

Движение бит в разрядах аккумулятора при выполнении команд RLA и RLCA иллюстрируются рис. 10. В ЗУПП команды сдвиговых операций занимают 1 байт и выполняются за 1 машинный цикл.

Прочие команды. К прочим командам относятся:

- команда очистки аккумулятора CLR A, выполнение которой обращает в 0 содержимое аккумулятора;

- команда инверсии значения аккумулятора CPL А;

- холостая операция NOP;

- операция обмена тетрадами в аккумуляторе SWAP A;

- операция обмена младшими тетрадами содержимого аккумулятора и косвенно адресуемой ячейки памяти XCHD A,@Ri (младшая тетрада - четыре младших разряда байта ) Эти команды занимают в ЗУПП по одному байту и выполняются за один машинный цикл.

Формирование признаков.

В процессе выполнения операций формируются признаки:

C - перенос;

AC - частичный перенос (перенос между тетрадами);

Z - нулевое значение содержимого аккумулятора;

OV - переполнение;

P - четность.

Для хранения признаков используется регистр PSW, содержимое которого иллюстрируется рис. 11. В отличие от других признаков, ОМЭВМ семейства МК51 не сохраняют признака Z, поэтому он интерпретируется не как признак нулевого результата операции, а как признак нулевого значения содержимого аккумулятора.

На признак С оказывает влияние выполнение следующих команд: ADD, ADDC, SUBB, MUL, DIV, RLC, RRC, CJNE и битовые операции.

На признак OV оказывают влияние выполнение команд MUL и DIV.

Признак четности характеризует текущее состояние аккумулятора, дополняя до четного количество единиц в его содержимом. Формально занимая разряд D0 в регистре признаков PSW, он может быть передан в стек, однако не подлежит ни установке в единицу, ни сбросу в 0 без изменения содержимого аккумулятора. Наличие в PSW признака P дает возможность осуществить по его значению условные переходы с помощью команд:

JB P, <address>

JNB P, <address>

Признак AC в совокупности с командой DA A предназначены для выполнения экзотических программ, реализующих работу процессора в десятичной системе счисления; этот вид работы не является характерным для задач МСП и в данном пособии не рассматривается.

Разряд D5 в регистре признаков является пользовательским флагом F0 и может использоваться по усмотрению программиста; удобство этого флага заключается в том, что он сохраняется, например, в стеке, вместе с остальными необходимыми элементами PSW.

Контрольные вопросы

01. Какими командами можно определить знак произведения двух операндов?

02. Какие команды оказывают воздействие на признак четности?

03. Какими командами можно преобразовать положительное число в равное ему по модулю отрицательное?

04. Какими командами можно преобразовать отрицательное число в равное ему по модулю положительное?

05. Каким образом в программе МК51 можно осуществить условный переход по знаку операнда?

06. Каким образом в программе МК51 можно осуществить условный переход на адрес, отстоящий от команды перехода более чем на 2К байта?

07. Каким образом в программе МК51 можно осуществить сдвиг на 1 разряд вправо двухбайтового числа, размещенного в двух ячейках памяти?

08. Каким образом можно в программе МК51 организовать цикл на 256 проходов участка программы?

09. Каким образом можно установить в единичное значение выбранные биты ячейки памяти, сохранив значения остальных битов, не используя аккумулятора? То же, но в нулевое?

00. Каким образом можно проинвертировать значение выбранных битов ячейки памяти, сохранив значения остальных битов, не используя аккумулятора?

2.6. Параллельные порты ввода / вывода информации. Как было отмечено ранее, обмен информацией с внешними устройствами может быть осуществлен через четыре восьмиразрядных параллельных порта и один последовательный. Структура портов ОМЭВМ семейства МК51 имеет ряд особенностей по отношению к портам других процессоров.

Параллельные порты Р1...Р3 ОМЭВМ 80С51 имеют так называемую квазидвунаправленную структуру, функционирование которой иллюстрируется рис. 12.

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

Если же в триггер записывается логический 0, то единичный потенциал на выходе Q введет выходной транзистор в режим насыщения, обеспечивая замыкание на "землю" вывода порта и тем самым потенциал логического нуля на выходе. Для квазидвунаправленной структуры порта характерно, что в этом случае нельзя от внешних устройств подавать в порт сигнал логической единицы, поскольку насыщенное состояние выходного транзистора не позволит это сделать корректно. Кроме того, любые попытки ввода информации в процессор (через нижний по схеме буфер) с внешнего вывода порта будут приводить к вводу логического нуля до тех пор, пока выходной транзистор будет находиться в насыщенном состоянии. Таким образом, основное правило работы с портами, имеющими квазидвунаправленную структуру, заключается в следующем:

- при выводе через ППП из процессора информация устанавливается на соответствующих выводах микросхемы и сохраняет свое значение неизменным до следующего обращения к порту;

- если необходимо вводить информацию в процессор от внешних устройств, в соответствующие разряды порта до ввода необходимо записать единицы.

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

Важным удобством квазидвунаправленных портов является их способность работать с чисто пассивными датчиками типа контактов на замыкание или размыкание. Пассивный датчик включается между выводом порта и "землей" схемы;

Замкнутое состояние датчика воспринимается процессором как логический 0, а разомкнутое - как логическая 1, создаваемая на выводе самим портом от источника питания через схему ограничения выходного тока (см. рис. 12). Подключение пассивного датчика к квазидвунаправленному порту осуществляется по двум проводам и занимает только один вывод ОМЭВМ в отличие от традиционных двунаправленных портов, требующих, кроме того, дополнительных линий для сигналов сопровождения записи (WR) и / или чтения (RD).

Параллельный порт Р0 в целом аналогичен по структуре портам других процессоров фирмы INTEL: он имеет двунаправленную архитектуру, и обмен информацией по линиям порта с внешней памятью сопровождается стандартным набором сигналов чтения (RD), записи (WR) и строба адреса (ALE). Если режим обращения к внешней памяти не используется, работа порта Р0 происходит аналогично портам P1...P3, за исключением того, что запись единиц в разряды порта устанавливает соответствующие этим разрядам выводы ОМЭВМ в режим холостого хода (в отличие от портов Р1...Р3, на выводах которых в этом случае устанавливается потенциал высокого логического уровня).

При разработке цифровых устройств на основе микроконтроллеров семейства МК51 следует иметь в виду еще одну важную особенность работы параллельных портов.

При выполнении команд вида:

а также битовых операций

(где PX - один из регистров портов P0...P3, Y - операнд, Z - номер разряда, <address> - адрес условного перехода),

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

01. В чем заключается основное отличие квазидвунаправленной структуры выводов порта от двунаправленной?

02. В чем состоит отличие порта Р0 от других портов? Какие команды используют Р0 в двунаправленном режиме, а какие - в квазидвунаправленном?

03. В чем состоит отличие порта Р3 от других портов? Какое количество разрядов порта можно использовать для ввода/вывода информации, если в программе задействуются прерывание INT0, таймер-счетчик Т/С0 в режиме таймера, таймер-счетчик Т/С1 - в режиме счетчика внешних событий, а последовательный порт запрограммирован только на передачу в асинхронном режиме?

04. В чем состоит отличие порта Р2 от других портов? В каких случаях использования внешней памяти порт задействуется процессором (и не может без дополнительных аппаратных средств использоваться для ввода/вывода информации), а в каких нет?

05. В чем заключается главное достоинство квазидвунаправленной структуры выводов порта?

06. Какими командами осуществляется ввод/вывод информации через параллельные порты?

07. Каким образом можно использовать параллельные порты для поочередного вывода и ввода информации по всем восьми разрядам?

08. Каким образом можно разделить параллельный порт на ввод информации по 4-м старшим разрядам и на вывод - по 4-м младшим?

09. Каким образом можно программно проинвертировать текущее состояние выводов параллельного порта (порт используется на вывод информации)?

00. Каким образом можно программно установить на выводе старшего разряда параллельного порта напряжение высокого логического уровня, а на выводе младшего - низкого?

2.7. Система прерываний. Система прерываний ОМЭВМ 80С51 поддерживает прерывания от пяти источников:

INT0 - внешнее прерывание по состоянию / изменению состояния логического сигнала на входе INT0 ( вывод 12 ОМЭВМ);

INT1 - внешнее прерывание по состоянию / изменению состояния логического сигнала на входе INT1 ( вывод 13 ОМЭВМ);

T/C 0 - внутреннее прерывание по переполнению таймера / счетчика T/C 0;

T/C 1 - внутреннее прерывание по переполнению таймера / счетчика T/C 1;

S - внутреннее прерывание от последовательного порта.

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

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

Если обслуживание данного прерывания не запрещено и процессор не занят обслуживанием прерываний равного или более высокого приоритета, система прерываний внутренними аппаратными средствами сформирует вызов подпрограммы по адресу, фиксированному для данного прерывания и называемому вектором прерывания; при этом в стек будет автоматически записан адрес возврата, который в ОЗУ ПД займет 2 байта. В ПЗУ ПП по адресу вектора прерывания должна размещаться команда

AJMP ad_pp или LJMP ad_pp

где ad_pp - начальный адрес размещения подпрограммы обслуживания данного прерывания.

Подпрограмма обслуживания прерывания должна обеспечить сохранность всех необходимых данных, включая слово состояния PSW, если прерывающая программа использует те же регистры, что и прерываемая, поэтому обычно в начале прерывающей программы размещается фрагмент сохранения содержимого используемых регистров, например, в стеке с помощью команд PUSH, а в конце - их восстановление. Заканчиваться подпрограмма прерываний должна командой RETI, по которой из стека в  счетчик команд перегружается, аналогично команде RET, адрес возврата, и в дополнение к этому снимается блокировка прерываний и сбрасывается флаг прерывания, если он запоминается процессором (см. далее).

Для управления прерываниями используются соответствующие биты регистров приоритета IP и разрешения IE. Запрет всех прерываний осуществляется сбросом в 0 бита EA; если бит EA установлен в единицу (прерывания разрешены), то разрешено обслуживание только тех прерываний, биты разрешения которых (EX0 для прерываний INT0, EX1 для INT1, ET0 - для T/C 0, ET1 - для T/C 1 и ES - для последовательного порта) установлены в единицу. Биты EX0 и EX1 могут быть установлены / сброшены программой в любой момент; биты ES, ET0 и ET1 могут быть установлены в единичное значение только тогда, когда соответствующие им устройства полностью сконфигурированы программно.

Любому из источников прерываний может быть установлен высокий или низкий приоритет установкой / сбросом соответствующих бит в регистре IP ; при этом подпрограммы прерываний более высокого приоритета могут прерывать подпрограммы более низкого. Опрос флагов осуществляется в фазе S5P2 (см. рис. 3). Порядок опроса флагов прерываний при равенстве приоритетов следующий:

INT0, T/C0, INT1, T/C1, последовательный порт.

Изложенные положения сведены в таблицу 9.

Внешние прерывания INT0 и INT1 могут быть запрограммированы как уровневые (запрос на прерывание формируется, если уровень логического сигнала на входе равен 0) или как краевые (сигнал на входе переходит из состояния логической единицы в логический 0).

Прерывания INT0 (INT1) интерпретируются процессором как краевые, если бит IT0 (IT1) = TCON.0 (TCON.2) устанавливается программистом в единичное состояние; при этом поступающий запрос на прерывание запоминается и, если он поступает в момент времени, когда данное прерывание запрещено или не может быть обслужено, может быть обслужен позже, когда прерывание будет разрешено им возможно (и даже будет обслужен, если не принять мер по сбросу флага IE0 (IE1), если его обслуживание в этом случае не требуется). Установленный запрос на прерывание автоматически сбрасывается при его обслуживании, поэтому нет необходимости предпринимать аппаратные или программные средства защиты от повторного ложного обслуживания краевых прерываний.

Уровневый режим прерываний INT0 (INT1) устанавливается сбросом в логический 0 бита IT0 (IT1), при этом запрос не запоминается и пропадает, если приходит и снимается в то время, когда прерывания запрещены. При использовании уровневого режима прерываний микропроцессорная система должна оснащаться внешней схемой, обеспечивающей снятие запроса на прерывание при его обслуживании; в противном случае процессор будет циклически выполнять прерывающую программу до тех пор, пока запрос не будет снят. Это свойство уровневого режима, естественно, осложняет его применение, однако позволяет при использовании несложной внешней логики осуществить расширение входа прерывания для использования с многими внешними источниками.

Например, для расширения входа внешнего прерывания INT0 на 8 источников может быть использована схема рис. 13.

Если сигналы запросов прерываний от источников ИПр0...ИПр7 не перекрываются во времени ( при необходимости такое условие может быть обеспечено внешними цепями или, например, переносом регистра в каждую из схем запроса с использованием дополнительных линий сброса), то при поступлении запроса от любого из источников в момент перехода выходного сигнала из логической единицы в логический 0 на выходе схемы "И-НЕ" появится единичный сигнал, по фронту которого в триггер будет записана логическая единица со входа D, формирующая на выходе Q потенциал логического нуля, который будет восприниматься процессором как запрос на прерывание.

Как только процессор перейдет к выполнению подпрограммы обслуживания прерывания, он должен через вывод 17 (Р3.7) осуществить сброс в 0 триггера по входу R (подачей логической единицы), что обеспечит снятие запроса со входа INT0 процессора в соответствии с временными диаграммами рис. 13 и таким образом обеспечит однократное обслуживание прерывания.

Естественно, что в программу МП системы должны при этом быть включены фрагменты, реализующие управление схемой, например,

- в программе инициализации:

         - в прерывающей программе по адресу 3:

Прерывания от таймеров / счетчиков являются краевыми и не требуют программного сброса флага при обслуживании.

Последовательный порт формирует одинаковый запрос на прерывание при двух разных событиях: приеме очередного слова в буфер и при готовности буфера к передаче следующего слова. Параллельно запросу на прерывание формируются два флага "передатчик пуст" TI или "приемник полон " RI, которые могут быть использованы для идентификации события, связанного запросом на прерывание. Флаги запроса не сбрасываются автоматически при обслуживании прерывания и требуют программного сброса, поэтому наиболее целесообразной представляется идентификация события с помощью команды JBC, например, следующим образом:

Использование команд JBC позволяет идентифицировать событие (например, перейти к программе обслуживания приема сигналов в последовательный порт, если флаг приема RI установлен в 1), и одновременно осуществить программный сброс установленного флага.

Таблица 9.

Контрольные вопросы

01. Какие изменения в резидентном ЗУПД вызовет обслуживание процессором какого-либо прерывания?

02. Чем отличаются краевые прерывания от уровневых и каким образом можно запрограммировать INT0 как краевое прерывание, а INT1 - как уровневое?

03. С чем связана необходимость использования специальной команды RET I для возврата из подпрограммы обслуживания прерываний вместо обычной команды RET возврата из подпрограммы?

04. Что необходимо сделать в программе, чтобы разрешить прерывания по последовательному порту, а остальные запретить?

05. Какие из внутренних прерываний процессора МК51 являются уровневыми, а какие - краевыми?

06. Каким установится приоритет прерываний по команде MOV IP, #12H ?

07. Как установить наивысший приоритет для таймера Т/С0?

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

09. В каких случаях необходимо и каким образом целесообразно сохранять содержимое регистров R0..R7, A, PSW в подпрограммах обслуживания прерываний?

00. Каким образом можно построить систему, обслуживающую 4 внешних прерывания без использования дополнительных цепей (за счет использования Т/С0 и Т/С1)?

2.8. Таймеры / счетчики.

В архитектуру ОМЭВМ 80С51 включены два идентичных шестнадцатиразрядных таймера / счетчика Т/С0 и Т/С1, каждый из которых может быть использован либо в качестве таймера, либо в качестве счетчика внешних событий. При работе в качестве таймера содержимое Т/С инкрементируется в каждом машинном цикле, т.е. через каждые 12 периодов резонатора. При работе в качестве счетчика содержимое Т/С инкрементируется под воздействием перехода из 1 в 0 внешнего входного сигнала, подаваемого на соответствующий (Т0, Т1) вывод МК51. Опрос значения внешнего входного сигнала выполняется в момент времени S5P2 каждого машинного цикла. Содержимое счетчика будет увеличено на 1 в том случае, если в предыдущем цикле был считан входной сигнал высокого уровня (1), а в следующем - сигнал низкого уровня (0). Новое (инкрементированное) значение счетчика будет сформировано в момент S3P1 в цикле, следующего за тем, в котором был обнаружен переход из 1 в 0. Так как на распознавание перехода требуется два машинных цикла, то максимальная частота подсчета входных сигналов равна 1/24 частоты резонатора.

В состав каждого счетчика входят два восьмиразрядных РСФ: ТН (старший байт) и ТL (младший). Каждый счетчик может быть запрограммирован для работы в одном из четырех режимов. Для формирования режимов работы таймеров используется побитно недоступный регистр TMOD из РСФ, а для оперативного управления его работой - побитно адресуемый регистр TCON. Один из четырех режимов Т/С формируется двоичной комбинацией битов М1,М0:

В режимах 0 и 1 таймеры / счетчики конфигурируются в соответствии с рис. 14. Работа таймеров / счетчиков в режимах 0 и 1 идентична за исключением того, что в режиме 0 TL0 (TL1) работает в режиме пятиразрядного счетчика (в целях совместимости с предшествующим поколением микропроцессоров семейства MCS 48), а в режиме 1 - восьмиразрядного.

Для использования таймеров / счетчиков в качестве счетчиков внешних событий бит С/Т0 (С/Т1) = TMOD.2 (TMOD.6) должен быть установлен в единицу, при этом вход счетчика TL0 (TL1) подключается к внешнему выводу ОМЭВМ Т0 (Т1). Для использования в качестве таймеров этот бит должен быть сброшен в 0, при этом на вход TL0 (TL1) от задающего генератора подаются импульсы с периодом машинного цикла.

Работа таймера / счетчика может быть в любой момент остановлена программно сбросом бита TR0 = TCON.4 (TR1 = TCON.6). Если бит TR0 (TR1) установлен в единицу, а бит GT0 = TMOD.3 ( GT1 = TMOD.7) сброшен в 0, то таймер / счетчик работает непрерывно. Если же биты TR0 (TR1) и GT0 (GT1) установлены в единичное значение, то работа таймера / счетчика останавливается при подаче потенциала логического нуля на вход INT0 (INT1); таким образом может быть либо реализовано внешнее управление таймером / счетчиком событий, либо обеспечено торможение работы таймера на время воздействия внешних прерываний.

В режиме 2 таймеры / счетчики работают с автоперезагрузкой в соответствии с конфигурацией регистров TH и TL, показанной на рис. 15; конфигурация остальных цепей при этом идентична рис. 14. В этом режиме для счета используется только один восьмиразрядный регистр - счетчик TL0 (TL1), который в момент перехода из состояния FFH в состояние 00H загружается содержимым регистра TH0 (TH1). Режим 2 используется, как правило, для организации циклических процессов с фиксированным значением времени цикла. Так, например, если запрограммировать Т/С0 как таймер в режиме 2, например, последовательностью команд:

MOV TMOD, # 00000010В

SETB TR0 ;

занести в регистр ТН0 значение 131

MOV TH0, #131

MOV TL0, #131

и разрешить прерывания,

SETB ET0

SETB EA

то прерывающая подпрограмма, ассоциированная с прерыванием от таймера / счетчика Т/С0, при частоте задающего генератора 12 МГц будет выполнятся периодически с интервалом 125 микросекунд, т.к. период машинного цикла при fт = 12 МГц

Тц = 12 / fт = 1 мкс; а период повторения

Тповт = ( 256 - 131 ) * Тц = 125 мкс.

В режиме 3 реально работает только таймер / счетчик Т/С0; установка режима 3 таймера / счетчика Т/С1 приводит к его останову с сохранением содержимого TH1 и TL1.

При установке в режим 3 таймера / счетчика Т/С0 цепи обоих устройств принимают конфигурацию в соответствии с рис. 16. Таймер / счетчик Т/С0 разделяется на два устройства, лишая таймер/ счетчик Т/С1 цепи управления по TR1 и возможности формировать запрос на прерывание. TH0 и TL0 функционируют в этом режиме как два независимых восьмибитных устройства, одно из которых (TH0) может использоваться только в качестве таймера, а другое (TL0) - и в качестве таймера и в качестве счетчика внешних событий с управлением, аналогичным режимам 0, 1 и 2.

При установке Т/С0 в режим 3 таймер / счетчик Т/С1 может использоваться в любых приложениях, не требующих формирования запроса на прерывание. Одним из таких приложений является управление скоростью работы последовательного порта (см. далее). Т/С1 при установке Т/С0 в режим 3 может быть включен в любой из режимов 0, 1 или 2, однако потеря цепи управления по биту TR1 при этом лишает Т/С1 возможности гарантированного останова по этой цепи. Между тем для гарантированного останова Т/С1 может быть установлен в режим 3. Поскольку регистр TMOD, определяющий режимы работы таймеров / счетчиков побитно недоступен, останов Т/С1 может быть осуществлен по команде

ORL TMOD, #00110000B

Контрольные вопросы

01. Каким образом может быть запрограммирован таймер-счетчик Т/С0 на генерацию внутренних периодических прерываний с частотой 8 кГц, если частота задающего генератора равна 12 МГц?

02. Каким образом может быть запрограммирован таймер-счетчик Т/С1 на счет длительности положительного импульса, поступающего на вход INT1, с разрешающей способностью 1 мкс в диапазоне от 0 до 1 с?

03. Чем и в каком режиме различается работа таймеров-счетчиков Т/С0 и Т/С1?

04. Каким образом можно запретить влияние логического уровня сигнала на входе INT на работу таймера-счетчика?

05. Какой период прерываний будет обеспечивать таймер-счетчик Т/С0, запрограммированный для работы в режиме 0, если в программе не изменять содержимое регистров ТН0 и TL0 (частота задающего генератора равна 12 МГц)?

06. Какой период прерываний будет обеспечивать таймер-счетчик Т/С0, запрограммированный для работы в режиме 1, если в программе не изменять содержимое регистров ТН0 и TL0 (частота задающего генератора равна 12 МГц)?

07. Каким образом можно запрограммировать таймер-счетчик Т/С0, чтобы вход Т0 работал как вход внешнего краевого прерывания? Каким при этом будет адрес вектора прерывания?

08. Каким образом можно программно изменить режим работы таймера-счетчика Т/С0, сохранив прежним режим Т/С1?

09. Каким образом можно организовать периодические прерывания с заданным периодом при работе таймеров-счетчиков в режимах 0 и 1?

00. Запрос на обслуживание прерывания со стороны таймера-счетчика Т/С0 поступает в момент, когда выполняется защищенный от прерываний участок программы. Будет ли обслужен этот запрос после снятия запрета прерываний, и если да, то как этого избежать?

2.9. Последовательный порт. Последовательный порт ОМЭВМ семейства МК51 обеспечивает полный дуплексный режим обмена информацией, представленной последовательным кодом (младшими битами вперед). В состав последовательного порта входят регистры сдвига передачи и приема и буферный регистр SBUF приемопередатчика, входящий в состав РСФ. Для управления работой последовательного порта используется побитно адресуемый регистр РСФ SCON, а также бит SMOD в регистре PCON.

Последовательный порт может работать в одном из четырех режимов.

Режим 0 устанавливается комбинацией бит SM0 (TCON.7) = 0 и SM1 (TCON.6) = 0. В этом режиме и прием и передача информации осуществляются через вывод RxD (Р3.0); вывод TxD (Р3.1) является выходом, по которому из процессора выдаются сопровождающие импульсы (импульсы сдвига). При выводе информации из процессора (передаче) импульсы сдвига формируются процессором таким образом, что их спады (переходы из 1 в 0) соответствуют середине передаваемого символа и могут быть использованы для фиксации выводимых данных. При вводе информации в процессор (приеме) ее чтение с вывода RxD осуществляется в фазе S5P2 машинного цикла (см. рис. 3); импульсы сдвига устанавливаются в единицу в фазе S6P1, а в 0 - в фазе S3P1. Таким образом, при вводе информации в процессор через последовательный порт в режиме 0 должна быть обеспеченна ее синхронность относительно генерируемых процессором импульсов сдвига, причем смена вводимого символа может осуществляться как по фронту (переход из 1 в 0), так и по спаду импульсов сдвига. Скорость обмена в режиме 0 фиксирована и соответствует частоте следования машинных циклов ( если тактовая частота процессора составляет 12 МГц, то обмен информацией происходит со скоростью 1 бит / 1 мкс ). Единицей обмена является байт.

Передача из последовательного порта начинается автоматически при выполнении процессором любой команды, реализующей запись информации в регистр SBUF. После того, как содержимое SBUF будет передано последовательно на вывод RxD, автоматически устанавливается флаг TI (SCON.1) и формируется запрос на прерывание.

Прием информации в процессор через последовательный порт начинается при одновременном выполнении условий REN (SCON.4) = 1 и RI (SCON.0) = 0 (прошлое прерывание приема обслужено или сброшено). При выполнении этих условий последовательный порт вырабатывает на входе TxD восемь импульсов сдвига, заполняя сдвиговый регистр информацией с вывода RxD, после чего устанавливает флаг RI (RI=1) и формирует запрос на прерывание.

Режим 1 устанавливается комбинацией бит SM0=0, SM1=1. В этом и других оставшихся режимах работы последовательного порта осуществляется по стартстопному принципу; передача информации из процессора производится с вывода TxD, а прием информации в процессор - через вывод RxD.

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

Передача начинается (как и в режиме 0, при записи информации в SBUF), с нулевой стартовой посылки, поступающей из процессора на вывод TxD. Появление уровня логического нуля на входе RxD воспринимается портом как начало передачи байта и при выполнении условия (REN=1 и RI=0) инициирует начало приема стартовой посылки. Прием каждого символа осуществляется троекратным опросом с мажоритарным принципом принятия решения (принята единица, если хотя бы два принятых символа равны единице). Если стартовая посылка распознается правильно, принимаются еще 9 символов: восемь информационных посылок и стоповая посылка, записываемая процессором в бит RB8 (SCON.2), после чего устанавливается RI=1 и формируется запрос на прерывание.

Если же стартовая посылка не опознается (только один раз из трех принято нулевое значение), порт возвращается в исходное положение ожидания стартовой посылки.

В целях предотвращения ошибочного приема последовательным портом сообщений, формат которых не соответствует показанному на рис. 17, предусмотрен специальный режим защиты от ошибок формата, устанавливаемый программно битом SM2 (SCON.5). Если установить этот бит в единицу (например, командой SETB SM2), то последовательный порт будет анализировать сигнал на позиции стоповой посылки, и, если этот сигнал будет принят как 0 (отсутствие стоповой посылки), не установит бит RI и не сформирует запрос на прерывание, игнорируя принятую информацию.

Скорость передачи в режиме 1 определяется частотой переполнения таймера / счетчика T/C1, который может при этом работать как таймер или как счетчик внешних событий в любом из режимов 0,1 или 2, что позволяет варьировать скорость передачи в широких пределах. В общем виде скорость передачи может быть описана выражением:

fn=(2smod/32) * f ovt1;

где f ovt1- частота переполнения таймера/счетчика T/C1;

SMOD - значение бита PCON.7.

Прерывания от таймера/счетчика T/C1 в этом режиме должны быть заблокированы.

Режим 2 устанавливается комбинацией бит SM0=1, SM1=0. Формат передаваемого слова в режиме 2 показан на рис. 18, где TB8=SCON.3 - программно устанавливаемый бит в РСФ SCON.

Действия последовательного порта в режиме 2 в основном аналогичны действиям в режиме 1. Скорость передачи в режиме 2 фиксирована и составляет значение:

fn=2smod/64f рез;

где f рез- тактовая частота задающего генератора.

Передача дополнительного символа ТВ8, принимаемого на противоположной стороне портом в триггер RB8, предоставляет дополнительные возможности последовательного обмена. Например, при обмене по линии с ощутимым уровнем помех символ ТВ8 может быть использован как символ четности для проверки наличия ошибок приема. Кроме того, этот символ обычно используют при построении систем с кодово - адресным принципом опроса объектов, подключаемых к управляющему контроллеру по одной цепи, например, при подключении к последовательному порту компьютера нескольких микропроцессорных систем.

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

Режим 3 устанавливается комбинацией бит SM0=1, SM1=1. В режиме 3 работа последовательного порта аналогична работе в режиме 2, а скорость передачи - аналогична скорости в режиме 1.

Контрольные вопросы

01. Каким образом можно запрограммировать последовательный порт для работы в режиме 0 и какая скорость передачи информации (в байтах/с) при этом будет обеспечена, если частота задающего генератора равна 12 МГц?

02. Каким образом можно запрограммировать последовательный порт для работы в режиме 1 и какая скорость передачи информации (в байтах/с) при этом будет обеспечена, если частота задающего генератора равна 12 МГц?

03. Каким образом можно запрограммировать последовательный порт для работы в режиме 2 и какая скорость передачи информации (в байтах/с) при этом будет обеспечена, если частота задающего генератора равна 12 МГц?

04. Каким образом можно запрограммировать последовательный порт для работы в режиме 3 и какая скорость передачи информации (в байтах/с) при этом будет обеспечена, если частота задающего генератора равна 12 МГц?

05. В каких целях может быть использован дополнительный бит передачи ТВ8 ?

06. Каким образом в МК51 осуществляется управление разрешением/запрещением приема информации в последовательный порт?

07. Какой должна быть последовательность действий в подпрограмме обработки прерываний по запросу последовательного порта?

08. Каким образом активизируется начало передачи по последовательному порту?

09. С чем связана необходимость программного сброса битов TI и RI и какими командами этот сброс осуществляется?

00. Каким образом можно запрограммировать последовательный порт на генерацию на выводе TxD непрерывного сигнала прямоугольной формы со скважностью 2?

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

При составлении программы разработчик обычно пользуется языком более высокого уровня, чем язык машинных команд (обычно используются язык ассемблера данного процессора или более универсальный язык С); при этом текст программы переводится в требуемую для ЗУПП совокупность двоичных символов с помощью ЭВМ с использованием специальных программ, получивших название трансляторов. Программа - транслятор, базирующаяся на мнемокодах системы команд какого-то конкретного процессора (например, на мнемокодах, рассмотренных в п. 2.5.), обычно называется ассемблером данного процессора.

Отладку программного обеспечения удобно вести по отдельным частям, выполняющим какие-то конкретные законченные функции; такие части называются сегментами. Различают сегменты абсолютные и перемещаемые .

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

Если же сегмент не содержит команд, требующих привязки к конкретным адресам, он обычно оформляется как перемещаемый, характеризуемый только начальным адресом размещения в ЗУПП и требующий только указания этого адреса.

Трансляция отдельных сегментов может осуществляться независимо от других, также как и дальнейшая отладка; в результате трансляции сегмента формируется его так называемый объектный модуль. Компоновка общей программы МП системы из отдельных сегментов обычно осуществляется на уровне их объектных модулей. Процесс компоновки называется редакцией связей и осуществляется на ЭВМ с помощью специальных программ, называемых редакторами связей или линковщиками. В отладочном программном обеспечении ряда фирм программа - линковщик объединяется с программой - ассемблером; в этом случае используется компоновка на уровне исходных текстов.

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

Программа записывается в виде последовательности операторов. Каждый оператор занимает одну строку программы. В тексте программы допускается использование следующих символов:

- строчных и прописных букв латинского алфавита;

- цифр 0...9;

- специальных знаков "#", "@", ";", ",";

- знаков математических действий.

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