АЛЬТЕРНАТИВНЫЕ ФУНКЦИИ ПОРТОВ P0, P2 и P3 МК 80С51
Обозначение | Разряд | Наименование и назначение |
A0/D0 | P0.0 | Разряд 0 шины адреса/данных. |
A1/D1 | P0.1 | Разряд 1 шины адреса/данных |
A2/D2 | P0.2 | Разряд 2 шины адреса/данных |
A3/D3 | P0.3 | Разряд 3 шины адреса/данных |
A4/D4 | P0.4 | Разряд 4 шины адреса/данных. |
A5/D5 | P0.5 | Разряд 5 шины адреса/данных. |
A6/D6 | P0.6 | Разряд 6 шины адреса/данных. |
A7/D7 | P0.7 | Разряд 7 шины адреса/данных. |
A8 | P2.0 | Разряд 8 шины адреса |
A9 | P2.1 | Разряд 9 шины адреса |
A10 | P2.2 | Разряд 10 шины адреса |
A11 | P2.3 | Разряд 11 шины адреса |
A12 | P2.4 | Разряд 12 шины адреса |
A13 | P2.5 | Разряд 13 шины адреса |
A14 | P2.6 | Разряд 14 шины адреса |
A15 | P2.7 | Разряд 15 шины адреса |
RXD | P3.0 | Вход приемника последовательного порта в режиме UART. Ввод/вывод данных в синхронном режиме |
TXD | P3.1 | Выход передатчика последовательного порта в режиме UART. Выход синхронизации в синхронном режиме |
INT0’ | P3.2 | Вход запроса прерывания 0. Активным является сигнал низкого уровня (логический 0) или перепад 1 ® 0 |
INT1’ | P3.3 | Вход запроса прерывания 1. Активным является сигнал низкого уровня (логический 0) или перепад 1 ® 0 |
T0 | P3.4 | Вход таймера/счетчика 0 |
T1 | P3.5 | Вход таймера/счетчика 1 |
WR’ | P3.6 | Выход “ЗАПИСЬ”. Активный сигнал низкого уровня формируется при обращении к внешней памяти данных |
RD’ | P3.7 | Выход “ЧТЕНИЕ”. Активный сигнал низкого уровня формируется при обращении к внешней памяти данных |
В режиме таймера (т.е. счетчика времени) содержимое счетчика инкрементируется в каждом машинном цикле. В режиме счета внешних событий содержимое счетчика инкрементируется под воздействием перехода из 1 в 0 внешнего логического сигнала, поступающего на соответствующий вход микроконтроллера.
2.11.2. При работе таймера/счетчика в режиме счетчика внешних событий максимальная частота входных импульсов не должна превышать 1/24 тактовой частоты микроконтроллера, поскольку для распознавания перехода внешнего сигнала из 1 в 0 требуется два машинных цикла. Для того, чтобы обеспечить надежное считывание значения внешнего входного сигнала, сигнал не должен изменяться в течение одного полного машинного цикла. Длительность периода входного сигнала сверху не ограничена.
2.11.3. Для управления работой таймеров/счетчиков и организации взаимодействия таймеров/счетчиков с системой прерываний используются два регистра специальных функций – регистр управления режимом TMOD (Timer/Counter Mode Control Register) и регистр управления TCON (Timer/Counter Control Register), форматы которых приведены в табл. 2.7 и табл. 2.8, соответственно.
2.11.4. Выбор функционального назначения таймера/счетчика (“таймер” или “счетчик внешних событий”) осуществляется программированием бита C/T’ регистра TMOD (см. табл. 2.7).
2.11.5. Каждый таймер/счетчик (в дальнейшем таймер) имеет четыре режима работы, индивидуально программируемых с помощью битов M0 и M1 регистра TMOD (см. табл. 2.7). Выбранный режим определяет не только алгоритм работы таймера, но также и его внутреннюю структуру (рис. 2.11). Режимы 0, 1 и 2 одинаковы для обоих таймеров. В режиме 3 таймеры работают по-разному. Ниже рассмотрены все режимы работы таймеров на примере таймера 0.
2.11.6. В режиме 0 таймер 0 представляет собой программно управляемый
13-разрядный двоичный счетчик импульсов, состоящий из 8-разрядного счетчика TH0, вход которого подключен к выходу 5-разрядного делителя частоты TL0 (рис. 2.11, А). При переполнении счетчика (когда счетчик переходит из состояния “все единицы” в состояние “все нули”) таймер устанавливает флаг TF0 (см. табл. 2.8).
Таблица 2.7
РЕГИСТР УПРАВЛЕНИЯ РЕЖИМОМ ТАЙМЕРА/СЧЕТЧИКА
Обозначение | Разряд | Наименование и назначение |
M0 | TMOD.0 | Режим работы таймера/счетчика 0: |
M1 | TMOD.1 | M1=0, M0=0 – 13-разрядный таймер/счетчик (TL0 - 5 бит, TH0 - 8 бит); M1=0, M0=1 – 16-разрядный таймер/счетчик (TL0 - 8 бит, TH0 - 8 бит); M1=1, M0=0 – 8-разрядный таймер/счетчик TL0 с авто- перезагрузкой. При переполнении TL0 в TL0 загружается содержимое TH0; M1=1, M0=1 – TL0 – 8-разрядный таймер/счетчик, TH0 – 8-разрядный таймер, управляемый сигналом TR1 и устанавливающий флаг переполнения TF1. |
C/T’ | TMOD.2 | Выбор режима таймера/счетчика 0: C/T’=1 – режим счетчика внешних событий. Содержимое счетчика инкрементируется при перепаде 1 ® 0 на входе T0 (в следующем машинном цикле), C/T’=0 – режим таймера. Инкрементируется в каждом машинном цикле. |
GATE | TMOD.3 | Управление блокировкой таймера/счетчика 0. Если бит установлен, то сигнал на вход таймера/счетчика 0 поступает только при условии INT0’=1 |
M0 | TMOD.4 | Режим работы таймера/счетчика 1: |
M1 | TMOD.5 | M1=0, M0=0 – 13-разрядный таймер/счетчик (TL1 - 5 бит, TH1 - 8 бит); M1=0, M0=1 – 16-разрядный таймер/счетчик (TL1 - 8 бит, TH1 - 8 бит); M1=1, M0=0 – 8-разрядный таймер/счетчик TL1 с авто- перезагрузкой. При переполнении TL1 в TL1 загружается содержимое TH1; M1=1, M0=1 – останов таймера/счетчика 1. |
C/T’ | TMOD.6 | Выбор режима таймера/счетчика 1: C/T’=1 – режим счетчика внешних событий. Содержимое счетчика инкрементируется при перепаде 1 ® 0 на входе T1 (в следующем машинном цикле), C/T’=0 – режим таймера. Инкрементируется в каждом машинном цикле. |
GATE | TMOD.7 | Управление блокировкой таймера/счетчика 1. Если бит установлен, то сигнал на вход таймера/счетчика 1 поступает только при условии INT1’=1 |
Таблица 2.8
РЕГИСТР УПРАВЛЕНИЯ ТАЙМЕРА/СЧЕТЧИКА
Обознач. | Разряд | Наименование и назначение |
IT0 | TCON.0 | Бит управления типом внешнего прерывания 0: IT0=1 - активным сигналом на входе INT0’ является перепад 1 ® 0; IT0=0 - активным сигналом на входе INT0’ является 0. |
IE0 | TCON.1 | Флаг фронта внешнего прерывания 0. Устанавливается по перепаду 1 ® 0 на входе INT0’. Сбрасывается аппаратно при обслуживании прерывания. |
IT1 | TCON.2 | Бит управления типом внешнего прерывания 1: IT0=1 - активным сигналом на входе INT1’ является перепад 1 ® 0; IT0=0 - активным сигналом на входе INT1’ является 0. |
IE1 | TCON.3 | Флаг фронта внешнего прерывания 1. Устанавливается по перепаду 1 ® 0 на входе INT1’. Сбрасывается аппаратно при обслуживании прерывания. |
TR0 | TCON.4 | Бит управления таймером 0. Устанавливается/сбрасывается программно для пуска/останова таймера/счетчика 0. |
TF0 | TCON.5 | Флаг переполнения таймера 0. Устанавливается аппаратно при переполнении таймера 0. Сбрасывается аппаратно при обслуживании прерывания. |
TR1 | TCON.6 | Бит управления таймером 1. Устанавливается/сбрасывается программно для пуска/останова таймера/счетчика 1. |
TF1 | TCON.7 | Флаг переполнения таймера 1. Устанавливается аппаратно при переполнении таймера 1. Сбрасывается аппаратно при обслуживании прерывания. |
Рис. 2.11. Таймер-счетчик 0 в разных режимах работы:
А. Режим 0: 13-разрядный счетчик,
В. Режим 2: 8-разрядный счетчик с автоперезагрузкой,
С: Режим 3: два 8-разрядных счетчика
Счетные импульсы поступают на вход счетчика TL0, когда TR0=1 и либо GATE=0, либо INT0’=1, где TR0 – управляющий бит регистра TCON (см. табл. 2.8), GATE – бит 3 регистра TMOD (см. табл. 2.7), а INT0’ – внешний сигнал запроса прерывания.
2.11.7. Режим 1 отличается от режима 0 (см. рис. 2.11, А) только тем, что счетчик TL0 имеет разрядность 8 бит, а весь таймер, в структуру которого входят два последовательно включенных счетчика TL0 и TH0, имеет разрядность 16 бит.
2.11.8. В режиме 2 таймер 0 представляет собой 8-разрядный счетчик с автоперезагрузкой (см. рис. 2.11, В). При переполнении счетчика TL0 не только устанавливается флаг TF0, но и автоматически загружается в TL0 содержимое счетчика TH0. После перезагрузки содержимое счетчика TH0 остается прежним. Начальная установка счетчика TH0 выполняется программным путем.
2.11.9. В режиме 3 таймеры 0 и 1 работают по-разному.
Содержимое таймера 1 в режиме 3 сохраняется неизменным (эффект такой же, как при TR1=0).
Счетчики TL0 и TH0 таймера 0 работают как два независимых 8-разрядных счетчика (см. рис. 2.11, С). Счетчик TL0 использует управляющие биты таймера 0: C/T’, GATE, TR0, INT0’ и TF0. Счетчик TH0, который может выполнять только функции таймера (считать машинные циклы), использует управляющий бит TR1 и флаг TF1 таймера 1.
Режим 3 используется тогда, когда для реализации требуемого алгоритма нужен дополнительный 8-разрядный таймер или счетчик. Если таймер 0 работает в режиме 3, в составе МК 80С51 имеется три таймера. При этом таймер 1 может быть выключен путем перевода в свой собственный режим 3, может быть использован последовательным портом в качестве формирователя частоты синхронизации, а также может быть использован в любом применении, не требующем прерывания.
Последовательный порт
2.12.1. Последовательный порт предназначен для приема и передачи данных в последовательном коде. Преобразование параллельного кода в последовательный и обратно осуществляется с помощью сдвигающих регистров универсального асинхронного приемопередатчика (UART – Universal Asynchronous Receiver/Transmitter), принцип работы которого представлен на рис. 2.12, где: Data Bits – параллельный код передаваемых (принятых) данных, Serial Data – последовательный код данных, D0 ¸ D8 – разряды сдвигающих регистров приемопередатчика, Shift – сигнал управления сдвигом, LSB (Least Significant Bit) – младший бит, MSB (Most Significant Bit) – старший бит, Start Bit – стартовый бит, Stop Bit – стоп-бит, TXD – выход передатчика, RXD – вход приемника,
1-to-0 DETECTOR – устройство обнаружения стартового бита (перехода входного сигнала из 1 в 0).
Рис. 2.12. Работа универсального асинхронного приемопередатчика в режиме передачи данных (A) и в режиме приема данных (B)
В режиме передачи данных UART не только преобразует параллельный код в последовательный, но также добавляет к каждому передаваемому байту данных два служебных бита – стартовый бит и стоп-бит, которые служат для определения границ байта данных.
2.12.2. Последовательный порт МК 80С51 может работать в полном дуплексном режиме, т.е. он может осуществлять передачу и прием данных одновременно.
Сдвигающие регистры приемника и передатчика последовательного порта имеют доступ к одному и тому же регистру специальных функций SBUF. Запись байта в регистр SBUF приводит к автоматической загрузке сдвигающего регистра передатчика и инициирует начало передачи. По окончании приема байта в сдвигающий регистр приемника, содержимое этого регистра загружается в SBUF
Наличие в структуре микроконтроллера буферного регистра позволяет совмещать операции приема очередного байта данных с чтением ранее принятого байта. Однако, для того, чтобы не произошло потери информации, к моменту окончания приема очередного байта, предыдущий байт должен быть считан из SBUF.
2.12.3.Последовательный порт имеет 4 режима работы. Выбор режима осуществляется путем программирования соответствующих разрядов регистра управления последовательного порта SCON(Serial Port Control Register), формат которого представлен в табл. 2.9.
Во всех четырех режимах работы последовательного порта передача данных инициируется любой командой микроконтроллера в которой регистр SBUF выступает в качестве регистра-приемника результата. По окончании передачи байта данных устанавливается флаг прерывания передатчика TI в регистре SCON.
2.12.4. Режим 0 – синхронный режим с постоянной скоростью обмена (Baud Rate), определяемой выражением:
BR0 = fosc / 12 , (2.1)
где BR0 – скорость обмена в режиме 0, бод;
fosc – частота тактового генератора МК, Гц.
В режиме 0 разряд Р3.0/RXD порта 3 микроконтроллера используется для ввода/вывода последовательных данных (8 бит), а разряд Р3.1/TXD – для формирования выходных импульсов синхронизации. За один машинный цикл передается (принимается) один бит данных. В конце передачи 8-го бита устанавливается флаг прерывания передатчика TI в регистре SCON.
Таблица 2.9