Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с таймером
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Melnichiy
Добрый вечер всем!
Ппроблема в следующем - надумал выставлять задержки с помощью таймера 1 (SiLabs C8051F005), но:
1) при переполнении счетчика не выставляется флаг переполнения 07.gif
2) предположительно причина связана со строкой "sjmp $" , т.к. если ее удалить хоть и получается что возвращаемся из подпрограммы раньше, чем истекает счет, но тогда прерывание происходит
Вот и сам кусок кода:

keydelay:
setb ET1 ;Разрешаю прерывание таймера
mov TH1,#0FFh
mov TL1,#0F4h
setb TR1 ;Включаю счет
sjmp $
ret ;Возврат из подпрограммы

по вектору прерывания таймера 1 находится команда "reti"
Встречался ли кто с подобной проблемой, помогите, пожалуйста!
Всем заранее спасибо!
AndreyS
Добрый день.

Вы EA не возвели (разрешить перываниям работу).

И еще в обработчике таймера этого недостаточно (reti), надо как минимум перед выходом сбросить TF1 (в TCON).

Удачи.
редактор
Насколько я помню флаг TF1 сбрасывается аппаратно, при переходе на вектор прерывания.
Можно модернизировать программу и заменить sjmp$ на проверку бита и переход, тогда сброс флага необходим.
SALOME
Цитата(Melnichiy @ Jan 29 2008, 04:52) *
Добрый вечер всем!
Ппроблема в следующем - надумал выставлять задержки с помощью таймера 1 (SiLabs C8051F005), но:

Надо еще глянуть на настройку режима работы таймера.
Melnichiy
Цитата(AndreyS @ Jan 29 2008, 01:19) *
Вы EA не возвели (разрешить перываниям работу).

И еще в обработчике таймера этого недостаточно (reti), надо как минимум перед выходом сбросить TF1 (в TCON).


В том то и дело что я ранее взвел EA.

Цитата(редактор @ Jan 29 2008, 08:26) *
Можно модернизировать программу и заменить sjmp$ на проверку бита и переход, тогда сброс флага необходим.


Сделал так и все отлично заработало.

Цитата(SALOME @ Jan 29 2008, 09:46) *
Надо еще глянуть на настройку режима работы таймера.


Думаю проблема была с настройкой T2 (T2CON) а именно биты TCLK и RCLK - в даташите написано что при значении 1 соответствующего бита переполнения T2 используются как CLOCK для УАРТ а если 0, то переполнения T1.
Всем спасибо за советы!
AndreyS
Цитата(редактор @ Jan 29 2008, 08:26) *
Насколько я помню флаг TF1 сбрасывается аппаратно, при переходе на вектор прерывания.
Можно модернизировать программу и заменить sjmp$ на проверку бита и переход, тогда сброс флага необходим.



Добрый день.

Вы не правы по поводу флага.
Аппаратно тут сбрасывается всего первые 4 вектора (не включая вектора RESET). Это вектора внешних прерываний int0 и int1. И вектора таймеров timer0 и timer1.

Все остальные необходимо сбрасывать программно.

Единственное что мне непонтяно. Сбрасываются ли вектора XTLVLD, IE4, IE5, IE6 аппаратно. Об этом в документации я не нашел ничего.

Удачи
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.