- •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. Особенности работы с квази - двунаправленными портами
2.4. Способы адресации
Для обращения к операндам внутри адресного пространства 80C196KC используются шесть основных способов адресации:
- Регистровая прямая адресация
- Косвенная адресация
- Косвенная адресация с автоинкрементом
- Непосредственная адресация
- Короткая индексная адресация
- Длинная индексная адресация
Кроме основных способов существуют еще два - Адресация через Регистр Нуля и Адресация через Регистр Указателя Вершины стека. Адресация через Регистр Нуля объединяет ZERO_REG с Длинной индексной адресацией, разрешая прямой доступ к любой ячейке в памяти.
Адресация через Регистр Указателя Вершины стека объединяет SP с Косвенной адресацией для того,чтобы обратиться к вершине стека и с Короткой индексной адресацией
для доступа к данным внутри стека.
Регистровая прямая адресация непосредственно обращается к регистру из 256-байтового Нижнего Регистрового файла. При работе с окнами, этот режим может также непосредственно обращаться к SFRs или к Верхнему Регистровому
Файлу. Регистр выбирается 8-битным полем внутри команды, а адрес регистра должен соответствовать правилам выравнивания для типа операнда.
В зависимости от команды, при вычислении могут участвовать до трех регистров
Примеры Регистровой прямой адресации:
ADD AX, BX, CX ; AX < - BX + CX ( ADD_3op )
MUL AX, BX ; AX < - AX * BX ( MUL_2op )
INCB CL ; CL < - CL + 1
Косвенный способ адресации обращается к операнду, помещая его адрес в переменную типа WORD в Регистровом Файле. Вычисляемый адрес должен соответствовать правилам
выравнивания для типа операнда. Обратите внимание, что косвенный адрес может относиться к операнду в любом месте адресного пространства, включая Регистровый Файл.8-битное поле внутри команды выбирает регистр, который содержит косвенный адрес. Команда может содержать только одну косвенную ссылку;любые дополнительные операнды должны быть указаны через прямую регистровую ссылку.
Примеры Косвенной Адресации:
;взять операнд из ячейки с адресом в AX и поместить
;в ячейку AX
LD AX, [AX ] ; AX < - MEM_WORD (AX)
ADDB AL, BL, [CX ] ; AL < - BL + MEM_BYTE(CX) ; (ADDB_3op)
POP [AX ] ; MEM_WORD (AX) < - MEM_WORD (SP)
; SP < - SP + 2
Косвенная Адресация с Автоинкрементом - такой же как косвенный способ адресации, за исключением того, что переменная типа СЛОВО, которая содержит косвенный адрес,
увеличивается после того, как она используется для адресации операнда. Если команда функционирует на БАЙТЕ или
КОРОТКОМ ЦЕЛОМ ЧИСЛЕ, косвенная переменная адреса увеличивается на 1. Если команда функционирует на СЛОВЕ или ЦЕЛОМ ЧИСЛЕ, косвенная переменная адреса увеличивается на 2 .
Примеры Косвенной Адресации с Автоинкрементом:
LD AX, [BX] + ; AX < - MEM_WORD (BX)
; BX < - BX + 2
ADDB AL, BL, [CX] + ; AL < - BL + MEM_BYTE (CX)
; CX < - CX + 1 ( ADDB_3op )
PUSH [AX] + ; SP < - SP - 2
; MEM_WORD (SP) < - MEM_WORD (AX)
; AX < - AX + 2
Непосредственный способ адресации позволяет брать операнд непосредственно из поля в команде. Для операций на БАЙТЕ или операндах типа КОРОТКОЕ ЦЕЛОЕ ЧИСЛО,это - поле с 8 битами.Для Операций на СЛОВЕ или операндах типа ЦЕЛОЕ ЧИСЛО, это - поле с 16 битами. Команда может содержать только одну непосредственную ссылку; любые дополнительные операнды должны быть указаны через прямую регистровую ссылку.
Примеры Непосредственной Адресации:
ADD AX,#340 ; AX < - AX + 340 ( ADD_2op )
PUSH #1234H ; SP < - SP - 2
; MEM_WORD (SP) < - 1234H
DIVB AX, 10 ; AL < - AX/10
; AH < - AX MOD 10
В Короткой индексной адресации адрес одного из операндов вычисляется из двух полей с 8 битами. Одно поле с 8 битами в команде выбирает переменную типа СЛОВА в Регистровом Файле, которая содержит адрес. Второе 8-битное поле в команде знако-расширяется и суммируется с переменной СЛОВА для формирования исполнительного адреса операда.Исполнительный адрес может быть в пределах от -128 и до 127 байтов относительно адреса в переменной типа СЛОВО.
Команда может содержать только одну Коротко индексную ссылку; любые другие операнды должны быть указаны через прямую регистровую ссылку.
Примеры Короткой индексной адресации:
LD AX, 12[BX ] ; AX < - MEM_WORD (BX+12)
MULB AX, BL, 3[CX ] ; AX < - BL * MEM_BYTE (CX+3)
;( MULB_3op )
Длинная индексная адресация похожа на режим Короткой индексной адресации, за исключением того, что берется поле с 16 битами из команды и добавляется к переменной типа СЛОВО для того, чтобы cформировать адрес из операнда. Никакое расширение знака не требуется. Команда может содержать только одну длинно-индексируемую ссылку; любые остающиеся операнды должны быть указаны через прямую регистровую
ссылку.
Примеры Длинной индексной адресации:
AND AX, BX, TABLE[CX ]; AX < - BX AND МЕM_WORD(TABLE+CX)
; ( AND_3op )
ST AX, TABLE[BX ] ; MEM_WORD (TABLE+BX) < - AX
ADDB AL, BL, LOOKUP[CX ]; AL < - BL + MEM_BYTE LOOKUP+CX)
; ( ADDB_3op )
Адресация Через Регистр Нуля (Zero Register Addressing): первые два байта в Регистровом Файле составляют Регистр Нуля ( ZERO_REG ). Эти байты устанавливаются в нуль аппаратными средствами 80C196KC. Кроме обеспечения фиксированного источника постоянной нуля для вычислений и
сравнений, Регистр Нуля может использоваться как переменная СЛОВА в длинно-индексируемой ссылке. Такая комбинация выбора регистра и способа адресации позволяет
адресовать любую ячейку в памяти непосредственно. Так как этот режим использует индексную адресацию, то доступ осуществляется, медленнее чем регистровые - прямые доступы.
Примеры Адресации через Регистр Нуля:
ADD AX, 1234[ZER0_REG ]; AX < - AX + MEM_WORD (1234)
; ( ADD_2op )
POP 5678[ZERO_REG ] ; MEM_WORD (5678) < - MEM_WORD (SP)
; SP < - SP + 2
Адресация через Регистр Указателя Вершины стека:
Байты 18H и 19H Нижнего Регистрового Файла образуют систему Указатель Вершины стека (Stack Pointer; SP), который адресуется как 18H(по адресу 18Н). Кроме обеспечения удобного манипулирования Указателем Вершины стека, SP может также использоваться как переменная СЛОВА в Косвенной ссылке для обращения к вершине стека или в коротко-индексируемой ссылке для доступа к данным внутри стека.
Примеры Адресации Регистра Указателя Вершины стека:
PUSH [SP ] ; Дубликат TOP_OF_STACK
LD AX, 2[SP ]; AX < - NEXT_TO_TOP