Доступ к внешней памяти программ
Доступ к ВПП возможен в двух случаях:
1. если сигнал (External Access) низкий, что соответствует отключению РПП или
2. если сигнал высокий, а счетчик команд (PC) содержит адрес больший, чем 0FFFH (4К).
При выборке команд из ВПП всегда используется 16-битный адрес. В этом случае старший байт адреса выводится в порт P2 и удерживается в течение полного цикла чтения команды. Младший байт адреса выводится через порт P0 и должен быть на время операции чтения команды записан во внешнем регистре, поскольку байт команды считывается через порт P0. При наличии ВПП программа не должна производить запись информации в порт P0.
Диаграмма сигналов при доступе к внешней памяти программ (рисунок 4.7) привязана к тактовым сигналам синхронизации. Для фиксации младшего байта адреса во внешнем регистре необходимо использовать отрицательный перепад сигнала ALE (Address Latch Enable). Сигнал ALE дважды в каждом машинном цикле принимает значение 1, даже если в цикле нет обращения к ВПП. Фиксация байта команды КОП, поступающего из ВПП через порт P0, происходит по положительному фронту сигнала .
Рисунок 4.7 - Цикл доступа к внешней памяти программ
Доступ к внешней памяти данных
Доступ к внешней памяти данных возможен как с использованием 16-битового адреса, так и 8-битового адреса. При 16-битовом адресе порты P0 и P2 используются аналогично обращению к ВПП. При использовании 8-битового адреса содержимое порта P2 в цикле обращения к внешней памяти не изменяется. Обращение к ВПД возможно при отсутствии сигнала ALE. Поэтому первый сигнал ALE во втором машинном цикле команды обращения к ВПД подавляется. В цикле чтения ВПД (рисунок 4.8) формируется сигнал , связанный с альтернативной функцией вывода P3.7.
Через порт P0 по срезу сигнала ALE передается 8-битовый адрес (команда типа MOVX @Ri) или младший байт DPTR (команда типа MOVX @DPTR). Фиксация данных портом P0 происходит до завершения сигнала .
Рисунок 4.8 - Цикл чтения внешней памяти данных
Для записи данных в ВПД (рисунок 4.9) используется сигнал .
Рисунок 4.9 - Цикл записи во внешнюю память данных
Совмещение адресов ВПП и ВПД
Часто при разработке и отладке МП систем требуется объединить адресное пространство программ и данных. Это можно сделать аппаратно, объединив с помощью логического элемента «И» сигналы чтения памяти данных и сигнала чтения памяти программ
(рисунок 4.10).
Рисунок 4.10 - Схема совмещения адресного пространства ВПП и ВПД
В этом случае внешняя память может быть выполнена в виде двухпортового ОЗУ, запись и чтение которого можно выполнять как из МК, так и из внешнего устройства. Запись программы также можно выполнять средствами МК как массив данных. Чаще всего такой режим используется при отладке МП системы с последующим разделением адресов программ и данных.
Таймеры/счетчики
В МК51 имеются два независимых 16-разрядных таймера/счетчика (Т/С0 и Т/С1). Каждый из них может работать в режиме таймера или счетчика внешних событий. В режиме таймера содержимое Т/С увеличивается на единицу (инкрементируется) в каждом машинном цикле, т.е. через каждые 12 периодов резонатора.
В режиме счета внешних событий счетчик Т/С инкрементируется по каждому отрицательному переходу (из «1» в «0») на соответствующем входе Т0 или Т1(альтернативные функции разрядов Р3.4 и Р3.5 порта Р3). На распознавание перехода требуется два машинных цикла, поэтому максимальная частота счета внешних событий равна FOSC/24. На длительность сигнала ограничений нет, но для гарантированного срабатывания счетчика необходимо обеспечить значение «1» в течение как минимум одного машинного цикла МК51.
Для задания режимов работы обоих таймеров/счетчиков имеется специальный регистр TMOD (таблица 4.4). Старшие четыре бита регистра управляют режимами С/Т1, а младшие - С/Т0. Битами М0 и М1 выбирается режим работы соответствующего таймера/счетчика, бит отвечает за выбор таймера или счетчика.
Каждый таймер может независимо друг от друга работать в одном из 4 режимов.
Таблица 4.4 - Регистр управления режимами таймера/счетчика
Режим 0. В этом режиме оба таймера работают как 13-битовые делители, причем старший регистр TH0 (TH1) имеет 8 бит, а младший TL0 (TL1) - 5 младших бит. Старшие 3 бита регистра TLx не определены и игнорируются. Перед началом работы таймера/счетчика в регистры THх и TLх можно записать некоторое предварительное значение, с которого начнет увеличивать свое значение таймер.
Когда содержимое таймера/счетчика перейдет из состояния «все единицы» в состояние «все нули», устанавливается флаг прерывания TF0 (TF1). Если разрешена реакция на прерывание от данного таймера, МК51 вызывает подпрограмму обслуживания прерывания соответствующего таймера. Если реакция на прерывание запрещена, МК может программно опросить состояние флага прерывания и зафиксировать момент переполнения таймера.
Счет таймеру разрешается при установке бита TR0 (TR1) и запрещается при его сбросе, при условии, что соответствующий бит GATEx (TMOD.3 или TMOD.7) задан равным «0». Этот метод управления запуском/остановом таймера/счетчика можно назвать программным запуском и остановом.
При задании бита GATE0 (GATE1) равным «1» разрешение счета для таймера/счетчика определяется при значении «1» бита TR0 (TR1) и высокого уровня на входе (
). Такой метод управления запуском/остановом можно назвать аппаратным запуском и остановом. Если на вход
(
) подавать импульсный сигнал, то можно по значению таймера измерить длительность вершины импульса, определяемое количеством тактов, изменяющих значение таймера.
Биты управления TR0 (TR1) и TF0 (TF1) находятся в регистре управления/статуса таймера TCON (таблица 4.5). Кроме этого, в регистре имеются биты, связанные с внешними прерываниями.
Таблица 4.5 - Регистр управления/статуса таймера
Схема функционирования таймера/счетчика в режиме 0 (на примере Т/С1, рисунок 4.11) показывает, как воздействуют биты управления на работу таймера.
Рисунок 4.11 - Таймер/счетчик в режиме 0
Режим 1. Этот режим отличается от режима 0 только тем, что оба таймера имеют 16-битовую разрядность (рисунок 4.12).
Рисунок 4.12 - Таймер/счетчик в режиме 1
Режим 2. В этом режиме таймер имеет размерность 8 бит и использует для счета младший байт TL0 (TL1). В старший байт таймера TH0 (TH1) программно заносится коэффициент. При переполнении младшего счетчика не только устанавливается флаг TF0 (TF1), но и содержимое TH0 (TH1) перегружается в TL0 (TL1) (рисунок 4.13). Перезагрузка не изменяет содержимого TH0 (TH1).
Рисунок 4.13 - Таймер/счетчик в режиме 2
Этот режим, за счет программно задаваемого коэффициента деления таймера, очень удобен при управлении повторяющимися процессами, например, в программно перестраиваемом генераторе.
Оба таймера в этом режиме работают аналогично.
Режим 3. В этом режиме Т/С1 просто хранит свое значение. Т/С0 представляет собой два раздельных 8-битных счетчика (TH0 и TL0). Регистр TL0 управляется битами управления для таймера 0: GATE0, , TR0, TF0. Регистр TH0 работает только в режиме таймера и использует биты таймера 1: TR1, TF1 (рисунок 4.14).
Рисунок 4.14 - Таймер/счетчик 0 в режиме 3
Режим 3 применяется в тех приложениях, где требуется дополнительный 8-битный таймер или счетчик событий. Когда таймер 0 работает в режиме 3, таймер 1 может быть разрешен, запрещен, переведен в свой собственный режим 3, использован последовательным портом для управления скоростью передачи или в любых других приложениях, не требующих прерывания.
Последовательный порт
Последовательный порт в МК51 - это универсальный асинхронный приемопередатчик (УАПП или UART (Universal Asynchron Receiver Transmitter)), через который выполняется прием и передача информации, представленной последовательным кодом. УАПП является полным дуплексным портом, что означает возможность осуществлять передачу и прием одновременно. В состав УАПП входят сдвигающие регистры приема и передачи и буферный регистр приемника/передатчика SBUF. На самом деле регистр SBUF состоит из двух раздельных регистров: буферного регистра приемника и буферного регистра передатчика.
Буферный регистр приемника организован таким образом, что прием нового байта можно начинать до считывания программой предыдущего принятого байта. Если же к моменту окончания приема текущего байта предыдущий байт не будет считан, он будет потерян.
Передача последовательного кода младшими разрядами вперед начинается из сдвигающего регистра передатчика сразу после записи байта в буферный регистр передатчика SBUF.
Для управления режимами и контроля состояниями используется регистр SCON (таблица 4.6).
Таблица 4.6 - Регистр управления SCON
Этот регистр содержит биты выборки режима (SM0 и SM1), бит SM2, предназначенный для мультипроцессорных режимов, бит разрешения приема (REN), 9-й бит данных для 9-битных режимов передачи и приема (TB8 и TR8) и биты прерывания последовательного порта (TI и RI).
Режимы работы УАПП
Последовательный порт может работать в 4 режимах.
Режим 0. В этом режиме информация по 8 бит передается и принимается через внешний вывод входа приемника (RXD, порт Р3.0). Через внешний вывод передатчика (TXD, порт P3.1) выдаются импульсы сдвига с фиксированной частотой FOSC/12, которые синхронизируют каждый бит данных.
Передача начинается сразу после записи байта в SBUF. Прием начинается при условии (RI=0 ( REN=1).
Режим 1. В этом режиме через TXD передаются и через RXD принимаются 10 бит: нулевой старт-бит, 8 бит данных, представленных младшими битами вперед и единичный стоп-бит (рисунок 4.15).
Рисунок 4.15 - Кадр данных в режиме 1
Скорость передачи в этом режиме переменная. Для ее задания можно использовать таймер Т/С1. Прием данных начинается с приходом старт-бита при условии, что бит REN=1 (SCON.4).
Режим 2. В этом режиме через TXD передаются или через RXD принимаются 11 бит: нулевой старт-бит, 8 бит данных, программируемый 9-тый бит и единичный стоп-бит (рисунок 4.16).
Рисунок 4.16 - Кадр данных в режиме 2
При передаче 9-тый бит данных считывается из бита TB8 (SCON.3), который можно изменять программно, например, копируя в него бит четности Р (PSW.0). При приеме 9-тый принятый бит записывается в бит RB8 (SCON.2) с возможностью его дальнейшего программного анализа.
Скорость передачи фиксирована и выбирается из двух возможных вариантов: FOSC/32 или FOSC/64.
Режим 3. Режим соответствует режиму 2, но имеет переменную скорость передачи, определяемую частотой переполнения таймера/счетчика 1.
Скорость передачи
Сводка режимов (таблица 4.7) позволяет выбрать режим передачи с учетом требуемой скорости обмена информацией.
Таблица 4.7 - Скорость передачи в УАПП
Режим УАПП | Скорость передачи |
![]() | |
![]() | |
![]() | |
![]() | |
1 или 3. Т/С1 в режиме с перезагрузкой | ![]() |
Стандартные скорости передачи (таблица 4.8) получаются с использованием таймера 1. В этом случае необходимо запретить прерывание TF1 (TCON.7). Таймер может работать либо как таймер, либо как счетчик событий в любом из трех режимов. В большинстве применений он используется как таймер в режиме 2 с автоперезагрузкой.
Таблица 4.8 - Типовые скорости передачи, генерируемые таймером 1
Скорость передачи в режимах 1, 2 или 3 дополнительно зависит от значения бита SMOD, расположенного в регистре управления энергопотреблением PCON (таблица 4.9). Кроме этого, в регистре имеются два бита, определяемые пользователем GF0 и GF1, бит пониженного энергопотребления PD и бит холостого хода IDL.
Таблица 4.9 - Регистр PCON