Ревич, Ю.В. Программирование микроконтроллеров 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 ( выражение ) - возвращает четвертый бай � выражения.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==