памагите! attiny15l

Apr 21, 2006 Last reply: 20 years ago 6 Replies

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


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

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", а потом часть регистров сам определял. Зря, помоему

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

Привет Shapovalov!

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

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

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

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

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

Alex Mogilnikov пишет:

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

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

Привет Shapovalov!

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

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

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

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

Привет Shapovalov!

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

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

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required