Нулевой адрес памяти данных обозначается как INDF (INDirect File). Поскольку этот регистр используется исключительно для включения режима косвенной адресации, то его не стали реализовывать как настоящий регистр. То есть вы не можете хранить данные в регистре INDF, поскольку он физически не существует!
∙ FSR (h’04’)
В индексном регистре FSR содержится 8-битный адрес, который используется при обращении команды по нулевому адресу (к регистру INDF).
Таймер
Большинство микроконтроллеров имеют возможность измерения временных интервалов и/или формирования прямоугольных импульсов заданной длительности. Как правило, для этого используется один или более счетчиков, инкрементирование которых происходит либо по внешним импульсам, либо по внутреннему тактовому сигналу Например, если в автоматической упаковочной машине необходимо осуществлять подсчет консервных банок, движущихся по конвейеру, то в качестве входного сигнала таймера может использоваться сигнал от фотоэлектрического датчика. Если в одну коробку помещается 24 банки, то во внутренний 8-битный счетчик необходимо загрузить значение h’E8’ (-24). При переполнении счетчика с h’FF’ до h’00’ будет сгенерировано прерывание (см. главу 7) и микроконтроллер начнет выполнять соответствующие действия.
Во всех микроконтроллерах PIC имеется, по крайней мере, один базовый таймер/счетчик Таймер 0. Счетный регистр таймера TMR0 (h’01’), доступный для чтения и записи, может тактироваться внешним сигналом, подаваемым на вход микроконтроллера TOCKI (Timer0 ClocK In), который совмещен с линией RA4 порта А. Кроме того, инкрементирование счетчика может происходить по внутреннему тактовому сигналу Q4 (Рис. 4.4), частота которого составляет 1/4 частоты кварцевого резонатора. Частота обоих сигналов (и внешнего, и внутреннего) может быть снижена при помощи внутреннего 8-битного предделителя. Коэффициент деления предделителя задается тремя младшими битами регистра OPTION_REG, расположенного по адресу h’81’ (см. Рис. 13.2 на стр. 452), которые называются PS2:PS1:PS0. Соответственно, коэффициент деления будет равен 2PS+1. Например, если PS[2:0] = 111, то счетный регистр таймера будет инкрементироваться с частотой
Предделитель может быть отключен от таймера установкой бита PSA (OPTION_REG[3]) в 1. При этом импульсы будут поступать непосредственно на счетчик. Кроме того, при записи в счетный регистр таймера регистр предделителя также сбрасывается (к примеру, последовательность команд movlw h’E8’, movwf 1 вызовет сброс предделителя), позволяя отсчитывать временной интервал от точно заданного момента.
Когда бит PSA регистра OPTION_REG установлен в 1, то предделитель используется в качестве постделителя
С Таймером 0 связаны следующие регистры:
∙ TMR0 (h’01’)
Этот 8-битный суммирующий счетчик, иногда называемый таймером/счетчиком реального времени, осуществляет счет импульсов, поступающих на вход таймера. Данный регистр в любой момент времени доступен как для чтения, так и для записи. При переполнении счетчика (при смене значения с h’FF’ на h’00’) он устанавливает бит T0IF (Timer 0 Interrupt Flag) регистра управления прерываниями INTCON (см. Рис. 7.3 на стр. 213). Этот флаг может использоваться для генерации прерывания.
∙ OPTION_REG (h’81’)
Для управления Таймером 0 используются шесть битов этого регистра, расположенного по адресу h’81’ (см. Рис. 13.2 на стр. 452):