![]() | |
НПО Системы Безопасности (499)340-94-73 График работы: ПН-ПТ: 10:00-19:00 СБ-ВС: выходной ![]() ![]() |
Главная » Периодика » Безопасность 0 ... 118119120121122123124 ... 159 Для микроконтроллеров PIC 17СххиР1С ISCxx можно использовать команду subwfb: movlw LOW 0x01234 , Сначала вычитается младший байт bsf STATUS, С , Проверка заема subwfb Reg, f , Reg = Reg - w -С movlw HIGH 0x01234 subwfb Reg + 1, f , Reg + 1 = Reg + 1 - w - iС Усовершенствованные команды addwf с и subwfb могут применяться во всех операциях сложения и вычитания 16-разрядных величин, представленных ниже. При использовании этих команд сначала получается младший байт результата, а затем старший, что противоположно последовательности выполнения операций в программах микроконтроллеров младшего и старшего подсемейств. При выполнении сложения и вычитания 16-разрядной переменной результат будет сохранен в ячейках другой переменной: Destination = Source + 0x05678 Программа для PIC-микроконтроллеров младшего и старшего подсемейств имеет следующий вид: Сначала прибавляется старший байт Сохранение результата в старшем байте Destination Затем прибавляется младший байт Сохранение результата Флаг переноса установлен Да, инкрементируется старший , байт Сложение двух 16-разрядных неременных аналогично прибавлению константы к 16-разрядной переменной. Если приемник результата Destination совпадает с одной из величин, например: а = а -t- Ь, то фрагмент для PIC-микроконтроллеров младшего и среднего подсемейств имеет вид: movf b + 1 w Сложение старших байтов addwf а + 1 f
movf b, w , Сложение младших байтов addwf a f btfsc STATUS, С , Перенос прибавляется к старшему , байту incf а + 1, f Если приемник результата Destination не совпадает ни с одной из складываемых величин, например: с = а + Ь, го программа изменится. Промежуточные суммы будут располагаться в регистре w, а затем пересылаться в байты регистра с:
Вычитание выполняется аналогичным образом. Для осуществления операции с = а-Ь используется следующий код (для PIC-микроконтроллеров младшего и среднего подсемейств): movf b + 1, w , Загрузка вычитаемой , величины в регистр w , (старший байт) subwf а + 1, w , Формирование старшего байта movwf с + 1 movf b, w , Загрузка вычитаемой , величины в регистр w , (младший байт) subwf а, w movwf с btfss STATUS, С , Проверка переноса decf с + 1 ПОБИТОВЫЕ ОПЕРАЦИИ С КОНСТАНТАМИ И ПЕРЕМЕННЫМИ Код выполнения операции лог ическое И 1 б-разрядной переменной с константой 0х0А55А имеет следующий вид:
с переносом СРАВНЕНИЕ 16-РАЗРЯДНЫХ ПЕРЕМЕННЫХ Для сравнения чисел можно использовать следующий фрагмент: movf subwf movwf movf subwf btfss decf 2 + 1 + 1 Reg2 Regl 2 Reg2 w Regl, w STATUS, С Загрузка старшего байта Reg2 в w Вычитание из старшего байта Regl Сохранение результата 80 временном регистре Загрузка младшего байта Reg2 Вычитание из младшего байта Regl При необходимости старший байт уменьшается После выполнения данной последовательности команд регистр w содержит разность младших байтов ReglLo - Reg2Lo, а 2 - разность старших байтов ReglHi - Reg2Hi с учетом переноса (заема), сформировавшегося при нахождении разности Reg Но - Reg2Lo. В процессе работы можно столкнуться с шестью основными условиями: равно, не равно, больше, больше или равно, меньше, меньше или равно. В случае сравнения на «равно - не равно» содержимое регистра w подвергается операции логическое ИЛИ с содержимым регистра чтобы проверить, будет ли полученный результат равен 0: lorwf 2, w , Результат равен О 0 ... 118119120121122123124 ... 159 |