Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на ассемблере для PIC.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
153.09 Кб
Скачать

Команды определения бита

Рассмотрим конструкцию XXXXX F,B где

XXXXX – слово команды + пробел;

F – имя или адрес какого-либо регистра, с которым будет работать команда;

B – номер бита в регистре, т.е. число от нуля до семи.

Мы знаем, что бит может принимать одно из двух значений, т.е. быть либо равен единице, либо равен нулю. Для упрощения говорят так: "установить бит", "устанавливается бит", "установлен бит", где под установкой понимают перевод бита в состояние "единица"; противоположная терминология – "опустить бит", "обнулить бит", "установить бит в ноль", "сбросить бит", т.е. перевести бит в состояние "ноль".

Команда УСТАНОВКИ БИТА в общем виде выглядит как BSF F,B

Команда ОБНУЛЕНИЯ БИТА в общем виде выглядит как BCF F,B

Команда BSF устанавливает бит в единицу.

Команда BCF опускает бит в ноль.

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

Если прочитали, то начнем управление первой ножкой МК и установим на ней высокий уровень сигнала. Нам надо установить единицу в нулевом бите в регистре PORTB.

BSF PORTB,NOGA1 ; запись с сопоставленными именами

BSF H0006,H0000 ; запись в числах

BSF H0006,0 ; еще вариант записи в другом формате

BSF PORTB,0 ; еще вариант записи в другом формате

А теперь несколько вариантов по установлению сигнала низкого уровня на восьмой ножке МК. Нам надо установить ноль в седьмом бите в регистре PORTB.

BCF PORTB,NOGA8 ; запись с сопоставленными именами

BCF H0006,H0007 ; запись в числах

BCF H0006,7 ; еще вариант записи в другом формате

BCF PORTB,7 ; еще вариант записи в другом формате

Надеюсь, что вы почувствовали разницу в написании.

Команды взаимодействия c аккумулятором w

Рассматривая Байт-ориентированные команды сложения и вычитания, мы говорили о регистре-посреднике – регистре-аккумуляторе W. Закономерен вопрос: каким образом записать число в регистр аккумулятор W ?

У нас есть три варианта:

1) в регистр W можно копировать число из другого регистра;

2) в регистр W можно записать число в диапазоне от 0 до 255;

3) в регистр W число может записаться в результате операции сложения или вычитания. Надеюсь, что байт-ориентированные команды усвоены.

Мы будем рассматривать 1й и 2й варианты. Строго говоря 2й вариант относится к операциям с константами. Но мы решили осветить его именно в этом месте, т.к. проще будет понять отличия. Дополнительно будет изучен вариант копирования числа из аккумулятора W в регистр.

Копировать в РЕГИСТР W число из регистра F MOVF F,W

Копировать в РЕГИСТР W обычное число MOVLW K

Копировать число из РЕГИСТРА W в регистр F MOVWF F

MOVF KLOP,W ; копировать в регистр W число из регистра KLOP

MOVLW .255 ; копировать в регистр W число 255

MOVWF KNOP ; копировать число из регистра W в регистр KNOP

Внимательно посмотрите на эти команды и почувствуйте разницу, т.е. поймите, какой командой можно скопировать число из регистра, а какой командой можно скопировать в W число – это разные вещи.

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

Есть случай записи команды "MOVF KLOP,F" , при этом результат помещается назад в регистр KLOP. Казалось бы – глупость, но это не так. Этой командой проверяют значение регистра на равенство нулю. Как это делается – будет рассмотрено в частных случаях.