Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
При арифметическом сдвиге все биты регистра сдвигаются вправо, при (том бит 7 не изменяется, а бит 0 загружается в флаг переноса (С). Как и флаг нуля, этот флаг расположен в регистре SREG. При логическом сдвиге вправо все биты регистра сдвигаются вправо, а 7-й бит сбрасывается в 0. Циклический сдвиг право осуществляется через флаг переноса, т.е. значение флага переноса заносится в 7-й бит, а 0-й бит исходного содержимого регистра загружается в флаг переноса. Все описанные операции проиллюстрированы на Рис. 8.
При изменении узора необходимо исключить появление на краях строки битов, установленных в 1, так как это приведет к несвоевременному включению краевых СИД, и требуемый узор будет нарушен. Из этого следует, что подойдут только команды lsl или lsr. Воспользуемся командой lsl, сдвигающей узор влево.
1. Нельзя применять команды сдвига lsl, lsr непосредственно к регистру PortB,поэтому потребуется считать текущее состояние светодиодов в регистр temp сдвинуть temp, а затем записать его обратно в PortB.
2. Перед пересылкой регистра temp в PortB проверяем, не вышли ли мы за границу строки (не был ли это уже восьмой сдвиг), и, если это так, сбросить PortB в исходное состояние (все выходы, кроме РВ0, выключены)
3. Возникновение этой ситуации можно контролировать, отслеживая состояние флага переноса, который установится в 1 при сдвиге единичного бита за пределы строки.
Для этого используется команда:
Дата публикования: 2015-02-03; Прочитано: 530 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!