- •Обучение : Программирование на Ассемблере для pic
- •Команды сложения и вычитания регистров
- •Команды определения бита
- •Команды взаимодействия c аккумулятором w
- •Команды сложения и вычитания констант
- •Команды очистки регистров f и w (обнуления)
- •Пустышки и метки
- •Команды переходов
- •Вопросы для самопроверки
- •Команды счётчики
- •Переход по событиям в счётчиках
- •Переход по результатам бит-проверки
- •Флаги как индикаторы событий
- •Команды сравнения
- •Команды сдвига битов в регистре
- •Сдвиг вправо битов в регистре rrf f, d сдвиг влево битов в регистре rlf f, d
Команды определения бита
Рассмотрим конструкцию 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. Казалось бы – глупость, но это не так. Этой командой проверяют значение регистра на равенство нулю. Как это делается – будет рассмотрено в частных случаях.
