Обсуждаем контроллеры компании Atmel.
Ответить

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

Ср янв 01, 2014 11:53:42

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

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

Ср янв 01, 2014 13:14:00

Ну так команды УСТАНАВЛИВАЮТ и СБРАСЫВАЮТ БИТЫ!!!!! Какие тут могут быть переменные?

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

Ср янв 01, 2014 14:51:13

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

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

Ср янв 01, 2014 15:04:52

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

Нет инструкции с переменным значением битов. Прийдется сначала считать значения битов (значение порта), потом выполнить модификации (and, or, eor) и снова вывести в порт. Например, так:
Код:
   in   r16, PORTA
   and r16, r17
   out  PORTA, r16

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

Пт сен 01, 2017 17:23:02

Добрый день! тоже есть вопрос по команде 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?
Изображение

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

Пт сен 01, 2017 20:26:22

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

Запись 0 в PINx действия не оказывает.
Ответить