Однокристальные PIC-микроконтроллеры. Технология разработки и отладки программ для микроконтроллеров PIC16, страница 7

mowlw  0x80       ; загрузит число 80h в регистр W

subwf  Temp1, F  ; выполнить вычитание, результат – в регистре Temp1

     Задание 1.  Запишите пример в базовую программу. Выполните ее компиляцию. Выполните программу в пошаговом режиме, наблюдая за изменением содержимого регистров  W, Temp1 и STATUS. Проверьте правильность выполнения команд «вручную», используя представление данных в двоичных кодах. Определите значения флагов  C, Z, DC при выполнении команд.

Команды вычитания могут быть использованы для выполнения сравнения значений двух операндов.

Допустим, надо сравнить содержимое регистров Temp1  и  Temp2. Это можно сделать программой:

movf  Temp1,W   ; пересылка содержимого регистра Temp1 в регистр W

subwf  Temp2,W  ; вычитание содержимого регистра W (фактически Temp1)

; из содержимого регистра Temp2

Результат сравнения можно определить по флагам из регистра STATUS:

если  Z = 1, то  (Temp2) = (Temp1);

если  C = 1, то (Temp2) > (Temp1);

если  C = 0 и Z = 0, то (Temp2) < (Temp1).

Задание 2.  Запишите коды команд примера в базовую программу и выполните ее компиляцию. Исследуйте работу программы при значениях содержимого регистров Temp1 и Temp2 из табл.1. В нее также запишите значения флагов из регистра STATUS. Сделайте выводы о результатах сравнения.

Таблица 1

Temp1

Temp2

Флаги C, Z

Результат

25h

25h

25h

10h

25h

35h

Для занесения значений в регистры Temp1 и Temp2 откройте окно памяти данных (регистров МК) с помощью пункта меню View > FileRegisters . Для «ручного» изменения содержимого регистра надо подвести курсор на нужный адрес и щелкнуть левой кнопкой мыши. Выделенный адрес изменит цвет на синий. Затем надо щелкнуть по нему еще два раза левой кнопкой и ввести с клавиатуры новое значение содержимого регистра (букву h – признак системы счисления вводить, конечно, не надо).

3.8. Команды инкремента и декремента

В МК PIC16F84A имеются команды  инкремента регистра   incf  f, d   и декремента регистра  decf  f, d.  Команда  incf  увеличивает содержимое заданного регистра на 1, а  decf – уменьшает на 1. Результат может быть помещен обратно в заданный регистр (при  d=1), либо в рабочий регистр  W  (при  d=0). Если результат операции будет нулевой, то установится бит признака  Z=1.

Пример использования команд декремента:

movlw  0xFF       ; загрузить в регистр W число  FFh

movwf   Temp1   ; переслать содержимое регистра W в регистр Temp1

movwf   Temp2   ; переслать содержимое регистра W в регистр Temp2

decf   Temp1,F    ; декремент содержимого регистра, результат – в Temp1

decf   Temp1,F    ; декремент содержимого регистра, результат – в Temp1

decf   Temp1,F    ; декремент содержимого регистра, результат – в Temp1

decf   Temp2,W  ; декремент содержимого регистра, результат – в  рег. W

decf   Temp2,W  ; декремент содержимого регистра, результат – в рег. W

decf   Temp2,W  ; декремент содержимого регистра, результат – в рег. W

Задание 1. Запишите пример в базовую программу и выполните ее компиляцию. Проверьте работу программы в пошаговом режиме, наблюдая за изменением содержимого регистров Temp1, Temp2 и W. Сделайте выводы о свойствах команды  decf  f,d.

Следующий пример демонстрирует работу команд инкремента:

clrf   Temp1        ; очистить регистр Temp1

clrf   Temp2        ; очистить регистр Temp2

incf   Temp1,F    ; инкремент регистра, результат – в регистре Temp1

incf   Temp1,F    ; инкремент регистра, результат – в регистре Temp1

incf   Temp1,F    ; инкремент регистра, результат – в регистре Temp1

incf   Temp2,W  ; инкремент регистра, результат – в регистре W

incf   Temp2,W  ; инкремент регистра, результат – в регистре W