Регистр W. Вычисляемый переход. Флаги.

Архитектура микроконтроллеров PIC такова, что записать в регистр какое-либо число напрямую нельзя. Это можно сделать только через регистр-посредник w. Например, если мы хотим записать в регистр OptionR число 10, делается это в два приема:


movlw .10 ; в регистр w записывается нужное нам число 10

movwf OptionR, 1; из регистра w число десять копируется в регистр OptionR


Емкость регистра w составляет 1 байт, то есть максимальное число, которое мы можем в него записать — 256.


При выполнении программы, в данный момент времени выполняется та команда, номер (адрес) которой содержит двухбайтный регистр PC (PCL+PCH). В простейшем случае, при запуске программы, в этом регистре содержится нулевой (первый) адрес, который (по мере выполнения команд) многократно инкрементируется (увеличивается на единицу), то есть команды выполняются одна за другой, по порядку.

Однако такой порядок можно (и иногда нужно) изменить. Например, введением в программу команды перехода, содержащей адрес команды, на которую нужно перейти. В этом случае, в регистр PC загружается указанный адрес, что и вызывает переход.

Кроме команды goto, просто переводящей рабочую точку программы в указанное место, есть команда call, которая переводит рабочую точку программы, сохраняя при этом адрес исходного местоположения в специальном регистре, который называют стеком. Это позволяет в дальнейшем вернуть рабочую точку в то место программы, откуда был сделан переход и возобновить последовательное выполнение команд. Возврат осуществляется командой return (простой вариант), retlw (возврат с сохранением извлеченного из массива числа в регистр w) или retfie (возврат из обработчика прерывания).

Return и retfie команды сами по себе простые, поэтому останавливаться я на них не буду. Рассмотрим команду retlw и сопутствующий ей вычисляемый переход.

В том случае, когда нужно какому-либо числу программным способом поставить в соответствие другое число (например, для дешифрации, вывода на знакосинтезирущий индикатор и проч.), формируется подпрограмма массива, которая вызывается командой call <метка> и выглядит так:


<метка> addwf PC, 1; число, содержащееся в регистре w, добавляется к числу, содержащемуся в счетчике команд PC

retlw <xxx>; если в регистре w содержится число 1, в тот же регистр записывается xxx и рабочая точка программы возвращается к команде, следующей после вызова call

retlw <yyy>; если в регистре w содержится число 2, в тот же регистр записывается yyy и рабочая точка программы возвращается к команде, следующей после вызова call

и т. д.


При использовании вычисляемого перехода нужно знать, какое число будет содержаться в регистре PC в момент вызова подпрограммы массива и вводить такое количество элементов массива, чтобы оно в сумме с содержащимся в PC числом не превышало 256, иначе возникнет сбой.


Флаг — это один из битов регистра специального назначения (Status, IntCon), индицирующий некое событие, происходящее в ходе выполнения программы. Например, 2-й бит регистра Status переводится в единицу в тот момент, когда регистр, с которым в данный момент идет идет работа опустошается (то есть все его биты становятся равными нулю).


Используются технологии uCoz