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

Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 19:00:11
FUZZY_
Принялся за изучение ассемблера для tiny10
Столкнулся с проблемой - не выполняется команда в 299 строчке
если закоментировать команду nop в 298 строчке то све работает

на PB1 , PB0 включены светодиоды

Прерывание таймера 0 управляет яркостью на PB1 - работает нормально

В основной програме необходимо помигать на PB0 - но тут загвоздка - не выполняется команда

299 cbi PORTB,PB0

Подскажите советом

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 19:09:10
ploop
Не понял, а как вы догадались, что не работает?

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 19:10:24
Kavka
А как вы определили, что она не выполняется?

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 19:19:14
FUZZY_
На макетке проверил:
---------------------------------------------------------------------------------------
sbi PORTB,PB0 ;<----зажечь светодиод (Зажигается)

; Тут крутится цикл главной прораммы

loop:
;===============
nop ;<-- тут работает если закоментировать nop
cbi PORTB,PB0 ;<--- а тут уже не работает команда не выполняется (в этой позиции не гасится)
nop

;================
rjmp loop

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 19:22:11
ploop
необходимо помигать
А где же там мигание? Там включение его в цикле, и всё

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 19:28:16
FUZZY_
Да
Перед вхождением в цикл он включается

А в цикле он должен быть выключен - но не выключается на макетке

(Все лишнее (мигание светодиода ) было убрано для определения точки с которой не работает)

Другой светодиод горит с заданой яркостью что говорит о том что прерывание таймера обрабатывается

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 20:17:37
Kavka
Хмм. Дельных идей, что-то нет.
Может WDT чем насолил - в каком состоянии WDTON fuse?

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 20:35:19
ploop
Отключи прерывания закомменти настройки вачдога. Проверь, гаснет ли светодиод.

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 21:46:41
FUZZY_
WDTR отключен вначале вообще вначале обработчика RESET


WDT_off:
wdr
; Clear WDRF in RSTFLR
in r16, RSTFLR
andi r16, ~(1<<WDRF)
out RSTFLR, r16
; Write signature for change enable of protected I/O register
ldi r16, 0xD8
out CCP, r16
; Within four instruction cycles, turn off WDT
ldi r16, (0<<WDE)
out WDTCSR, r16


Светодиод гаснет если закоментировать первую команду nop в строке 298 - это я писал выше

Такое ощущение что на команде nop контролер зацикливается что-то вроде (rjmp $)

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 22:06:45
FUZZY_
000047 9a10 sbi PORTB,PB0


loop:
000048 0000 nop
000049 9810 cbi PORTB,PB0
00004a 0000 nop


00004b cffc rjmp loop <------- ???????? - вот что выдал компилятор [ CF FC ]


код команды rjmp -> c0
адрес перехода адрес loop

aа что за хрень [ CF FC ] ????????

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Чт янв 26, 2012 23:08:50
ploop
aа что за хрень [ CF FC ] ????????
C - rjmp (относительный прыжок)
FFC - прыгнуть назад на 2 слова (FFF = -1, FFC = -2)

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Пт янв 27, 2012 16:50:13
BOB51
tini10 - довольно хитрый чип... требуется последняя версия описания команд...
посмотрю попозже чего там, жаль "живьем" поглядеть не начто...

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Пт янв 27, 2012 18:30:53
BOB51
Начнем с того, что этот фрагмент только погасит светик (при условии, что светящемуся соответствует 1 на PB0):
« sei ;разрешили прерывания
sbi PORTB,PB0 ;<----зажечь светодиод
;--------------------------------------------------------------------
; Тут крутится цикл главной прораммы
;--------------------------------------------------------------------
loop:
nop ;<-- тут работает если закоментировать nop
cbi PORTB,PB0 ;<--- а тут уже не работает команда не выполняется
nop

;================
rjmp loop

«
И если светик после этого мигает – явно мы имеем дело с «глюком».
Второе замечание :
Длина программного кода не должна превышать 512 слов!
(512 простых 2-байтовых команд )

Иначе программа «пойдет по кругу»=reset.
Вписаться в такое количество слов (команд) на сложных программах весьма трудоемко :cry:
Советую проверить листинг транслятора (мне сложно определить – часть команд «закомментирована») – если судить по эффекту – возможно как раз «исчерпание физической памяти» - убрал лишнюю команду и «вписался» в последний байт…
:beer:

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Пт янв 27, 2012 18:51:51
ploop
Длина программного кода не должна превышать 512 слов!
А транслятор идиот что-ли? Он больше и не пропустит.

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Пт янв 27, 2012 19:02:28
Kavka
А компилятору то сообщили, что надо для тини10 код генерить?
И вы ссылаетесь в коде на RAMEND, а где он определён?
И где подключение tn10def.inc? Закоментарено...

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Пт янв 27, 2012 19:05:24
ploop
И где подключение tn10def.inc? Закоментарено...
Ааа... точно. На это внимание не обратил.
Но без этого не откомпилилось бы вообще, т.к. он не нашел бы ни одного идентификатора...

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Сб янв 28, 2012 11:11:51
BOB51
на первых тестах все может быть - тем более на этих кристаллах (tiny10) новый принцип организации памяти применен - тут только проверять заведомо проверенными тестами (без "наворотов") и контролировать на макете...
увы- пока сам возможности проверить макетом не имею... :cry:

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Сб янв 28, 2012 11:51:07
FUZZY_
По поводу компилятора:

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Сб янв 28, 2012 13:32:45
FUZZY_
Вот немного измененая программа .

В преривании убраны команды cli sei - что было причиной непонятности работы

светодиод должен менять яркость от мах bri=1 до min bri=99 затем от min до max
и так далее...

но опять глюк:

Один светодиод меняет яркость от мах до выключения (хотя выключатся не должен)

другой мигает -ок

Привожу код

Re: Асемблерные непонятки ( tiny10 не выполнение команды)

Добавлено: Пн янв 30, 2012 20:37:13
FUZZY_
Причина банальна при входе в прерывание не сохранялся регистр sreg

Все заработало