реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
Melnichiy
сообщение Jan 28 2008, 21:52
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 14-10-07
Из: Москва
Пользователь №: 31 341



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

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

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

Сообщение отредактировал Melnichiy - Jan 28 2008, 21:55
Go to the top of the page
 
+Quote Post
AndreyS
сообщение Jan 28 2008, 22:19
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276



Добрый день.

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

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

Удачи.


--------------------
Удачи.
Go to the top of the page
 
+Quote Post
редактор
сообщение Jan 29 2008, 05:26
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Насколько я помню флаг TF1 сбрасывается аппаратно, при переходе на вектор прерывания.
Можно модернизировать программу и заменить sjmp$ на проверку бита и переход, тогда сброс флага необходим.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
SALOME
сообщение Jan 29 2008, 06:46
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



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

Надо еще глянуть на настройку режима работы таймера.


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
Melnichiy
сообщение Jan 29 2008, 11:34
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 14-10-07
Из: Москва
Пользователь №: 31 341



Цитата(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.
Всем спасибо за советы!

Сообщение отредактировал Melnichiy - Jan 29 2008, 11:35
Go to the top of the page
 
+Quote Post
AndreyS
сообщение Jan 30 2008, 18:53
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276



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



Добрый день.

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

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

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

Удачи


--------------------
Удачи.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th July 2025 - 04:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016