Здравствуйте, задали написать программу - "Исходное состояние - все светодиоды погашены, при нажатии SA3 реализуются 2 бегущих светодиода от середины к краям и обратно с длительностью горения каждого светодиода 0,5 сек. SA4 – пауза/снятие с паузы. Во время паузы – звуковое сопровождение.". Реализовать с помощью таймеров и прерывания.Посидел, с помощью выданного примера - кое-что да написал, а что дальше не могу понять. Помогите пожалуйста. Вод код
GOTO INT ;переход к обработке прерываний ;начало основной программы BEGIN: BCF STATUS,RP1 ;выбираем банк регистров 1 BSF STATUS,RP0 ;| MOVLW B'00001110' ;задаем аналоговый вход PORTA,0 MOVWF ADCON1 ;программируем регистр АЦП 1 MOVLW B'00000001' ;PORTA,7-1 выходы, PORTA,0 вход MOVWF TRISA ;программируем регистр направления PORTA MOVLW B'11111111' ;PORTB,7-0 входы MOVWF TRISB ;программируем регистр направления PORTB MOVLW B'11000000' ;PORTC,7-6 вход, PORTC,5-0 выходы MOVWF TRISC ;программируем регистр направления PORTC MOVLW B'00000111' ;включение подтягивающих резисторов и предд. TMRO 1:256 BSF PIE1,TMR1IE ;разрешение прерывания TMR1 BSF PIE1,TRM2IE ;разрешение прерывания TMR2 BCF STATUS,RP0 ;выбираем банк регистров 0 MOVLW B'00110000' ;коэфф.деления предделителя 1:8 MOVWF T1CON ;| MOVLW B'00000001' ;коэфф.деления предделителя 1:4 MOVWF T2CON ;| CALL OFF ;сброс в исходное состояние MOVLW B'11100000' ;биты GIE,PEIE,T0IE и INTE=1 MOVWF INTCON ;программируем регистр управления прерываниями
M10 GOTO M10 ;зацикливаемся здесь
;задаем режим работы таймера TMR1 T1S: MOVLW H'0B' ;задаем выдержку времени 8*(65536-3036)=500000 MOVWF TMR1H ;| MOVLW H'DC' ;| MOVWF TMR1L ;| RETURN
;выключение светодиодов и пищалки DL: CLRF PORTC ;гасим все светодиоды CLRF PORTA ;выключаем пищалку RETURN ;исходное состояние OFF: CLRF STAT1 ;сброс регистра состояния CLRF STATC ;сброс счетчика времени работы BCF T1CON,TMR1ON ;выключение TMR1 BCF T2CON,TMR2ON ;выключение TMR2 CALL DL ;переход к выкл. светодиодов и пищалки RETURN
;драйвер прерываний от таймеров INT: BTFSS INTCON,T0IF ;проверка флага прерывания от таймера 0 CALL TMR0INT ;переход к обработке прерывания TMR0, если оно произошло BTFSS PIR1,TMR1IF ;проверка флага прерывания от таймера 1 CALL TMR1INT ;переход к обработке прерывания TMR1, если оно произошло BTFSS PIR1,TMR2IF ;проверка флага прерывания от таймера 2 CALL TMR2INT ;переход к обработке прерывания TMR2, если оно произошло
RETFIE ;обработка прерывания TMR0 TMR0INT:MOVF STAT1,F ;проверка регистра на 0 BTFSS STATUS,Z ;если не равен 0, то выйти GOTO T0EX ;выход BTFSS PORTB,4 ;скачок, если не нажата кнопка SA3 GOTO SA3 ;переход к обработке BTFSS PORTB,2 ;скачок, если не нажата кнопка SA4 GOTO SA4 ;переход к обработке GOTO T0EX ;выход
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Я писал программу, с использованием кнопок, диодов, но только с подпрограммой выдержки времени. А сейчас у меня нет представления как связать таймеры с кнопками и диодами.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
SA3PR: BSF STAT1,1 ;установка бита состояния BCF STATUS,RP1 ;выбираем банк регистров 1 BSF STATUS,RP0 ;| MOVLW D'50' ; MOVWF PR2 ; BCF STATUS,RP0 ;выбираем банк регистров 0 CALL SA3H ;обработка действий по нажатию кнопки SA3 CALL T1S ;запись начальных значений TMR1 BCF T1CON,TMR1ON ;включение TMR1 RETURN
;обработка действий по нажатию кнопки SA3 SA3H: BSF PORTC,1 BSF PORTC,3
Как я понимаю, когда я нажму кнопку SA3, программа перейдёт к обработке кнопки SA3, включит 2 диода, после настроит таймер на 0,5 сек, включиться. После того как таймер посчитал он завершит обработку прерывания, и таймер сбросится, правильно?
А как собственно сделать так, чтобы я нажал на кнопку SA3, и включились два диода на 0,5 сек. Если Вам не сложно, не могли бы на моём примере, написать код с нажатием кнопки и включением 2 диодов на 0,5 сек с использованием таймера
Нет . Думайте. У вас в голове нечего не останется, если за вас кто-то будет решать. Так что, "включайте" мозг, "запрягайте" гугл и в перед . Я ж вам дал рекомендацию, погуглите на счет МК и кнопки. Примеров полно! С большой долей вероятности, вы этого явно не делали...
_________________ Для связи email: risctronix собака gmail.com
Я бы сделал максимально просто и без каши. Таймер по прерыванию формирует системный тик. А по нему синхронизируются все остальные - кнопки, светодиоды, звук.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения