Ассемблер (ASM) для AVR в вопросах и ответах
- Сообщения: 8
- Зарегистрирован: Пт июл 09, 2010 10:55:13
как на ассемблере в AvrStudio сбросить биты в регистре? Аналогично Сишному выражению PORTB &=(~(1 << PB2)). Ну только для РОН. Справа от знака равно все прокатывает, остается еще умножить на эту маску. При использовании "&" компилятор ругается. Использовать промежуточный регистр, а затем команду AND?
- Реклама
для сброса/установки бита РОН в асме есть спец команды
cbr/sbr
аналогично для РВВ
cbi/sbi
c - clear
s - set
cbr/sbr
аналогично для РВВ
cbi/sbi
c - clear
s - set
Вообще, их проще запоминать как сокращения:
SBI Set Bit in I/O Register
CBI Clear Bit in I/O Register
SBR Set Bit in Register
CBR Clear Bit in Register
SBI Set Bit in I/O Register
CBI Clear Bit in I/O Register
SBR Set Bit in Register
CBR Clear Bit in Register
Гы-гы-гы. НаСИльник, не знающий АСМа 
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 8
- Зарегистрирован: Пт июл 09, 2010 10:55:13
CBI/SBI для одного бита. А если я хочу сказать компилятору, чтобы сбросил сразу несколько указанных битов? Например, в даташите, для установки нескольких битов используется запись
Как сбросить?
Код: Выделить всё
LDI R16, (1<<PB2)|(1<<PB1)|(1<<PB0)
OUT PORTB, R16
- Реклама
аналогично, только в нужные разряды вместо 1 прописываешь 0
если делать кошерно, то
- читаем порт
- выключаем ненужные разряды
- пишем обратно в порт
тогда точно меняются только нужные разряды.
если делать кошерно, то
- читаем порт
- выключаем ненужные разряды
- пишем обратно в порт
тогда точно меняются только нужные разряды.
Может проще сразу 0F8h написать..sergy1976 писал(а):(1<<PB2)|(1<<PB1)|(1<<PB0)
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Неудобно, особенно если биты именованы, например:Может проще сразу 0F8h написать..
Код: Выделить всё
ldi r16,(1<<TXEN)|(1<<RXEN)|(1<<RXCIE)
out UCSRB,r16 Если кошерно:Как сбросить?
Код: Выделить всё
IN R16,PINB
ANDI R16, ~(1<<PB2)|(1<<PB1)|(1<<PB0)
OUT PORTB, R16- Сообщения: 336
- Зарегистрирован: Пн май 23, 2011 18:27:41
интересная мысльBVS писал(а):SBR то же ORI
CBR то же ANDI
т.е. бит и байт это одно и тоже
Наверно имеется ввиду то, что эти пары команд транслируются в один и тот же код (синонимы).GP1 писал(а):интересная мысльBVS писал(а):SBR то же ORI
CBR то же ANDI
т.е. бит и байт это одно и тоже
- Сообщения: 336
- Зарегистрирован: Пн май 23, 2011 18:27:41
вы sbr с sbi перепутали, а sbr и ori для процесора одна команда тоже и с cbr-andi
- Сообщения: 336
- Зарегистрирован: Пн май 23, 2011 18:27:41
Именно так. И cbr и инвертированный andi соответственноBVS писал(а):вы sbr с sbi перепутали, а sbr и ori для процесора одна команда тоже и с cbr-andi
Обратите внимание на коды каманд:
Код: Выделить всё
154: 00002B 6800 ori r16, 128
155: 00002C 6800 sbr r16, 128
156:
157: 00002D 770F andi r16, ~128
158: 00002E 770F cbr r16, 128
- Сообщения: 26
- Зарегистрирован: Пн июн 09, 2008 23:40:31
Atmega8. Прерывание INT0. Подскажите, что записать в регистры GICR и MCUCR чтобы получить прерывание INT0 по нарастанию сигнала? Спасибо!
А что в даташите пишут?lag1 писал(а):Atmega8. Прерывание INT0. Подскажите, что записать в регистры GICR и MCUCR чтобы получить прерывание INT0 по нарастанию сигнала?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Читать ДШGudd-Head писал(а): А что в даташите пишут?
Ёпт, действительно! Когда есть столько народу готового помочь.GP1 писал(а):Читать ДШ, это ж моск напрягать надо...
Это как часы — зачем их покупать и носить, когда на улице есть столько идиотов, с радостью готовых сказать который час.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Что ж вы сразу издеваться, может у человека с английским плохо
lag1, смотрите таблицу 31 на стр. 66 - последняя строка (там про биты MCUCR), сразу под ней описание GICR.
GICR= 0x40 MCUCR= 0x03
Docendo discimus



