|
|
|
|
gentleangel: А разве: Смотрим оригинальную документацию на этот МК, страница 110: INTEDG bit (OPTION.6) - по какому фронуту входить в прерывание; When a valid edge appears on the RB0/INT pin, the INTF bit (INTCON.1.) is set - когда срабатывает прерывание, то устанавливается бит INTF. This interrupt can be disabled by clearing the INTE control bit (INTCON.4). - этим битом включается прерывание от RB0/INT. The INTF bit must be cleared in software in the interrupt service routine before re-enabling this interrupt - После обработки этого прерывания нужно САМОМУ сбросить бит INTE. A Global Interrupt Enable bit, GIE (INTCON.7) enables (if set) all un-masked interrupts or disables (if cleared) all interrupts - GIE - глобальное включение прерываний. Не обратил внимания, в Вашем исходнике выход из прерывания по "RETFIE"? К тому-же, gentleangel, готовьтесь, что после одного нажатия кнопки счетчик насчитает десятки-стотни, а то и тысячи входов в прерывание. Правда у Вас Протеус... дребезг контактов вряд ли симулируется, но в реальной схеме он будет! |
|
|
Подсказывать нехорошо, человек должен сам наступить на определенное количество граблей, лучше запоминается. |
|
|
Не забывайте в обработчике прерывания сначала: -запретить все прерывания и сбросить флаг прерывания по внешнему воздействию на INT затем: -сохранить контент -затем тело обработчика (что хотите сделать) затем: восстановить контент и опосля: разрешить прерывания. В общем прочитайте внимательно местный ликбез по программированию ПИК часть первую и посмотрите "поющую ёлку" picmaniac'a (у него есть страничка в сети). думаю поможет. |
|
|
urry, согласен, просто у меня сегодня хорошее настроение |
|
|
Сергей К: Смотрим оригинальную документацию на этот МК, страница 110: INTEDG bit (OPTION.6) - по какому фронуту входить в прерывание; When a valid edge appears on the RB0/INT pin, the INTF bit (INTCON.1.) is set Есть же мануал на 628 на русском языке, зачем на аглицком... |
|
|
Сергей К: Не обратил внимания, в Вашем исходнике выход из прерывания по "RETFIE"? Вообще в исходнике есть практически всё, что Вы перечислили, кроме устанофленного флага глобального разрешения всех немаскированных прерываний GIE. Сергей К: INTEDG bit (OPTION.6) - по какому фронуту входить в прерывание; OPTION - он же OPTION_REG, как я понял из файлика P16F628A.INC. Регистра OPTION в нём нет, а есть по тому же адресу OPTION_REG. Кроме того, если в АСМе ввожу чисто OPTION - выделяется как команда. В коде бит соответствует реакции по переднему фронту. Вообще впечатление, что вы не смотрели мой код Попробую разрешить прерывания глобально, может это и есть тот самый воебный бит, которого мне не хватало |
|
|
Splav56: Сергей К: Смотрим оригинальную документацию на этот МК, страница 110: INTEDG bit (OPTION.6) - по какому фронуту входить в прерывание; When a valid edge appears on the RB0/INT pin, the INTF bit (INTCON.1.) is set Есть же мануал на 628 на русском языке, зачем на аглицком... Смотрю в оба... |
|
|
urry: Специально не скажу, какой еще флаг нужно поставить, чтобы нашел сам. Эх, жаль товарищи не дали голову поломать..-> Сергей К: A Global Interrupt Enable bit, GIE (INTCON.7) enables (if set) all un-masked interrupts or disables (if cleared) all interrupts - GIE - глобальное включение прерываний. Ну, да ладно, одним пробелом в голове меньше. Вставил строчку BSF INTCON,7 в дополнение к остальным инструкциям разрешения прерываний и всё заработало, при чём, как и задумано. Про дребезг - это мелочи, организовать мини-задержку (а лучше две) сразу после изменения сигнала прерывания для меня не проблема, стадию абсолютного новичка в этом вопросе уже перешагнул. |
|
|
Ага, только вот установка INTCON.1 - лишнее. По этому флагу сразу отрабатывается ПП прерывания, и в счётчик уже добавляется 1, хотя ещё ни чего не нажималось. |
|
|
Всем спасибо за помощь! |
|
|
|
|