памагите! attiny15l

Hi, All!

тут решил написать первую тестовую программку... подключил к самопальному программатору (провода, резисторы и рутина на паскале и асме). заработала девайсина. а вот программу тестовую я не осилил. помогите, кто может... где тут ошибка?

программа состоит из: главной части, где я пытаюсь проинициализировать все управляющие регистры (как я понимаю, io-registers). ставим прерывания по таймеру-0, таймер работает на частоте (1.6МГц / 1024). прерывание "делит" частоту на 250 и на 10. и "дёргает" ногами порта pb3, pb4.

=== Hачало tn15test.asm... === ; ─────────────────────────────────────────────────────────────────────── ; *** тестовая программа "мигалка" ; ─────────────────────────────────────────────────────────────────────── ; .include "tn15def.inc"

; *** объявляем константы .equ ck_tune =$8b ; байт калибровки частоты

; *** объявляем регистры .equ ddrb =$17 ; регистр функций portb .equ portb =$18 ; регистр portb .equ osccal =$31 ; регистр настройки частоты .equ tccr0 =$33 ; регистр управления tc0 .equ timsk =$39 ; регистр масок прерываний tc .equ gimsk =$3b ; регистр масок общих прерываний .equ sreg =$3f ; регистр состония

.def div250 =r16 ; .def div10 =r17 ; .def mask =r18 ; .def temp =r19 ; .def loader =r20 ;

; *** таблица векторов прерываний .cseg ; переходим на сегмент flash .org $0000 ; вектор начального сброса rjmp cold_start ; .org $0001 ; вектор внешнего прерывания 0 reti ; не назначено .org $0002 ; прерывание по изменению "пина" reti ; не назначено .org $0003 ; reti ; не назначено .org $0004 ; переполнение таймера 1 reti ; не назначено .org $0005 ; переполнение таймера 0 rjmp t0_int ; .org $0006 ; готовность eeprom reti ; не назначено .org $0007 ; компаратор reti ; не назначено .org $0008 ; преобразование a-to-d reti ; не назначено

; ─────────────────────────────────────────────────────────────────────── ; *** подпрограммы .cseg ; переходим на сегмент flash .org $0009 ; t0_int: dec div250 ; brne quit ; div_by_250: ldi div250, $fa ; dec div10 ; brne quit ; div_by_10: ldi div10, $0a ; changing_port: in temp, portb ; eor temp, mask ; andi temp, $18 ; out portb, temp ; quit: reti ;

; ─────────────────────────────────────────────────────────────────────── ; *** основной блок управляющей программы cold_start: ldi loader, ck_tune ; настройка частоты на 1.6MHz out osccal, loader ; ldi loader, $05 ; пределитель частоты на 1024 out tccr0, loader ; ldi loader, $02 ; прерывание по переполнению tc0 out timsk, loader ; sei ; разрешаем все прерывания xm0: ldi loader, $18 ; pb4, pb3 как выходы out ddrb, loader ; xm1: ldi div250, $fa ; ldi div10, $0a ; ldi mask, $ff ; ; endless: jmp endless ; зацикливаем программу

.exit ; === ...конец tn15test.asm. ===

oleg

Reply to
oleg dozhdev
Loading thread data ...

Здравствуйте

oleg dozhdev пишет:

самопальному

заработала

может... где тут

В AVRStudio (бесплатная) хорошо отлаживать. Только не работу с АЦП :(

проинициализировать все

прерывания по

"делит"

поскипал

───────────────────────────────────────────────────────────────────────

1600000/1024/256/250/10=0,00244140625 Гц или 409,6 с. почти 7 минут на пол цикла? А дождёшься? Надо настроить ещё TCNT0 (в AVRStudio, PDF нет под рукой) или как там его. В прочем может ты так и задумал.

Записал $ff - пол периода стало 1,6 секунды.

Настройки порта я не смотрел, ибо PDF нет под рукой.

jmp инструкции нет, есть rjmp - в AVRStudio по jmp сразу переходит на начало программы, а rjmp работает как надо.

Да, в начале т? закоментил .include "tn15def.inc", а потом часть регистров сам определял. Зря, помоему

С уважением, Шаповалов Алексей

Reply to
Shapovalov Alexey Ivanovich

Привет Shapovalov!

26 Apr 06 08:27, Shapovalov Alexey Ivanovich писал oleg dozhdev:

SI> jmp инструкции нет, есть rjmp - в AVRStudio по jmp сразу SI> переходит на начало программы,

Если команды нет, как же она по ней куда-то переходит? :)

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Аэроволны: ментол и эвкалипт для носа, мед и лимон для рота!

Reply to
Alex Mogilnikov

Здравствуйте

Alex Mogilnikov пишет:

Ну я же в AVRStudio смотрел - а это всё же не точная эмуляция процессора. А когда сам так лопухнулся - то проц по моему просто зависал (давно было, точно не помню).

С уважением, Шаповалов Алексей

Reply to
Shapovalov Alexey Ivanovich

Привет Shapovalov!

26 Apr 06 13:53, Shapovalov Alexey Ivanovich писал Alex Mogilnikov:

Вот мне и любопытно: она, встретив код несуществующей инструкции, показывает (дизассемблирует) ее как "jmp"? А при попытке выполнить эту инструкцию в симуляторе вместо сообщения о недопустимом коде инструкции выполняет переход на адрес 0? Я правильно понял?

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Программисты и программистки! Выше флаг промежуточного переноса!

Reply to
Alex Mogilnikov

Ну примерно. Дело в том что команда jmp в AT90 и Atmegах есть, компилятор ассемблера для всех семейств один, эмулятор AVRStudio тоже общий. А вот конкретно у Tyni15 - нет. Поеэтому ни ассемблер не ругается, ни AVRStudio (последняя хоть не правильно ее исполняет - и то хорошо). Так, кстати, еще с несколькими командами обстоит - я, например, как-то накололся на командах умножения - AVRStudio прекрасно их исполняла, а процессор реально вис :(. Так что по общему описанию команд семейства лучше не писать, а смотреть конкретную даташиту (о чем регулярно забываю). С уважением, Шаповалов Алексей

Reply to
Shapovalov Alexey Ivanovich

Привет Shapovalov!

27 Apr 06 08:40, Shapovalov Alexey Ivanovich писал Alex Mogilnikov:

Ассемблеру это еще можно простить, но симулятору-отладчику - нет. Это еще один минут Студии. А как с этим обстоят дела у gdb? Может имеет смысл перейти на него?

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Если долго думать одни и те же мысли, они становятся грязными.

Reply to
Alex Mogilnikov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.