Страница 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
Хм... по программе ничего подобного происходить не должно... я предлагаю вам выложить весь проэкт(если конечно там нет ничего секретного :roll: ). Затем проверить подключаемую библиотеку на соответсвие номеров битов. Ну а дальше походу разберёмся.

Добавлено: Пн авг 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