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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 6
Зарегистрирован: Пт июн 12, 2009 14:38:46

Сообщение 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
и все....
хотя должен снова и снова повторять...
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

Вот тут ошибка. Сами найдёте?

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

...
cpi r18, 0b00000010 
lsr r18 
breq m3
...
Реклама
Родился
Сообщения: 6
Зарегистрирован: Пт июн 12, 2009 14:38:46

Сообщение roll »

а в чем ошибка?
по идеи - так:
...
cpi r18, 0b00000010 ;сравнение значений
lsr r18 ;логический сдвий в право
breq m3 ;переход к метке
...
Контактная информация:
Родился
Сообщения: 6
Зарегистрирован: Пт июн 12, 2009 14:38:46

Сообщение roll »

все, понял)

строки поменял местами - пашет)))
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 6
Зарегистрирован: Пт июн 12, 2009 14:38:46

Сообщение roll »

правда, есть двойная задержка в начале нового цикла...

не знаю как от нее избавится...
Контактная информация:
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»