| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Таймеры и прерывания[PIC16f873A] https://radiokot.ru/forum/viewtopic.php?f=58&t=167337 |
Страница 1 из 1 |
| Автор: | boom19 [ Пт дек 06, 2019 22:22:46 ] |
| Заголовок сообщения: | Таймеры и прерывания[PIC16f873A] |
Здравствуйте, задали написать программу - "Исходное состояние - все светодиоды погашены, при нажатии SA3 реализуются 2 бегущих светодиода от середины к краям и обратно с длительностью горения каждого светодиода 0,5 сек. SA4 – пауза/снятие с паузы. Во время паузы – звуковое сопровождение.". Реализовать с помощью таймеров и прерывания.Посидел, с помощью выданного примера - кое-что да написал, а что дальше не могу понять. Помогите пожалуйста. Вод код Код: #include p16f873a.inc
__CONFIG _HC_OSC & _WDT_OFF ; ;объявление переменных STAT1 EQU H'20' ;регистр состояния GOTO BEGIN ;переход к настройке после включения ORG H'004' ;вектор прерывания 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 ;выход ;обработка нажатия SA3 SA3: CALL SA3PR ; GOTO T0EX ; ;обработка нажатия SA4 SA4: CALL SA4PR ; ;завершение обработки прерывания TOEX: MOVLW D'60' ; MOVWF TMR0 ;запись начального значения TMR0 BCF INTCON,T0IF ;сброс бита прерывания RETURN |
|
| Автор: | Core-X [ Пт дек 06, 2019 22:39:52 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Так а что не получилось-то реализовать? Раз уже таймер запустили и настроили прерывания. |
|
| Автор: | boom19 [ Пт дек 06, 2019 22:41:20 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Я не понимаю как реализовать кнопки, диоды чтобы бегали от середины к краям и обратно, а так же пауза с звуковым сигналом. |
|
| Автор: | Core-X [ Пт дек 06, 2019 22:47:06 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Вопрос конечно риторический. А вы забивали в гугл как подключить кнопку к МК и программно ее обработать? |
|
| Автор: | boom19 [ Пт дек 06, 2019 23:02:23 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Я писал программу, с использованием кнопок, диодов, но только с подпрограммой выдержки времени. А сейчас у меня нет представления как связать таймеры с кнопками и диодами. |
|
| Автор: | Core-X [ Пт дек 06, 2019 23:17:11 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
А что тут сложного, к примеру, СТАРТ/ПАУЗА - старт (разрешить прерывания TMR1)/пауза (запретить прерывания TMR1). И делов-то
|
|
| Автор: | boom19 [ Пт дек 06, 2019 23:25:40 ] |
| Заголовок сообщения: | 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 сек, включиться. После того как таймер посчитал он завершит обработку прерывания, и таймер сбросится, правильно? |
|
| Автор: | Core-X [ Пт дек 06, 2019 23:35:30 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Вы не внимательно читаете даташит. Прерывания будет происходит при каждом переполнении таймера |
|
| Автор: | boom19 [ Пт дек 06, 2019 23:47:53 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
А как собственно сделать так, чтобы я нажал на кнопку SA3, и включились два диода на 0,5 сек. Если Вам не сложно, не могли бы на моём примере, написать код с нажатием кнопки и включением 2 диодов на 0,5 сек с использованием таймера |
|
| Автор: | Core-X [ Сб дек 07, 2019 00:09:37 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Нет |
|
| Автор: | boom19 [ Сб дек 07, 2019 00:15:36 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Хорошо, спасибо |
|
| Автор: | Core-X [ Сб дек 07, 2019 00:46:21 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Дам небольшую подсказку. Задействуйте флаги. Берет ячейку памяти, и вот вам 8 флагов |
|
| Автор: | OKF [ Сб дек 07, 2019 09:13:13 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Я бы сделал максимально просто и без каши. Таймер по прерыванию формирует системный тик. А по нему синхронизируются все остальные - кнопки, светодиоды, звук. |
|
| Автор: | otest [ Сб дек 07, 2019 09:45:41 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Цитата: Как я понимаю, когда я нажму кнопку SA3, программа перейдёт Понимать и думать конечно надо, но и про симулятор не нужно забывать. |
|
| Автор: | OKF [ Сб дек 07, 2019 12:29:50 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
А вообще, подобная задачка делается и без таймера (и без прерывания). |
|
| Автор: | boom19 [ Сб дек 07, 2019 13:11:07 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
А вообще, подобная задачка делается и без таймера (и без прерывания). Это да, я делал это без таймеров. Мне задали написать программу с использованием таймеров |
|
| Автор: | OKF [ Сб дек 07, 2019 14:53:05 ] |
| Заголовок сообщения: | Re: Таймеры и прерывания[PIC16f873A] |
Ну так я вам логику и привёл выше. А без таймеров это просто delay(T_SYS) и всё.) |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


