TyomiMIT
|
|
1 | |
Проблема с таймером на ассемблере25.04.2013, 01:40. Показов 2913. Ответов 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 На С все отлично работает. Но в данное время в силу стечения обстоятельств пришлось взяться за ассемблер. |
25.04.2013, 01:40 | |
Ответы с готовыми решениями:
4
Задача с таймером на Ассемблере Проблема с таймером Проблема с таймером Проблема с таймером проблема с таймером 1 |
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
|
26.04.2013, 15:33 | |
Помогаю со студенческими работами здесь
5
Проблема с таймером =( Проблема с таймером проблема с таймером Проблема с таймером проблема с таймером и прерыванием Проблема с таймером 8051 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |