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

124 Часть //. Программирование микроконтроллеров АVR на ассемблере влево на п двоичных разрядов . В совокупности с побитовым ИЛИ (« 1 ») операцию эту удобно применять для установки поименованных битов сразу «всей кучей» - например : ldi temp , ( l<<INT O ) 1 ( l<<INTl ) out GIMSK , temp Эта последовательность операторов установит разрешение двух прерываний : INTO и INТl - в один прием. Запись 1«INТO означает число 1, сдвинутое на INТO разрядов влево, т. е. оказавшееся в позиции INТO . Можно устанавливать сразу два и более бита, если они идут подряд: например, запись ldi temp , ( З«INТО ) равносильна записи ldi temp , ( l«INТO ) 1 ( l«INТl ) , причем указывать нужно самый младший бит. Раздельная запись лучше читается и употребляется чаще. Вместо логического побитного сложения « 1 », кстати, в этом случае можно применить обычное ариф­ метическое «+» . Скобки в выражениях используются по тем же правилам, что и в обычной алгеб­ ре, - для явного указания старшинства операций. Старшинство (приоритет) опе­ раций соответствует их положению в таблице, приведенной в описании АVR­ ассемблера (чем ниже положение, тем приоритет выше). В приведенном только что примере при указании единственного знака логического побитного сложения скоб­ ки можно не ставить. Однако при записи нескольких операций подряд лучше не разбираться в старшинстве, чтобы не плодить источники возможных ошибок, и всегда использовать скобки. В выражениях можно употреблять некоторые стандартные функции . Подчеркнем, что эти функции - свойство самого ассемблера, и выполняются они в процессе подготовки текста программы к компиляции. Для вычисления по ходу программы различных функций переменных (синуса, экспоненты и т. п. ) в языках высокого уровня есть готовые стандартные операторы, но в ассемблере придется реализовы­ вать их самостоятельно. Из доступных функций (их достаточно много, - см. [8]) наибольшее практическое значение имеют те, что предназначены для выделения отдельных байтов из кон­ стант или результатов вычислений, если эти результаты размером более одного байта. Наиболее часто из них употребляются функции Low (выделяет младший байт из многобайтового числа) и High (выделяет второй байт, если число двухбайтовое, то он же старший). Например, загрузка значения 62 s o o в регистры сравнения тай­ мера-счетчика Timer l может происходить так: ldi temp , high ( 625 0 0 ) out OCRlAН , temp ldi temp , low ( 625 0 0 ) out OCRlAL , temp Если число имеет размер, больший 1 6 битов, то можно воспользоваться функция­ ми: ВУТЕЗ ( выражение ) - возвращает третий байт выражения И ВУТЕ4 ( выражение ) - возвращает четвертый бай � выражения.

RkJQdWJsaXNoZXIy MTExODQxMg==