Добрый день. Возникла проблема с таймером, при его включении на выходе PB2 включается выход схемы сравнения, правда я с этой проблемой столкнулся в симуляторе AVRstudio 4.8 возможно железо будет работать. Таймер конфигурирую примерно так
InitTim0:
ldi tmp,(1<<TOIE0)
out TIMSK,tmp
ldi tmp,$5
out TCCR0B,tmp
ret
прошу подскажите что делаю не так, заранее благодарю.
Хм... по программе ничего подобного происходить не должно... я предлагаю вам выложить весь проэкт(если конечно там нет ничего секретного ). Затем проверить подключаемую библиотеку на соответсвие номеров битов. Ну а дальше походу разберёмся.
There is only 10 kind of people: those who understands binary code and those who dont!!!
Ничего секретного нет просто я рещил попробовать слятать клавиатуру, с клавиатуры число должно передоваться на ПК. Я не волшебник я только учусь. Написал начало кода решил проверить в отладчике и вот завис . Вот сам кот
Есть грубейшая ошибка в программе: с метки RESET начинает выполняться основная программа, причем буквально сразу она ПЛАВНО ПЕРЕХОДИТ к выполнению обработчика прерываний OVF0, который завершается командой RETI, в результате которой наверняка произойдет "возврат" черти-куда. На метку MAIN программа не попадет никогда.
Возможно, причина странного поведения программы именно в этом.
P.S. И кто, скажите, учил вас NOP-ами забивать векторы прерываний в начале программы?! Блин, никакой пользы от этого нет, одно замусоривание программы!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
1-На кой столько NOPов?
2-Почему при инициализации таймера в TIMSK ноль?
3-Поменяй местами main и OVF0
4-И где наконец глобальное разрешение прерываний???
Невнимательно Баранова читаеш... Он хоть нопов и натыкал(я сам так делаю) но все подпрограммы и обработчики прерываний записывает после основной программы. Строй программы так, чтобы у тебя в обработчике Ресета была инициализация всего-всего(можно вызов процедур, но ИМХО необязательно(настройка перферии и т.д.)) потом после настройки метка Main и сразу-же поставь rjmp Main, а потом между этими двумя строками пиши основную программу а все подпрограммы пиши после rjmp Main. Также не забывай, что таймер начинает считать сразу после настройки пределителя, а перейти на прерывание сможет, как правильно заметили товарищи, только после глобального разрешения прерываний. И если настроить таймер а потом ещё кучу девайсов настраивать, то может наступить момент, когда обработчик прерываний запустится до окончания настройки переферии. А оно тебе надо? Так что таймер настраивать в самую последнюю очередь, а перед меткой main ставить глобальное рарешение прерываний самое оно.
примерно так: