62904 (588851), страница 2
Текст из файла (страница 2)
Таблица 1.1 — Регистры специального назначения
Обозначение | Описание | |||||||
Бит7 | Бит6 | Бит5 | Бит4 | Бит3 | Бит2 | Бит1 | Бит0 | |
Банк 0 | ||||||||
INDF | При обращении производится доступ к ОЗУ по адресу в FSR | |||||||
TMR0 | Регистр TMR0 | |||||||
PCL | Младший байт счетчика команд PC | |||||||
STATUS | IRP | RP1 | RP0 | -TO | -PD | Z | DC | C |
FSR | Индексный регистр косвенной адресации | |||||||
PORTA | — | — | — | RA4/T0CKI | RA3 | RA2 | RA1 | RA0 |
PORTB | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1 | RB0/INT |
EEDATA | Регистр данных Flash–ПЗУ | |||||||
EEADR | Регистр адреса Flash–ПЗУ | |||||||
PCLATH | — | — | — | Буфер для записи старших 5 бит РС | ||||
INTCON | GIE | EEIE | T0IE | INTE | RBIE | T0IF | INTF | RBIF |
Банк 1 | ||||||||
INDF | При обращении производится доступ к ОЗУ по адресу в FSR | |||||||
OPTION | GPPU | INTEDG | T0CS | T0SE | PSA | PS2 | PS1 | PS0 |
PCL | Младший байт счетчика команд PC | |||||||
STATUS | IRP | RP1 | RP0 | -TO | -PD | Z | DC | C |
FSR | Индексный регистр косвенной адресации | |||||||
TRISA | — | — | — | Регистр направления данных PORTA | ||||
TRISB | Регистр направления данных PORTB | |||||||
EECON1 | — | — | — | EEIF | WRERR | WREN | WR | RD |
EECON2 | Регистр 2 управления Flash–ПЗУ (физически не реализован) | |||||||
PCLATH | — | — | — | Буфер для записи старших 5 бит РС | ||||
INTCON | GIE | EEIE | T0IE | INTE | RBIE | T0IF | INTF | RBIF |
Таблица 1.2 — Состояние регистров после сброса POR
Регистр | Состояние |
W | xxxx xxxx |
INDF | ---- ---- |
TMR0 | xxxx xxxx |
PCL | 0000 0000 |
STATUS | 0001 1xxx |
FSR | xxxx xxxx |
PORTA | ---x xxxx |
PORTB | xxxx xxxx |
EEDATA | xxxx xxxx |
EEADR | xxxx xxxx |
PCLATH | ---0 0000 |
INTCON | 0000 000x |
OPTION | 1111 1111 |
TRISA | ---1 1111 |
TRISB | 1111 1111 |
EECON1 | ---0 x000 |
EECON2 | ---- ---- |
Регистр INDF не является физическим регистром. При обращении к регистру INDF на самом деле происходит косвенная адресация памяти данных.
Косвенная адресация реализована через регистр INDF. Любая команда, использующая регистр INDF, фактически обращается к данным, на которые указывает регистр адреса в файле (FSR). Чтение самого INDF с помощью косвенной адресации дает в результате 00h. Результатом косвенной записи в регистр INDF будет NOP.
1.3.2 Стек
PIC16F84 имеет аппаратный стек глубиной 8 13-битных слов. Стек не является частью памяти программ или данных, а указатель стека не может быть явно прочитан или модифицирован. При выполнении команды CALL или возникновении прерывания PC сохраняется в стеке. При выполнении команд RETURN, RETLW или RETFIE значение PC восстанавливается из стека. Содержимое PCLATH при этом не изменяется.
Стек работает как циклический буфер. Это означает, что после того, как в стек было помещено восемь записей, девятая помещается на место первой, десятая - на место второй, и т.д.
1.3.3 Порты ввода/вывода
PIC16F84 имеет два порта, а именно PORTA, PORTB. Некоторые каналы портов совмещают функции выводов других периферийных устройств.
PORTA — это 5-разрядный порт. RA4 имеет триггер Шмитта на входе и открытый сток на выходе. Остальные каналы порта имеют входные уровни ТТЛ и выходные буферы КМОП. Порт имеет регистр направления TRISA, с помощью которого каналы порта могут быть индивидуально настроены на ввод или на вывод.
Установка в "1" бита регистра TRISA определяет соответствующий канал PORTA как вход, т.е. выходные буферы переводятся в третье состояние. Установка в "0" бита регистра TRISA определяет соответствующий канал PORTA как выход, т.е. содержимое защелки порта выводится на соответствующий вывод микросхемы.
Чтение регистра PORTA возвращает состояние на выводах порта, тогда как запись производится в защелку PORTA. Все операции записи в порт производятся как чтение-модификация-запись, т.е. сначала производится чтение состояния выводов, затем модификация и запись в защелку. Канал RA4 также работает как вход тактового сигнала TMR0.
PORTВ — это 8-разрядный порт, который имеет регистр направления TRISB, с помощью которого каналы порта могут быть индивидуально настроены на ввод или на вывод.
Установление в "1" бита регистра TRISB определяет соответствующий какал PORTB как вход, т.е. выходные буферы переводятся в третье состояние. Установление а "0" бита регистра TRISB определяет соответствующий канал PORTB как выход, т.е. содержимое защелки порта выводится на соответствующий вывод микросхемы.
Все контакты PORTВ имеют встроенные подтягивающие резисторы. Их включением управляет один бит -RCPU, он должен быть установлен в "0". Подтягивающие резисторы автоматически выключаются, когда каналы порта настраиваются на вывод и после POR.
Все операции вывода в порт осуществляются как чтение-модификация-запись. Команды BCF и BSF, например, считывают значение порта в ЦПУ, выполняют операцию с битом и записывают результат обратно. Требуется осторожность при применении этих команд к порту, содержащему как входы, так и выходы. Например, операция BSF надбитом 5 PORTB считывает все восемь битов PORTB в ЦПУ выполняется и записывает результат в выходные защелки. Если другой канал PORTВ используется как двунаправленный и настроен в данный момент на ввод, то входной сигнал будет считан с вывода в ЦПУ и записан а защелку данных этого канала поверх предыдущего значения.
1.3.4 Таймер
Возможности TMR0:
-
8-разрядный таймер доступен для чтения и записи,
-
8-разрядный программируемый предделитель,
-
выбор источника тактового сигнала (внутренний или внешний),
-
выбор активного фронта внешнего тактового сигнала,
-
прерывание по переполнению таймера.
Режим работы от внутреннего тактового сигнала выбирается установлением в "0" бита Т0CS. Приращение значения TMR0 производится в каждом машинном цикле (без предделителя). После записи в TMR0 нового значения инкремент счетчика запрещен два последующих цикла.
Режим работы от внешнего тактового сигнала выбирается установлением в "1" бита T0СS. Приращение значения TMR0 производится по нарастанию или по спаду, а зависимости от состояния бита T0SЕ, сигнала со входа T0CKI.
TMR0 имеет программируемый предделитель. Предделитель может быть подключен либо к TMRO, либо к WDT. Бит PSA управляет подключением предделителя.
Прерывание от TMR0 возникает при переполнении TMR0, при этом флаг T0IF устанавливается в "1" и TMR0 продолжает работу. Запретить это прерывание можно установкой в "0" бита T0IE. Процедура обработки прерывания должна установить флаг T0IF в "0" перед тем, как вновь разрешить прерывание. Прерывание от TMRO не может вывести процессор из режима SLEEP, поскольку таймер в этом режиме выключен.
1.3.5 Предделитель
8-разрядный счетчик может использоваться как предделитель для TMR0 или как постделитель для WDT. Имеется только один преддепитель, который может быть использован либо для TMR0, либо для WDT. Подключение предделителя к TMR0 означает, что WDT не может его использовать, и наоборот.
Биты PSA и PS2-PS0 определяют подключение предделителя и коэффициент деления. Когда предделитель подключен к TMR0, любая команда записи в TMR0 будет очищать предделитель. Когда предделитель подключен к WDT, команда CLRWDT очистит предделитель вместе с WDT. Предделитеяь недоступен для чтения или записи. При сбросе предделитель также очищается.
Управление подключением предделителя полностью программное, т.е. можно его переключить во время выполнения программы.
1.4 Разработка программного обеспечения
1.4.1 Обзор команд