
- •1.Функциональное описание микроконтроллера i80196kc
- •1.1. Обзор архитектуры
- •1.1.1. Ядро 80xc196kc
- •1.1.1.1. Файловый регистр (Register File)
- •1.1.1.2. Регистровое арифметико-логическое устройство (ралу)
- •1.1.1.4. Контроллер памяти ( Memory Controller)
- •1.1.1.5. Контроллер прерываний и pts (Interrupt Controller)
- •1.2. Параметры синхронизации
- •1.3. Внутренние периферийные устройства
- •1.3.1. Стандартные порты ввода-вывода
- •1.3.2. Последовательный порт ввода-вывода
- •1.3.3. Быстродействующий модуль
- •1.3.4. Аналого-Цифровой Преобразователь (ацп)
- •1.3.5. Широтно-импульсный модулятор (шим)
- •1.3.6. Сторожевой Таймер
- •2.Введение в программирование 8xc196kc
- •2.1. Типы программирования микроконтроллера
- •2.2. Система команд
- •2.3. Типы данных
- •2.4. Способы адресации
- •3. Карта памяти микроконтроллера i80c196kc
- •3.1. Основные разделы памяти
- •3.1.1. Разделы внешней памяти
- •3.1.2. Порты 3 и 4
- •3.1.3. Программная память и Память Специального назначения
- •3.1.3.1. Управление доступом к внутренней или внешней памяти
- •3.1.3.2. Память для программ
- •3.1.3.3. Память специального назначения
- •3.1.4. Регистровый Файл(Register File)
- •3.1.4.1. Указатель Вершины стека (sp)
- •3.1.4.2 Регистры Специальных Функций
- •3.2. Работа через горизонтальное окно
- •3.2.1. Выбор hWindow
- •3.3.1. Выбор vWindow
- •3.3.2. Работа с вертикальными окнами и Способы Адресации
- •4. Прерывания
- •4.1 Обработка Прерывания
- •4.2. Описание работы Контроллера Прерывания
- •4.3. Описание работы Периферийной Станции Транзакций(pts)
- •4.4. Приоритеты Прерывания
- •4.5. Изменение Приоритетов Прерывания
- •4.6. Программы Обработки прерывания
- •4.7. Распознавание Прерываний
- •4.8. Время Ожидания Прерывания
- •4.9. Специальные Прерывания
- •4.9.1. Прерывание по Невыполняемому Коду
- •4.9.2. Прерывание по Ловушке Программного
- •4.9.3. Немаскируемое Прерывание
- •4.10. Программирование Прерываний
- •4.11. Предоставление pts Прерывания
- •4.12. Предоставление Стандартных Прерываний
- •4.13. Выбор Источников Прерывания
- •4.14. Регистры Маскирования Прерываний
- •4.15. Регистры Захвата Прерывания
- •4.16. Pts Прерывания
- •4.16.1. Управляющие Блоки pts
- •4.16.1.1. Регистр ptscount
- •4.16.1.2. Прерывание End-of-pts
- •4.16.1.3. Регистр ptscon
- •4.16.2. Краткий Обзор Режима Одиночной
- •4.16.2.1. Пример Режима Одиночной Передачи
- •4.16.3. Краткий Обзор Режима Поблочной
- •4.16.3.1. Пример Режима Поблочной Пересылки
- •4.16.4. Краткий Обзор Режима Сканирования
- •4.16.4.1. Pts Циклы в Режиме Сканирования ацп
- •11Eh ad_result для ach0
- •102H ad_result для acHx
- •100H ad_command для acHx
- •4.16.5. Hsi. Краткий Обзор Режима
- •4.16.5.1. Пример Режима hsi
- •4.16.6. Hso. Краткий Обзор Режима
- •4.16.6.1. Пример Режима hso
- •6. Парраллельные порты ввода - вывода
- •6.1. Краткий Функциональный Обзор
- •6.2.Контакты Порта Ввода
- •6.3. Контакты Порта Вывода
- •6.4. Контакты квази-двунаправленного порта
- •6.5 Контакты Двунаправленного Порта с открытым стоком
- •6.6.Программирование Портов ввода-вывода
- •6.7.Организация Портов Ввода
- •6.7.1. Порт 0
- •6.8. Организация Портов Вывода
- •6.9. Порт 1
- •6.10. Порт 2
- •6.11. Доступ к Порту 3 и Порту 4
- •6.11.1. Порт 3 и Порт 4
- •6.12. Особенности работы с квази - двунаправленными портами
3.1.4. Регистровый Файл(Register File)
Регистровый Файл разделен на Верхний(Upper) и Нижий(Lower) Регистровые Файлы (см. рис.4). Верхний Регистровый Файл содержит универсальные регистры оперативной памяти (Register RAM). Нижний Регистровый Файл содержит универсальные регистры оперативной памяти, Указатель Вершины стека (SP), Регистры специальных функций ЦП (CPU SFRs).
*1. Содержит универсальные регистры ОПЕРАТИВНОЙ ПАМЯТИ ( доступ через косвенную или индексную адресацию ,когда не используется работа с вертикальным окном ).
*2. Размещается в Нижнем Регистровом Файле (доступ через прямую регистровую, косвенную или индексную адресацию).
3.1.4.1. Указатель Вершины стека (sp)
Ячейки Памяти 18H и 19H содержат указатель вершины стека (SP). SP содержит адрес стека. SP должен указывать на адрес слова (четный адрес), который на два байта больше, чем желательный начальный адрес. Прежде, чем CPU выполняет вызов подпрограммы или программу обработки прерывания, он декрементирует дважды SP и затем копирует (PUSH) адрес следующей команды из программного счетчика в стек. После этого CPU загружает адрес подпрограммы или программы обработки прерывания в программный счетчик . После того, как CPU завершит подпрограмму или программу обработки прерывания, он выполняет команду возврата из подпрограммы (RET) и выталкивает содержимое вершины стека ( то-есть адрес возврата ) в счетчик программ.
Через стек также передаются параметры в подпрограммы. Параметры помещаются в стек в порядке, в котором с ними сталкиваются при просмотре исходного текста.
Параметры с 8 битами ( БАЙТ и КОРОТКОЕ ЦЕЛОЕ ЧИСЛО ) помещаются в стек с неопределенным старшим байтом. Параметры с 32 битами ( ДЛИННОЕ ЦЕЛОЕ, ДВОЙНОЕ СЛОВО, и REAL) помещаются в стек как два значения с 16 битами; старшая половина параметра помещается в стек первой .
Подпрограммы могут быть вложены. То-есть каждая подпрограмма может вызывать другие подпрограммы. CPU помещает содержимое счетчика программ в стек каждый раз, когда он выполняет вызов подпрограмм. При помещении данных в стек, стек растет вниз. Единственое ограничение к глубине вложения - количество доступной памяти. При возврате из каждой вложенной подпрограммы, он выталкивает адрес из вершины стека и следующий адрес возврата двигается в верхнюю часть стека.
Когда операции со стеком не выполняются, ячейки SP могут использоваться как универсальные регистры ОПЕРАТИВНОЙ ПАМЯТИ.
Так как после сброса содержимое регистра SP неопределено, пользователь, в начале своей программы, должен обязательно его инициализировать. Для инициализации Указателя Вершины стека программа пользователя должна загружать чётный адрес в указатель вершины стека. Выберите адрес, который на два байта больше чем желательный начальный адрес, потому что указатель вершины стека автоматически уменьшается прежде чем CPU помещает первый байт адреса возврата в стек. Не забудьте, что стек растет вниз, так что отведите достаточный участок памяти для максимальногочисла входов стека.
Стек может размещаться или во внутреннем Регистровом Файле или во внешней оперативной памяти.Следующий пример инициализирует верхнюю часть верхнего Регистрового Файла 8XC196KС как стек.
LD SP, #200H ; Загрузить Указатель вершины стека