Здравствуйте, задали написать программу - "Исходное состояние - все светодиоды погашены, при нажатии 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 ;выход
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
Я писал программу, с использованием кнопок, диодов, но только с подпрограммой выдержки времени. А сейчас у меня нет представления как связать таймеры с кнопками и диодами.
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
Core-X
Заголовок сообщения: Re: Таймеры и прерывания[PIC16f873A]
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
Я бы сделал максимально просто и без каши. Таймер по прерыванию формирует системный тик. А по нему синхронизируются все остальные - кнопки, светодиоды, звук.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения