Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
TyomiMIT
1

Проблема с таймером на ассемблере

25.04.2013, 01:40. Просмотров 2518. Ответов 4
Метки нет (Все метки)

Всем доброго времени суток.
Я только начал изучать ассемблер. До этого работал только на C. Вроде все получается но есть одна проблема. Как я не крутил, я так и не смог запустить прерывания от таймера TCNT0 по переполнению. Самое интересное, что в эмуляторе в avr и протеусе все прерывается и тикает, но вот когда дело доходит до железа, то все. Прерываний нет.

Вот тот злосчастный код.

Код
.include "m8def.yms"
.equ k_div = 250;
.def rk_div = r16;
.def count = r17;
.def temp = r18;

rjmp RESIT;
.org 0x009;
rjmp TIMER0_OVF;

TIMER0_OVF:
cli
yms count
sbrs count,0       ;если счетчик нечетный, пропустить
sbr temp,0b01000010 ;иначе установить бит б
sbrc count,0       ;если счетчик четный, пропустить
cbr temp,0b01000010 ;иначе сбросить бит 6
out PortD,temp       ;вывести в порт D
out TCNT0,rK_div    ;"заряжаем" таймер
reti             ;конец прерывания таймера

Riset:
ldi temp,low(ROMEND);загрузка указателя стека
out SPL,temp
ldi temp,high(ROMEND);
out SPL,temp
ldi temp,0xff ;шестой разряд порта D на выход
out DDRD,temp
clr count          ;очищаем
clr temp          ;регистры
ldi temp,(1<<TOIE0) ;разр. прерывания TimerO
out TIMSK,temp
ldi rK_div,K_div    ;значение к. деления (250)
neg rK_div          ;256-K_div, т. к. счетчик суммирующий
out TCNT0,rK_div    ;"заряжаем" таймер
ldi temp,0b00000010 ;TimerO включить 1:8
out TCCR0,temp
sei

Cykle:
rjmp cykle

rjmp RESIT;
Если у кого найдется свободное время, прошу посмотрите на этот код, и скажите что я делаю неправильно.
Благодарю.

P.S На С все отлично работает. Но в данное время в силу стечения обстоятельств пришлось взяться за ассемблер.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2013, 01:40
Ответы с готовыми решениями:

Задача с таймером на Ассемблере
Необходимо написать программу для генерирования ТС1 временных меток длительностью 40 мс при Fosc =...

Проблема с таймером
Почему на Delphi XE4 в &quot;Таймере&quot; не работает следующий код: procedure TForm1.Timer1Timer(Sender:...

проблема с таймером 1
написал прогу в которой работает таймер1 в реале не рабоает, почему не понятно #include...

Проблема с таймером
Здравствуйте. Вылез подводный камень при работе с таймером. var timer = setTimeout(function...

4
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 699
25.04.2013, 03:21 2
Нужно так:

ldi temp,low(ROMEND);загрузка указателя стека
out SPL,temp
ldi temp,high(ROMEND);
out SPH,temp
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
25.04.2013, 09:45 3
И ещё совет - вместо попытки попасть в местоположение вектора - возьмите из даташита готовую таблицу векторов. Так нагляднее.
В теле ISR команда cli не нужна - прерывания и так запрещены. Зато, если надумаете делать что-то сложнее -обязательно надо будет сохранять на стек флаги. Иначе пойдут весёлые глючки.
0
TyomiMIT
25.04.2013, 10:29 4
Огромное спасибо вам! Особенно вам Леанид Ивинавич и вам Гарнист за советы. Все заработало. Я вчера целый вечер потратил, не понимая где ошибка, оказывается неправильно память инициализировал.
Еще раз спасибо.
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 181
26.04.2013, 15:33 5
Ну, не память, а указатель стека)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 15:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проблема с таймером
Здравствуйте. У меня проблемка. Есть такой код: using System; using System.IO; using...

Проблема с таймером =(
Я запускаю таймер в &quot;Form1_load&quot; пытаюсь остановить событии timer1_Tick, но условие не работает,...

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

проблема с таймером и прерыванием
Решил подключить к stm32vldiscovery двухразрядный семисегментный индикатор. Включить отдельно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.