Подключение внешней памяти

Структура внутренней памяти данных

Структура внутренней памяти данных приведена на рис.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.