Страница 1 из 1

помогите найти баг в коде

Добавлено: Вс июн 21, 2009 23:02:22
roll
пример из обучаловки - бегущий огонек на AT90s2313
собственно сам код:
.include "2313def.inc"

.cseg
.org 0
ldi r16, ramend
out spl, r16

ldi r17, 0b11111111
out ddrb, r17

m1: ldi r18, 0b00000001

m3: rcall func
cpi r18, 0b10000000
breq m2
lsl r18
rjmp m3
m2: rcall func
cpi r18, 0b00000010
lsr r18
breq m3
rjmp m2

func: out portb, r18
ldi r20, 0
ldi r21, 0
ldi r22, 10

l: dec r20
brne l
dec r21
brne l
dec r22
brne l

ret

трабла такая - огонек проходит только "туда и обратно":
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
01000000
00100000
00010000
00001000
00000100
00000010
00000001
и все....
хотя должен снова и снова повторять...

Добавлено: Пн июн 22, 2009 00:09:33
asteroid7
Вот тут ошибка. Сами найдёте?

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

...
cpi r18, 0b00000010 
lsr r18 
breq m3
...

Добавлено: Пн июн 22, 2009 00:13:55
roll
а в чем ошибка?
по идеи - так:
...
cpi r18, 0b00000010 ;сравнение значений
lsr r18 ;логический сдвий в право
breq m3 ;переход к метке
...

Добавлено: Пн июн 22, 2009 00:44:07
roll
все, понял)

строки поменял местами - пашет)))

Добавлено: Пн июн 22, 2009 00:53:02
roll
правда, есть двойная задержка в начале нового цикла...

не знаю как от нее избавится...