Асемблерные непонятки ( tiny10 не выполнение команды)
Асемблерные непонятки ( tiny10 не выполнение команды)
Принялся за изучение ассемблера для tiny10
Столкнулся с проблемой - не выполняется команда в 299 строчке
если закоментировать команду nop в 298 строчке то све работает
на PB1 , PB0 включены светодиоды
Прерывание таймера 0 управляет яркостью на PB1 - работает нормально
В основной програме необходимо помигать на PB0 - но тут загвоздка - не выполняется команда
299 cbi PORTB,PB0
Подскажите советом
Столкнулся с проблемой - не выполняется команда в 299 строчке
если закоментировать команду nop в 298 строчке то све работает
на PB1 , PB0 включены светодиоды
Прерывание таймера 0 управляет яркостью на PB1 - работает нормально
В основной програме необходимо помигать на PB0 - но тут загвоздка - не выполняется команда
299 cbi PORTB,PB0
Подскажите советом
- Вложения
-
- ATTiny10.asm
- (13.71 КБ) 396 скачиваний
- Реклама
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
Не понял, а как вы догадались, что не работает?
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
А как вы определили, что она не выполняется?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
На макетке проверил:
---------------------------------------------------------------------------------------
sbi PORTB,PB0 ;<----зажечь светодиод (Зажигается)
; Тут крутится цикл главной прораммы
loop:
;===============
nop ;<-- тут работает если закоментировать nop
cbi PORTB,PB0 ;<--- а тут уже не работает команда не выполняется (в этой позиции не гасится)
nop
;================
rjmp loop
---------------------------------------------------------------------------------------
sbi PORTB,PB0 ;<----зажечь светодиод (Зажигается)
; Тут крутится цикл главной прораммы
loop:
;===============
nop ;<-- тут работает если закоментировать nop
cbi PORTB,PB0 ;<--- а тут уже не работает команда не выполняется (в этой позиции не гасится)
nop
;================
rjmp loop
Последний раз редактировалось FUZZY_ Чт янв 26, 2012 19:24:04, всего редактировалось 1 раз.
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
А где же там мигание? Там включение его в цикле, и всёнеобходимо помигать
- Реклама
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
Да
Перед вхождением в цикл он включается
А в цикле он должен быть выключен - но не выключается на макетке
(Все лишнее (мигание светодиода ) было убрано для определения точки с которой не работает)
Другой светодиод горит с заданой яркостью что говорит о том что прерывание таймера обрабатывается
Перед вхождением в цикл он включается
А в цикле он должен быть выключен - но не выключается на макетке
(Все лишнее (мигание светодиода ) было убрано для определения точки с которой не работает)
Другой светодиод горит с заданой яркостью что говорит о том что прерывание таймера обрабатывается
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
Хмм. Дельных идей, что-то нет.
Может WDT чем насолил - в каком состоянии WDTON fuse?
Может WDT чем насолил - в каком состоянии WDTON fuse?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
Отключи прерывания закомменти настройки вачдога. Проверь, гаснет ли светодиод.
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
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 $)
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 не выполнение команды)
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 ] ????????
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 не выполнение команды)
C - rjmp (относительный прыжок)aа что за хрень [ CF FC ] ????????
FFC - прыгнуть назад на 2 слова (FFF = -1, FFC = -2)
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
tini10 - довольно хитрый чип... требуется последняя версия описания команд...
посмотрю попозже чего там, жаль "живьем" поглядеть не начто...
посмотрю попозже чего там, жаль "живьем" поглядеть не начто...
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
Начнем с того, что этот фрагмент только погасит светик (при условии, что светящемуся соответствует 1 на PB0):
« sei ;разрешили прерывания
sbi PORTB,PB0 ;<----зажечь светодиод
;--------------------------------------------------------------------
; Тут крутится цикл главной прораммы
;--------------------------------------------------------------------
loop:
nop ;<-- тут работает если закоментировать nop
cbi PORTB,PB0 ;<--- а тут уже не работает команда не выполняется
nop
;================
rjmp loop
«
И если светик после этого мигает – явно мы имеем дело с «глюком».
Второе замечание :
Длина программного кода не должна превышать 512 слов!
(512 простых 2-байтовых команд )
Иначе программа «пойдет по кругу»=reset.
Вписаться в такое количество слов (команд) на сложных программах весьма трудоемко
Советую проверить листинг транслятора (мне сложно определить – часть команд «закомментирована») – если судить по эффекту – возможно как раз «исчерпание физической памяти» - убрал лишнюю команду и «вписался» в последний байт…

« sei ;разрешили прерывания
sbi PORTB,PB0 ;<----зажечь светодиод
;--------------------------------------------------------------------
; Тут крутится цикл главной прораммы
;--------------------------------------------------------------------
loop:
nop ;<-- тут работает если закоментировать nop
cbi PORTB,PB0 ;<--- а тут уже не работает команда не выполняется
nop
;================
rjmp loop
«
И если светик после этого мигает – явно мы имеем дело с «глюком».
Второе замечание :
Длина программного кода не должна превышать 512 слов!
(512 простых 2-байтовых команд )
Иначе программа «пойдет по кругу»=reset.
Вписаться в такое количество слов (команд) на сложных программах весьма трудоемко
Советую проверить листинг транслятора (мне сложно определить – часть команд «закомментирована») – если судить по эффекту – возможно как раз «исчерпание физической памяти» - убрал лишнюю команду и «вписался» в последний байт…
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
А транслятор идиот что-ли? Он больше и не пропустит.Длина программного кода не должна превышать 512 слов!
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
А компилятору то сообщили, что надо для тини10 код генерить?
И вы ссылаетесь в коде на RAMEND, а где он определён?
И где подключение tn10def.inc? Закоментарено...
И вы ссылаетесь в коде на RAMEND, а где он определён?
И где подключение tn10def.inc? Закоментарено...
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
Ааа... точно. На это внимание не обратил.И где подключение tn10def.inc? Закоментарено...
Но без этого не откомпилилось бы вообще, т.к. он не нашел бы ни одного идентификатора...
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
на первых тестах все может быть - тем более на этих кристаллах (tiny10) новый принцип организации памяти применен - тут только проверять заведомо проверенными тестами (без "наворотов") и контролировать на макете...
увы- пока сам возможности проверить макетом не имею...
увы- пока сам возможности проверить макетом не имею...
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
По поводу компилятора:
- Вложения
-
- make.jpg
- (24.44 КБ) 270 скачиваний
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
Вот немного измененая программа .
В преривании убраны команды cli sei - что было причиной непонятности работы
светодиод должен менять яркость от мах bri=1 до min bri=99 затем от min до max
и так далее...
но опять глюк:
Один светодиод меняет яркость от мах до выключения (хотя выключатся не должен)
другой мигает -ок
Привожу код
В преривании убраны команды cli sei - что было причиной непонятности работы
светодиод должен менять яркость от мах bri=1 до min bri=99 затем от min до max
и так далее...
но опять глюк:
Один светодиод меняет яркость от мах до выключения (хотя выключатся не должен)
другой мигает -ок
Привожу код
- Вложения
-
- ATTiny10.asm
- (8.12 КБ) 422 скачивания
Re: Асемблерные непонятки ( tiny10 не выполнение команды)
Причина банальна при входе в прерывание не сохранялся регистр sreg
Все заработало
Все заработало


