Команда копирует байт из рабочего регистра W в заданный регистрF.
Пример
команда MOVWF H’23’скопирует байт из регистра W в регистр 23Н.
MOVFW F
Команда копирует байт из заданного регистра F в рабочий регистр W
Пример
команда MOVFW H’22’ загрузит в W содержимое регистра 22Н.
Следующая программа записывает в рабочий регистр W значение 01010101 и затем выдает его содержимое в TEMP, сбрасывает W, а затем восстанавливает его значение:
MOVLW B'01010101' ;загрузить 01010101 в регистр W MOVWF TEMP ;записать W в TEMP CLRW ; сбросить W (очистить W) MOVFW TEMP ; переслать TEMP в W (восстановить W)SWAP F,dКоманда переставляет местами старшую и младшую тетрады содержимого регистров памяти данных F и помещает результат либо в тот же регистр (d заменить на f), либо в рабочий регистр (d на w).ПримерКоманда SWAP H’22’, w выполняет операцию КОМАНДЫ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙПроцессоры микроконтроллеров РIС помимо сложения и вычитания могут выполнять и другие арифметические операции: операции сброса, инкрементирования и декрементирования.СложениеADDLW ККоманда позволяет прибавить 8-битную константу к рабочему регистру W.Пример:ADDLW b’10101010’ ADDWF f,dКоманда прибавляет переменную из памяти к содержимому рабочего регистра W. В отличии от команды ADDLW, в качестве адресата может использоваться как w, так и исходный регистр данных f.Пример:ADDWF H’26’,f
MOVLW 0FFH ; Загpузить 0FHh в pегистpW
MOVWF TEMP ;Записать W в TEMP MOVLW 1 ;Загрузить 01h в регистр W ADDWF TEMP,F ;Выполнить сложение (результат 00 –переполнение, флаг Z = 1ОчисткаКак рабочий регистр , так и любой регистр данных могут быть сброшены. В обоих случаях устанавливается флаг Z как результат нулевой операции.CLRWКоманда очищает рабочий регистр. По своему действию она аналогична команде MOVLW 0CLRFКоманда очищает любой регистр данныхПримерКоманда CLRF H’26’сбрасывает все разряды регистра 26Н Будучи составной частью команды 7-битный адрес операнда является фиксированным и поэтому в ходе программы изменяться не может. Существует ряд ситуаций, в которых такое ограничение крайне неудобно.Пример 2.Очистка группы регистровCLRF H’0C’ ; очищаем регистр 12CLRF H’0D’ ; и 13CLRF H’0E’ ; каждая командаCLRF H’0F’ ; занимает однуCLRF H’10’ ; ячейку памятиCLRF H’11’ ;……………. ;…………….. ;CLRF H’4E’ ; ячейка 78, еще чуть-чуть…CLRF H’4F’ ; и наконец 79…..уф!!!END ; конец программыНесмотря на то, что код работоспособен, он чрезвычайно неэффективен. Поскольку в памяти программ микроконтроллера PIC 1684 1024 ячейки, такое решение займет 7% памяти. Должен быть лучший способ!!!Команды инкрементирования и декрементированияСодержимое любого регистра данных можно уменьшить или увеличить на единицу.INCF f,dКоманда увеличивает на единицу содержимое регистра данных и помещает результат либо в рабочий регистр, либо в тот же регистр данных.DECF f,dКоманда уменьшает на единицу содержимое регистра данных и помещает результат либо в рабочий регистр, либо в тот же регистр данных.Пример:В регистре 26Н было записано 64Нпосле выполнения команды DECF H’26’,f в нем окажется 63Н. Обе команды не влияют на флаги переноса C и DC в отличие то эквивалентных команд прибавления или вычитания единицы. В частности, это означает, что при декременте 3х байтного числа, хранящегося в формате
UPPER
MIDDLE
LOW
просто декрементировать младший байт и контролировать заемы из среднего байта не получится. Нужно использовать команду анализа состояния флага Z , которая пропускает следующую, если Z устанавлен.
DECF REG_L,f ;вычитаем единицу из Low байт
BTFSS STATUS,Z ;ЕСЛИ результат не 0 (Z=0)
GOTO NEXT ; ТО выходим
DECF REG_M,f ;ИНАЧЕ декремент Middle байт
BTFSS STATUS,Z ;ЕСЛИ результат не 0 (Z=0)
GOTO NEXT ;ТО выходим
DECF REG_U,f ;декремент Up байтБит ориентированные командыВозможность сброса и установки отельного бита в любом регистре памяти данных очень важна , особенно при работе с командами передачи управления и работе с периферийными устройствами. BCF f,bКоманда позволяет программисту сбросить любой из восьми бит b указанного регистра f памяти данныхBSF f,bКоманда позволяет программисту установить любой из восьми бит b указанного регистра f памяти данныхПримерКоманда BSF H’25’,5 устанавливает 5 бит регистра 25h Одним из назнaчений данных команд является управление различными флагами и переключателями регистра STATUS:Пример 1:Инициализация порта ВBSF STATUS,RP0 ; установка page 1MOVLW B‘1111110’ ; настройка портаВMOVWF TRISB ; RB0-выход, остальные-входBCF STATUS,5 ; возврат на page 0
Пример 2:управление поворотом ротора шагового двигателя
На Рис. 7.1. изображен принцип работы шагового двигателя. В двигателе имеются четыре обмотки A, B, C и D которые могут возбуждаться поодиночке или попарно для формирования магнитного поля в одном из восьми направлений с шагом 450 . Так обмотка А формирует поле в направлении север, А+В - северо-восток, В- восток и т.д. Соответственно ротор вращается вслед за изменением направления магнитного поля, при условии, что конструкция двигателя обеспечивает стабилизацию положения ротора при разгоне и торможении. Коды управления обмотками шагового двигателя для всех восьми направлений магнитного поля приведены в табл. Рис. 2
Рис. 7.1. Формирование магнитного поля
Рис.7.2. Коды управления обмотками шагового двигателя
`Программа состоит из трех частей:
1. START ; Инициализация микроконтроллера, которая настраивает на выход RB[3:0]
2. S_COD; Загрузка кодов управления обмотками шагового двигателя в память данных микроконтроллера