Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 15.02.2017, 12:39   #1
Lexus
Member
 
Регистрация: 17.12.2007
Возраст: 37
Сообщений: 90
Вес репутации: 100/36
Lexus will become famous soon enoughLexus will become famous soon enough
По умолчанию Проблема с таймерами на PIC16F873

Доброго времени суток.

Проблема такова.
При запуске TMR2, вместе с ним включается TMR0.

Немного по программе:
На TMR0 сделана динамическая индикация. На TMR2 генератор.
Когда по программе включается генератор, индикация не нужна, я ее отключаю.

Бьюсь уже несколько дней. На мой взгляд, испробовал все что можно.

После команд:
Код:
	bcf	INTCON, T0IE
	bcf	INTCON, T0IF
............ Задаю параметры для TMR2 ...............
	bsf	T2CON, TMR2ON
включается TMR0

Пробовал, после включения TMR2, отключать TMR0
Код:
	bsf	T2CON, TMR2ON
	bcf	INTCON, T0IE
	bcf	INTCON, T0IF
эффект нулевой.

Обработчик прерывания выглядит так:
Код:
.................
	btfss	INTCON, T0IF	
	goto	T2Int			
T0Int:				
	bcf	INTCON, T0IF	
............. Делаем индикацию ...............
	goto	SkipInt		

T2Int:				
	bcf	PIR1, TMR2IF	
.............. Выдаем импульс .................
SkipInt:
Что не так то?

Буду рад помощи.
Lexus вне форума   Ответить с цитированием
Старый 15.02.2017, 12:50   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 30
Сообщений: 1,314
Вес репутации: 2626/57
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Проблема с таймерами на PIC16F873

Lexus
у timer0 в пике, что Вы предпочли, нет возможности выключения, он всегда включен.
манипуляции с включением/выключением прерывания timer0 никак не влияют на факт того, что timer0 всегда включен.

в прерывании проверяйте разрешено ли прерывание timer0 и флаг timer0.
besogon вне форума   Ответить с цитированием
Старый 15.02.2017, 12:57   #3
Lexus
Member
 
Регистрация: 17.12.2007
Возраст: 37
Сообщений: 90
Вес репутации: 100/36
Lexus will become famous soon enoughLexus will become famous soon enough
По умолчанию Re: Проблема с таймерами на PIC16F873

Фига се...

Не зал.

А где про это прочитать можно?
Lexus вне форума   Ответить с цитированием
Старый 15.02.2017, 13:29   #4
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 30
Сообщений: 1,314
Вес репутации: 2626/57
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Проблема с таймерами на PIC16F873

Lexus
Вы должны ознакомиться с datasheet и errata перед началом разработки.
Информация по timer0 - в datasheet.
есть прямо схема, как он сделан.
besogon вне форума   Ответить с цитированием
Старый 15.02.2017, 13:34   #5
Lexus
Member
 
Регистрация: 17.12.2007
Возраст: 37
Сообщений: 90
Вес репутации: 100/36
Lexus will become famous soon enoughLexus will become famous soon enough
По умолчанию Re: Проблема с таймерами на PIC16F873

Что тогда значит строка из даташита:

The interrupt can be masked by cleaning bit TMR0IE (INTCON<5>).

Я всегда думал, что именно так отключается прерывание по TMR0.
Lexus вне форума   Ответить с цитированием
Старый 15.02.2017, 13:45   #6
tsb58
Senior Member
 
Аватар для tsb58
 
Регистрация: 04.11.2008
Адрес: Харьков
Сообщений: 332
Вес репутации: 813/42
tsb58 is a splendid one to beholdtsb58 is a splendid one to beholdtsb58 is a splendid one to beholdtsb58 is a splendid one to beholdtsb58 is a splendid one to beholdtsb58 is a splendid one to beholdtsb58 is a splendid one to behold
По умолчанию Re: Проблема с таймерами на PIC16F873

Цитата:
Сообщение от Lexus Посмотреть сообщение
The interrupt can be masked by cleaning bit TMR0IE (INTCON<5>).
Я всегда думал, что именно так отключается прерывание по TMR0.
Да, этим отключается "срабатывание" прерывания при переполнении таймера, но сам таймер от этого не перестает считать. И при его переполнении устанавливается флаг TMR0IF, независимо от разрешения прерываний TMR0IE. Если бы у Вас был только один разрешенный источник прерываний (TMR0), то при выключенном TMR0IE срабатываний прерываний бы не было. Но у Вас есть еще прерывания по TMR2. И когда оно срабатывает - Вы попадаете в тот же обработчик прерываний и идете по ложному пути, реагируя на флаг TMR0IF. Поэтому в обработчике прерываний нужно проверять не только флаг TMR0IF, но и TMR0IE.
tsb58 вне форума   Ответить с цитированием
Старый 15.02.2017, 13:54   #7
tsb58
Senior Member
 
Аватар для tsb58
 
Регистрация: 04.11.2008
Адрес: Харьков
Сообщений: 332
Вес репутации: 813/42
tsb58 is a splendid one to beholdtsb58 is a splendid one to beholdtsb58 is a splendid one to beholdtsb58 is a splendid one to beholdtsb58 is a splendid one to beholdtsb58 is a splendid one to beholdtsb58 is a splendid one to behold
По умолчанию Re: Проблема с таймерами на PIC16F873

Кроме того, просто отключение прерываний, по которым формируется динамическая индикация, обычно не "выключает" её, а "останавливает". При этом останется ярко светиться один разряд, который был включен перед выключением прерывания. Поэтому, для выключения индикации нужно предпринять еще какие-то действия.
tsb58 вне форума   Ответить с цитированием
Старый 15.02.2017, 14:06   #8
Lexus
Member
 
Регистрация: 17.12.2007
Возраст: 37
Сообщений: 90
Вес репутации: 100/36
Lexus will become famous soon enoughLexus will become famous soon enough
По умолчанию Re: Проблема с таймерами на PIC16F873

С прерываниями я уже все осознал... как в новый мир попал.
Не первый год занимаюсь, а тут вот оно что... слов нет... надо было так заблуждаться.
До этого просто задачи были другие, все всегда работало.

Ладно, пережую, пойду дальше.

Спасибо всем за то что глаза мне открыли.

PS: А сегменты я тушу, там все в порядке.
Lexus вне форума   Ответить с цитированием
Старый 15.02.2017, 14:07   #9
Lexus
Member
 
Регистрация: 17.12.2007
Возраст: 37
Сообщений: 90
Вес репутации: 100/36
Lexus will become famous soon enoughLexus will become famous soon enough
По умолчанию Re: Проблема с таймерами на PIC16F873

Тему можно считать закрытой.
Lexus вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многофункциональные часы. Н.Заяц.Книга 4. samko Вопросы начинающих 11 12.06.2012 09:26
MAX232 и USART, отсутствует сигнал на выходе. EviL_LaugH Общетехнические вопросы 15 31.01.2011 00:40
Проблема с прерыванием PIC 16F877A . chiraevevgenii Вопросы начинающих 8 13.01.2011 20:13
Счётчик на PIC16а84 HELP с программой... ChiperKO Вопросы начинающих 66 05.10.2009 18:41
Помогите, пожалуйста, найти ошибку в коде Катя Микроконтроллеры других производителей 26 08.12.2007 14:58


Часовой пояс GMT +3, время: 23:20.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot