Из предыдущих глав мы немного узнали про наш любимый контроллер PIC16F84A :). Теперь, на мой взгляд, пришло время познакомиться с ним так сказать изнутри.
Что бы понять как работает контроллер, в обязательном порядке нужно знать регистры специального назначения(есть еще регистры общего назначения, но о них позже, так как здесь все крайне просто), кто за что отвечает, какие биты для чего нужны. Я представлю регистры в виде таблицы так, как они представлены в MPLAB.
|
|||
|
|||
|
Теперь запустите MPLAB и откройте окно File Registers. Видите? тоже самое, только нулевой банк сверху, а 1 снизу. Здесь все регистры, которые дублируются и в первом банке отмечены красным цветом. В данном микроконтроллере все регистры 8 разрядные. Начнем с INDF.
Регистр INDF
На первых порах не будем вдаваться в подробности, скажу лишь что нужен он для косвенной адресации. Разберемся с ним позднее.
RTCC или TMR0
Данный регистр используется для включения таймера, работающего от внутреннего источника частоты. Более подробно разберем в описании битов регистра OPTION
Регистр OPTION
Регистр содержит арифметические флаги, состояние контроллера при сбросе и биты выбора страниц для памяти данных.
C - Флаг переноса/заема: Для команд ADDWF и SUBWF. Этот бит устанавливается, если в результате операции из самого старшего разряда происходит перенос. Вычитание осуществляется путем прибавления дополнительного кода второго операнда. При выполнении команд сдвига этот бит всегда загружается из младшего или старшего бита сдвигаемого источника.
DC - Флаг десятичного переноса/заема: Для команд ADDWF и SUBWF. Этот бит устанавливается, если в результате операции из четвертого разряда происходит перенос. Механизм установки десятичного бита переноса "DC" тот же самый, отличается тем, что отслеживается перенос из четвертого бита.
Z - Флаг нулевого результата: Устанавливается, если результатом арифметической или логической операции является ноль.
PD - Power Down ( режим хранения данных): Устанавливается в "1" при включении питания или команде CLRWDT. Сбрасывается в "0" командой SLEEP.
TO - Time Out. Флаг срабатывания Watchdog таймера(сторожевой таймер): Устанавливается в "1" при включении питания и командами CLRWDT, SLEEP. Сбрасывается в "0" по завершению выдержки времени таймера WDT.
RP1, RP0 - Биты выбора страницы памяти данных при прямой адресации:
00= Страница 0 (00h-7Fh)
01= Страница 1 (80h-FFh)
10= Страница 2 (100h-17Fh)
11= Страница 3 (180h-1FFh)
На каждой странице расположено 128 байт. В кристалле PIC16F84 используется только RP0. В этом кристалле RP1 может использоваться просто как бит общего назначения чтения/записи. Однако надо помнить, что в последующих разработках он будет использоваться.
IRP - Бит выбора страницы памяти данных при косвеной адресации:
0= Страницы 0,1 (00h-FFh)
1= Страница 2,3 (100h-1FFh)
Этот бит в кристалле PIC16F84 использовать не имеет смысла. Поэтому его можно использовать как бит общего назначения чтения/записи. Однако, надо помнить, что в последующих разработках он будет использоваться.