Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 7. Система команд АVR 1 73 Противоположная по логике процедура записывается как sbrc (Skip if Bit in Register is Cleared, пропустить, если бит в регистре очищен, т. е. равен нулю). Упоминав­ шаяся ранее пара аналогичных команд: sЬis и sЬic - используется, когда нужно отследить состояние бита в регистре ввода/вывода, а не в РОН. Обе эти команды применимы, к сожалению, лишь к первым тридцати двум РВВ (до номера $ 1 F ) ­ для остальных приходится передавать их значение командой in в РОН и работать с ним, как с обычной переменной. Кроме этих двух наиболее часто употребляемых пар команд ( sЬis и sЬic, sbrs и sbrc ) , к группе команд проверки-пропуска относится оригинальная команда cpse, которая выполняет пропуск следующей команды при равенстве двух РОН. Она действует для всех РОН, потому может быть удобной в циклах по достижению оп­ ределенной величины, когда команду сравнения с константой cpi применить нельзя из-за того, что она не работает для первых 1 6 регистров . С помощью аналогичных команд sЬis / sЬic, действующих для РВВ, несколько ис­ кусственный алгоритм мигания по условию, приведенный ранее, можно переписать более компактно, отказавшись от регистра Flag вовсе и поставив конкретное усло­ вие мигания при удержании нажатой кнопки на выводе PD2 (листинг 7 . 7). Подклю­ чение этой кнопки показано на рис. 6 . 1 в главе 6. sЬic PinD , 2 ; если кнопка нажата , мигаем rjmp dark ; иначе гасим sЬis PortD , 7 ; если PD7=1 - красный, будем гореть зеленым rjmp set4 ; иначе красным сЬi PortD, 7 ; гасим красный sЬi PortB , 0 ; горим зеленым rjmp continue ; все готово set4 : ; если PD7=0 , будем гореть красным сЬi PortB , 0 ; гасим зеленый sЬi PortD , 7 ; горим красным rjmp continue ; вce готово dark : сЬi PortB , 0 ; гасим оба сЬi PortD, 7 continue : Обратите внимание на то, что проверка состояния выводов здесь проводится по­ разному: в команде sЬic PinD, 2 мы проверяем уровень, который установлен извне на выводе, работающем на вход. А в команде sЬis Porto , 7 - уровень, который мы до этого установили в порту сами, причем неважно, на выход или на вход установ­ лен вывод. Эту разницу в применении регистров Pinx и Portx в командах проверки­ пропуска sЬis / sЬic не следует забывать, иначе можно долго ковыряться, пытаясь понять, почему программа не работает.

RkJQdWJsaXNoZXIy MTExODQxMg==