Как решить вопрос с прерываниями

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Олег88135
Родился
Сообщения: 3
Зарегистрирован: Вс май 27, 2018 14:55:05

Как решить вопрос с прерываниями

Сообщение Олег88135 »

Осваиваю прерывания, делаю таймер на PIC16f676, вобщем, прога работает, но когда происходит прерывание(у меня по изменению уровня на порте а)прога не выходит из обработчика, перепробовал массу способов но никак! Кто-нить сталкивался с подобным?
Реклама
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Как решить вопрос с прерываниями

Сообщение Albert_V »

После входа в подпрограмму обработки прерываний и после того как выяснили от кого получено прерывание, нужно сбросить флаг прерывания.
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Как решить вопрос с прерываниями

Сообщение pyzhman »

Отрывок из рабочего листинга:

Код: Выделить всё

;
;Светофор
;
#include <p16f84.inc>	;подключаем файл определений мк

...
	org	0	;начальный адрес программы
	clrf	INTCON	;запрет всех прерываний
	goto	START	;переход на начало
				
	org	04h	;вектор прерываний
	goto	interrupt	;переход на подпрограмму обработки прерываний
;
START
	bsf	STATUS, RP0	;включаем BANK1
	movlw	b'11111000'	;RA0,RA1,RA2 - выходы
	movwf	TRISA		;запись в TRISA
	movlw	b'00000011'	;RB7..RB2 - выходы
	movwf	TRISB		;запись в TRISB
	movlw	b'00000100'	;определение прескалера для таймера 1:32
	movwf	OPTION_REG	;запись в OPTION_REG
	bcf	STATUS,RP0	;включаем BANK0
	clrw			;обнуляем рабочий регистр
	movwf	PORTA		;устанавливаем на выходах порта А нули(гасим лампы)
	movwf	PORTB		;устанавливаем на выходах порта B нули(гасим лампы)

	movlw	0x3D		;начальное состояние счетчика
	movwf	counter		;в переменную
	movlw	.31		;начальное количество тактов
	movwf	takt		;в переменную

	movlw	b'10100000'	;взводим биты нужных прерываний
	movwf	INTCON		;разрешаем прерывание от таймера и общее разрешение
loop
	goto	loop		;зацикливаемся на метке loop
;************************
;
;************************
interrupt
	btfss	INTCON,T0IF	;проверяем флаг прерывания от таймера
	retfie			;если не таймер, то выходим из п/п

...
m1
	bcf	INTCON,T0IF	;сбрасываем флаг прерывания от таймера
	retfie			;выход из п/п обработки прерывания
;
;Подпрограмма возвращает данные для ламп
;Такты перебираются от 31-го до 1-го и далее, по кругу.
;
;    b'D7 D6 D5 D4 D3 D2 D1 D0'
;
;D0 - красный светофора_1 и светофора_3
;D1 - желтый светофора_1 и светофора_3
...
	end	;конец программы
Docendo discimus
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Как решить вопрос с прерываниями

Сообщение Albert_V »

Опасное место в коде:
interrupt
btfss INTCON,T0IF ;проверяем флаг прерывания от таймера
retfie ;если не таймер, то выходим из п/п

...
m1
bcf INTCON,T0IF ;сбрасываем флаг прерывания от таймера
retfie ;выход из п/п обработки прерывания
Дело в том, что "просто так" попасть в обработку прерываний вы не можете, а если уж попали - проверяйте по какому условию и сбрасывайте соответствующий флаг прерывания.
В противном случае, есть шанс не "вылезть" из обработчика прерываний (не понимая, при этом, какого ххх туда заходит программа)...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Как решить вопрос с прерываниями

Сообщение pyzhman »

Согласен. Исправлять не стал, т.к. разработка теоретическая.
Docendo discimus
Реклама
Олег88135
Родился
Сообщения: 3
Зарегистрирован: Вс май 27, 2018 14:55:05

Re: Как решить вопрос с прерываниями

Сообщение Олег88135 »

У меня только от изменения уровня на порте а. Соответствующий флаг я сбрасываю в самом начале обработчика, только это не помогает.
Реклама
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Как решить вопрос с прерываниями

Сообщение Albert_V »

Выкладывайте текст программы и полную схему устройства.
Если программа на asm - постараюсь помочь. Если на другом языке программирования - кто-нибудь подскажет.
P.S.
А вообще то, "реагировать" на мех. кнопку по прерыванию (с кнопки) - не советую (если только не хотите вначале создать себе проблемы, а потом их разгребать).
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15572
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Как решить вопрос с прерываниями

Сообщение BOB51 »

У ПИКов при нескольких одновременно задействованных источниках прерываний надо предобработку определения источника сначала делать.
Для начинающего проще сначала научится работать с одним источником (тот же таймер), а обработку кнопок проводить программно.
Или отработать отдельно кнопки отдельно таймер, а уж затем составить обработчик/селектор для обеих источников прерываний.
:roll:
Олег88135
Родился
Сообщения: 3
Зарегистрирован: Вс май 27, 2018 14:55:05

Re: Как решить вопрос с прерываниями

Сообщение Олег88135 »

Решил проблему-просто вставил #include <p16f84.inc> и всё. Работает как задумано. Хотел еще спросить-какие МК лучше-PIC или AVR?
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Как решить вопрос с прерываниями

Сообщение pyzhman »

Провокация.
Docendo discimus
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Как решить вопрос с прерываниями

Сообщение Albert_V »

Олег88135 писал(а):Решил проблему-просто вставил #include <p16f84.inc> и всё. Работает как задумано.
Что за хрень? :facepalm:
Т.е., для PIC16f676 подкинули файл с картой регистров и пр. от PIC16f84 и считаете это нормальным?
Это, приблизительно, как в навигаторе подменить карту текущего местоположения на карту другого города. Далеко уедете?
Олег88135 писал(а):какие МК лучше-PIC или AVR?
Те, которые знаешь лучше, чем пальцы на руке и которые более подходят под разрабатываемое изделие. :)))
Ответить

Вернуться в «PIC»