roboforum.ru

Технический форум по робототехнике.

Странного хочу. Примерчик на asm'е.

Странного хочу. Примерчик на asm'е.

Pegasus » 15 авг 2005, 14:00

Доброго времени суток.
Вобчем начал разбираться с асмом для АВР.
хочу сделать простое - один порт разделить пополам, половина выходы половина входы (это получается), на один вход поставить кнопочку, и что бы при нажатии на неё один из выходов устанавливался в 0 (при инициализации стоит 1). На входах подтягивающие резюки включены (те которые внутри). Получается совсем просто: то что на входе надо передать на выход.
Не хватает опыта :(.

P.S. Чес слово я не тупой :).
P.S. Надо простой пример в 10-15 строчек (я думаю многие с этого начинали)

Вобчем дошёл до этого:
Код: Выделить всёРазвернуть
.INCLUDE "m8def.inc"   ; Определение имен для регистров
.DEVICE ATmega8         ; Определяем устройство - ATmega8

.DSEG               ; Сегмент данных (ОЗУ)

.ESEG               ; Сегрмент EEPROM

.CSEG               ; Программный сегмент

   ldi r16, 0b00001111
   out DDRB, r16

   ldi r16, 0b11111111
   out PORTB, r16

loop:
   
   in r16, PINB
   bst r16, 4
   brts loop1
   sbi PORTB, PB0
   rjmp loop2

loop1:
   cbi PORTB, PB0

loop2:
   nop
   nop
   rjmp loop

Думаю тут есть что оптимизировать, посоветуйте.

setar » 16 авг 2005, 13:08

:? совсем мало времени, если никто не подскажет тогда я отпишусь.

setar » 18 авг 2005, 17:43

молчат все, ладно сейчас сообразим что нить,
сам то какие продвижки сделал ?

Pegasus » 19 авг 2005, 06:47

Я нашёл команды SBIS и SBIC, т.е. не надо выдёргивать бит из регистра.

Есть две команды, установить бит в порту ввода-вывода и сбросить бить в порту ввода вывода, а есть ли команда с двумя операндами сделать бит в порту равным 0 если второй операнд 0, и 1 в противном случае? - это вопрос номер раз
Вопрос номер two - Есть ли возможность установить бит в порту равным биту в другом порту?

И ещё - не нашёл побитного НЕ, логическое нашёл. Также не нашёл побитного И. Или я не туда смотрел?

--- поправки
побитное НЕ нашёл - com
---

P.S. сильно ногами не пинать, новичок я, но х86 асм знаю.

setar » 19 авг 2005, 14:33

Pegasus писал(а):Я нашёл команды SBIS и SBIC, т.е. не надо выдёргивать бит из регистра.

всё верно
Есть две команды, установить бит в порту ввода-вывода и сбросить бить в порту ввода вывода, а есть ли команда с двумя операндами сделать бит в порту равным 0 если второй операнд 0, и 1 в противном случае? - это вопрос номер раз

Логические команды юзай
Это AND
ещё активно XOR применяется - битовые маски
Вопрос номер two - Есть ли возможность установить бит в порту равным биту в другом порту?

маска AND в буфер, затем маска OR
И ещё - не нашёл побитного НЕ, логическое нашёл. Также не нашёл побитного И. Или я не туда смотрел?

--- поправки
побитное НЕ нашёл - com
---

P.S. сильно ногами не пинать, новичок я, но х86 асм знаю.

да нормально, я тоже навичёк, хоть и проги большие писал,
это так быстро забывается , за месяц!

Mike_MA » 14 сен 2005, 12:46

Как то на форуме "Точка опоры " я давал примеры для AVR" типа "как надо писать " под него.

Сейчас конечно могу поискать ссылочку....

Mike_MA » 14 сен 2005, 12:57

Вот например примерно тоже самое обсуждалось здесь:
http://www.fulcrum.ru/cgi-bin/bbs/mess_sel_i.pl?v=i&FID=1&TID=2468&page=&Sp=0&LID=0


Rambler\'s Top100 Mail.ru counter