Команды sbi и cbi - второй параметр - переменная?

Обсуждаем контроллеры компании Atmel.
Ответить
Сообщения: 13
Зарегистрирован: Вт авг 02, 2011 14:23:31

Сообщение Вечно начинающий »

С Новым годом! Надо полагать не все интенсивно "болеют" первого числа:)
Вопрос пока такой... Можно ли в ассемблере AVR вышеозначенным командам дать второй параметр, как переменную...
Дело в том, что в программе он должен меняться (номер пина порта) по результатам инкриминирования некоего регистра - допустим достигли какого-то числа в этом регистре - меняем пин порта...
И еще такой вопрос: если мы задали работу аналогового компаратора в инициализации (допустим внутреннее опорное наряжение, а на инвентирующий вход подаем напняжение с делителя - проверяем напряжение питающей батареи..) Так вот... если в процессе выполнения программы на эти пины (AIN0 и AIN1) контреллером "выбрасываются" нули, то повлияет ли это на работу компаратора? Или вопрос это же по другому: если задали компаратор, то имеет ли значение, что "пихаем" программой в соответствующие пины порта (порт B ATtiny 2313)...
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

Ну так команды УСТАНАВЛИВАЮТ и СБРАСЫВАЮТ БИТЫ!!!!! Какие тут могут быть переменные?
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Реклама
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Вечно начинающий писал(а):...если мы задали работу аналогового компаратора в инициализации (допустим внутреннее опорное наряжение, а на инвентирующий вход подаем напняжение с делителя - проверяем напряжение питающей батареи..) Так вот... если в процессе выполнения программы на эти пины (AIN0 и AIN1) контреллером "выбрасываются" нули, то повлияет ли это на работу компаратора? Или вопрос это же по другому: если задали компаратор, то имеет ли значение, что "пихаем" программой в соответствующие пины порта (порт B ATtiny 2313)...
Аналоговый компаратор не может влиять на состояние PB0 и PB1, по которым выводятся данные. Если битом ACBG регистра ACSR подключается встроенный опорник, то PB0 вообще отключается от компаратора и не будет влиять на его работу.
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

Вечно начинающий писал(а):Вопрос пока такой... Можно ли в ассемблере AVR вышеозначенным командам дать второй параметр, как переменную...
Дело в том, что в программе он должен меняться (номер пина порта) по результатам инкриминирования некоего регистра - допустим достигли какого-то числа в этом регистре - меняем пин порта...
Нет инструкции с переменным значением битов. Прийдется сначала считать значения битов (значение порта), потом выполнить модификации (and, or, eor) и снова вывести в порт. Например, так:

Код: Выделить всё

   in   r16, PORTA
   and r16, r17
   out  PORTA, r16
Все будет только лучше, в крайнем случае - хуже.
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 89
Зарегистрирован: Вт мар 31, 2015 01:12:46

Сообщение dumbass »

Добрый день! тоже есть вопрос по команде sbi.
Чего хочется: что бы кнопка на PD0 замкнулась и засветились два св-диода на PB6 и PB7.
код программы:
.include "tn2313def.inc"

;Инициализация портов
clr R16
out DDRD,R16
ser R16
out PORTD,R16

out DDRB,R16
clr R16
out PORTB,R16

;Основной цикл
MAIN: sbis PIND,PIND0
rjmp left
cbi PINB,7
cbi PINB,6
rjmp MAIN

left: sbi PINB,7
sbi PINB,6

rjmp MAIN

Вопрос такой: почему при НАЖАТОЙ кнопке, когда программа проходит тот же цикл во второй раз команда sbi PINB,7 сбрасывает 7-мой разряд в РВВ PORNB?
Изображение
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

dumbass писал(а):во второй раз команда sbi PINB,7 сбрасывает
Регистр PINx предназначен для считывания физического логического состояния на ножке МК, а не для изменения состояния порта. В относительно новых МК была добавлена функция, при записи 1 в PINx инвертируется состояние соответствующего бита соответствующего PORTx.

Запись 0 в PINx действия не оказывает.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Ответить

Вернуться в «AVR»