Подключение внешней памяти
Структура внутренней памяти данных
Структура внутренней памяти данных приведена на рис.13. В состав памяти входят четыре банка регистров общего назначения, область памяти с битовым доступом, область памяти с байтовым доступом, зона регистров специального назначения.
а) Общая структура | б) Структура битовой памяти |
Рис. 13. Структура внутренней памяти данных
Для подключения внешней памяти необходимо организовать шину адреса и шину данных с помощью специальных функций портов P0 и P2. Поскольку для организации ША требуется 16 разрядов и для ШД 8 разрядов, необходимо использовать буферный регистр, который позволит использовать порт Р0 по очереди в качестве ША и ШД. Схема подключения внешней памяти программ приведена на рис.14. Схема подключения внешней памяти данных приведена на рис.15.
Рис.14. Подключение внешней памяти программ
В начале цикла обращения к памяти программ адрес выставляется на порты Р0 (младшие разряды) и Р2 (старшие разряды). Одновременно с этим сигнал ALE выставляется в 0. Буферный регистр принимает со своих входов D0-D7 младшие разряды адреса и записывает во внутренние ячейки. В середине цикла обращения к памяти сигнал ALE выставляется в 1, буфер прекращает прием адреса. Младшие разряды адреса с порта Р0 снимаются. Далее полный адрес подается на микросхему памяти из Р2 и с выходов буферного регистра В0-В7. Одновременно с этим сигнал РМЕ выставляется в 0, что обеспечивает доступ к требуемой ячейке памяти. Содержимое ячейки выставляется на выходы D0-D7 и через порт Р0 поступает в микроконтроллер.
Обращение к памяти данных производится как для чтения, так и для записи, поэтому вместо сигнала РМЕ используется RD для чтения и WR для записи. При записи данные выставляются в порт Р0.
Рис. 15. Подключение внешней памяти данных
3.8. Блок таймеров / счетчиков
Микроконтроллер содержит два таймера/счетчика Т/С0 и Т/С1. Структура таймера/счетчика Т/С1 приведена на рис.16.
У каждого таймера/счетчика имеется 16-разрядный регистр (ТН0,TL0 для Т/С0) и (TH1,TL1 для Т/С1), который выполняет функцию считающего элемента.
Управление работой таймеров/счетчиков осуществляется с помощью регистров специального назначения – регистра режимов TMOD и регистра управления TCON, а также схемы управления. Число, с которого начинается счет, заносится в регистры таймеров/счетчиков программно. В процессе счета содержимое регистров Т/С0 и Т/С1 инкрементируется. При переполнении регистров Т/С0 или Т/С1 (переход от состояния «все единицы» к состоянию «все нули») формируется флаг переполнения.
Рис.16. Структура таймера/счетчика Т/С1
При работе в качестве таймера, содержимое Т/С0 и Т/С1 инкрементируется каждый машинный цикл, т.е. частота счета равна fQ/12 , где fQ – частота тактового генератора.
При работе Т/С0 и Т/С1 в качестве счетчиков внешних событий (сигналы поступают на входы Р3.4 и Р3.5) , содержимое счетчиков инкрементируется при переходе из 1 в 0 сигналов на счетных входах.
Регистр режимов TMOD определяет:
- режим работы каждого таймера/счетчика – используемую разрядность считающего элемента;
- источник импульсов для счета – работу в качестве таймера или счетчика;
- разрешение управления запуском таймера / счетчика от внешнего входа.
Назначение разрядов регистра TMOD приведено в таблице 1. Биты 0-3 относятся к Т/С0, биты 4-7 – к Т/С1.
Таблица 1
Биты | ||||||||
Обозн. | GATE1 | C/T1 | M1.1 | M1. 0 | GATE0 | C/T0 | M0. 1 | M0.0 |
Назначение битов М0, М1 (режим работы, отдельно для Т/С1 и Т/С0):
- М1, М0=00 (режим 0), используется 13-разрядный считающий элемент 5 разрядов TH0+8 разрядов TL0;
- М1, М0=01 (режим 1), используется 16-разрядный считающий элемент 8 разрядов TH0+8 разрядов TL0;
- М1, М0=10 (режим 2), используется 8-разрядный считающий элемент TL0. TH0 хранит константу перезагрузки. При переполнении TL0 автоматически перезагружается;
- М1, М0=11 (режим 3), для Т/С1 не используется. Т/С0 работает как два независимых 8-разрядных счетчика TH0 и TL0.
Биты С/Т0,С/Т1 определяют работу в качестве таймера (С/Т0 или С/Т1 = 0) или счетчика (С/Т0 или С/Т1 = 1).
Бит GATE разрешает управлять таймером от внешнего вывода INT0 – для Т/С0, INT1 – для Т/С1. Если GATE = 0 – управление запрещено;GATE = 1 – управление разрешено.
Регистр управления ТCON предназначен для приема и хранения управляющего слова. Обозначение и назначение разрядов регистра приведено в таблице 2. Для управления работой таймеров-счетчиков используются разряды 4-7.
Таблица 2
Биты | ||||||||
Обозн. | TF1 | TR1 | TF0 | TR0 |
Назначение битов:
- TR0, TR1 – биты включения Т/С, отдельно для Т/С0 и Т/С1. Если TR = 0 - выключен, TR = 1 – включен. Биты устанавливаются и сбрасываются программно
- TF0, TF1 – флаги переполнения Т/С. Биты сбрасываются и устанавливаются аппаратно и программно.
Все биты регистра ТCON доступны по чтению. Биты 4,5 относятся к Т/С0,биты 6,7 – к Т/С1.
Т/С1 аппаратно связан с блоком синхронизации последовательного интерфейса (ПИ), он используется для управления скоростью приема/передачи последовательных данных.
Пример настройки работы таймера-счетчика.
Задача. Запрограммировать таймер-счетчик 1 для работы в режиме 16-разрядного таймера без внешнего управления, начальная константа для счета FFFDh.
Формирование разрядов регистра TMOD:
М1=0, М0=1 – режим 1 (16-разрядный считающий элемент);
С/Т1 =0 – режим таймера;
GATE = 0 – без внешнего управления;
TMOD=00010000В.
Фрагмент программы настройки таймера:
MOV TMOD, #00010000B ;определение режима
MOV TH1, #FFH ;начальная константа для счета FFh (старшая часть)
MOV TL1, #FDH ;начальная константа для счета FDh(младшая часть)
SETB TR1 ;запуск таймера-счетчика
Пример организации временных отметок.
Задача. В МП устройстве подключен кварцевый резонатор на 12МГц. Требуется запрограммировать таймер 0 в режим таймера без управления от внешнего входа таким образом, чтобы интервал переполнений таймера был 0,05сек.
Решение.
Частота генерации импульсов, для считающего элемента таймера равна 12000000/12= 1000000.
Это означает, что за 1 сек на считающий элемент поступит 1000000 импульсов, а требуемый временной интервал составляет 0,05сек. Таким образом число импульсов, поступающих за 0,05 сек составит 1000000*0,05=50000.
Соответственно, для подсчета такого числа импульсов требуется 16-разрядный считающий элемент. Выбираем режим 1.
Начальная константа для счета равна 65536-50000=15536.
Переводим в 16-ричную систему 15536D = 3CB0H.
Программируем таймер:
MOV TMOD,#00000001B;
MOV TH0,#3CH;
MOV TL0,#B0H.
Запускаем таймер командой
SETB TR0.
Таким образом, запрограммированный таймер сформирует флаг переполнения через 0,05сек. Чтобы получить новое переполнение через такой же интервал, необходимо перезагрузить в него константу для счета 3CB0H.