Заголовок сообщения: Как решить вопрос с прерываниями
Добавлено: Вс май 27, 2018 15:01:29
Родился
Зарегистрирован: Вс май 27, 2018 14:55:05 Сообщений: 3
Рейтинг сообщения:0
Осваиваю прерывания, делаю таймер на PIC16f676, вобщем, прога работает, но когда происходит прерывание(у меня по изменению уровня на порте а)прога не выходит из обработчика, перепробовал массу способов но никак! Кто-нить сталкивался с подобным?
... 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 ;конец программы
interrupt btfss INTCON,T0IF ;проверяем флаг прерывания от таймера retfie ;если не таймер, то выходим из п/п
... m1 bcf INTCON,T0IF ;сбрасываем флаг прерывания от таймера retfie ;выход из п/п обработки прерывания
Дело в том, что "просто так" попасть в обработку прерываний вы не можете, а если уж попали - проверяйте по какому условию и сбрасывайте соответствующий флаг прерывания. В противном случае, есть шанс не "вылезть" из обработчика прерываний (не понимая, при этом, какого ххх туда заходит программа)...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Выкладывайте текст программы и полную схему устройства. Если программа на asm - постараюсь помочь. Если на другом языке программирования - кто-нибудь подскажет. P.S. А вообще то, "реагировать" на мех. кнопку по прерыванию (с кнопки) - не советую (если только не хотите вначале создать себе проблемы, а потом их разгребать).
У ПИКов при нескольких одновременно задействованных источниках прерываний надо предобработку определения источника сначала делать. Для начинающего проще сначала научится работать с одним источником (тот же таймер), а обработку кнопок проводить программно. Или отработать отдельно кнопки отдельно таймер, а уж затем составить обработчик/селектор для обеих источников прерываний.
Решил проблему-просто вставил #include <p16f84.inc> и всё. Работает как задумано.
Что за хрень? Т.е., для PIC16f676 подкинули файл с картой регистров и пр. от PIC16f84 и считаете это нормальным? Это, приблизительно, как в навигаторе подменить карту текущего местоположения на карту другого города. Далеко уедете?
Олег88135 писал(а):
какие МК лучше-PIC или AVR?
Те, которые знаешь лучше, чем пальцы на руке и которые более подходят под разрабатываемое изделие.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения