Страница 1 из 1
ATtiny2313 : Таймер Т0
Добавлено: Вс авг 19, 2007 18:39:17
Georg
Добрый день. Возникла проблема с таймером, при его включении на выходе PB2 включается выход схемы сравнения, правда я с этой проблемой столкнулся в симуляторе AVRstudio 4.8 возможно железо будет работать. Таймер конфигурирую примерно так
InitTim0:
ldi tmp,(1<<TOIE0)
out TIMSK,tmp
ldi tmp,$5
out TCCR0B,tmp
ret
прошу подскажите что делаю не так, заранее благодарю.
Добавлено: Пн авг 20, 2007 13:32:43
Negor
Хм... по программе ничего подобного происходить не должно... я предлагаю вам выложить весь проэкт(если конечно там нет ничего секретного

). Затем проверить подключаемую библиотеку на соответсвие номеров битов. Ну а дальше походу разберёмся.
Добавлено: Пн авг 20, 2007 20:04:09
Georg
Ничего секретного нет просто я рещил попробовать слятать клавиатуру, с клавиатуры число должно передоваться на ПК. Я не волшебник я только учусь. Написал начало кода решил проверить в отладчике и вот завис . Вот сам кот
Добавлено: Пн авг 20, 2007 20:08:17
Мышонок
Georg, в следующий раз прошу длинные листинги прицеплять к сообщению вложенным файлом, при необходимости - архивом. Так будет всем удобнее.

Добавлено: Пн авг 20, 2007 20:22:34
Georg
Извеняюсь, исправлюсь :)
Не "исправлюсь", а "исправлю". Кнопка "правка" всегда в наличии!
Сэр Мурр, модератор .
Добавлено: Пн авг 20, 2007 20:42:05
ARV
Есть грубейшая ошибка в программе: с метки RESET начинает выполняться основная программа, причем буквально сразу она ПЛАВНО ПЕРЕХОДИТ к выполнению обработчика прерываний OVF0, который завершается командой RETI, в результате которой наверняка произойдет "возврат" черти-куда. На метку MAIN программа не попадет никогда.
Возможно, причина странного поведения программы именно в этом.
P.S. И кто, скажите, учил вас NOP-ами забивать векторы прерываний в начале программы?! Блин, никакой пользы от этого нет, одно замусоривание программы!
Добавлено: Пн авг 20, 2007 22:21:02
Mr.Moss
1-На кой столько NOPов?
2-Почему при инициализации таймера в TIMSK ноль?
3-Поменяй местами main и OVF0
4-И где наконец глобальное разрешение прерываний???
Добавлено: Пн авг 20, 2007 22:30:10
Georg
На счет NOP-ов то этому научился у В. Н. Баранова, а за советы спасибо буду пробовать применять.
Добавлено: Пн авг 20, 2007 23:49:30
Negor
Невнимательно Баранова читаеш... Он хоть нопов и натыкал(я сам так делаю) но все подпрограммы и обработчики прерываний записывает после основной программы. Строй программы так, чтобы у тебя в обработчике Ресета была инициализация всего-всего(можно вызов процедур, но ИМХО необязательно(настройка перферии и т.д.)) потом после настройки метка Main и сразу-же поставь rjmp Main, а потом между этими двумя строками пиши основную программу а все подпрограммы пиши после rjmp Main. Также не забывай, что таймер начинает считать сразу после настройки пределителя, а перейти на прерывание сможет, как правильно заметили товарищи, только после глобального разрешения прерываний. И если настроить таймер а потом ещё кучу девайсов настраивать, то может наступить момент, когда обработчик прерываний запустится до окончания настройки переферии. А оно тебе надо? Так что таймер настраивать в самую последнюю очередь, а перед меткой main ставить глобальное рарешение прерываний самое оно.
примерно так:
Код: Выделить всё
RESET:
;Initsializatsiya
rcall InitUart
rcall InitPort
rcall InitRow
rcall InitCol
rcall InitTimer0
sei
main:
nop
nop
nop
rjmp main