Таймеры и прерывания[PIC16f873A]

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
boom19
Родился
Сообщения: 8
Зарегистрирован: Сб ноя 09, 2019 14:56:38

Таймеры и прерывания[PIC16f873A]

Сообщение boom19 »

Здравствуйте, задали написать программу - "Исходное состояние - все светодиоды погашены, при нажатии 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
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс ноя 01, 2015 00:09:59

Re: Таймеры и прерывания[PIC16f873A]

Сообщение Core-X »

Так а что не получилось-то реализовать? Раз уже таймер запустили и настроили прерывания.
Для связи email: risctronix собака gmail.com
Реклама
boom19
Родился
Сообщения: 8
Зарегистрирован: Сб ноя 09, 2019 14:56:38

Re: Таймеры и прерывания[PIC16f873A]

Сообщение boom19 »

Я не понимаю как реализовать кнопки, диоды чтобы бегали от середины к краям и обратно, а так же пауза с звуковым сигналом.
Аватара пользователя
Core-X
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс ноя 01, 2015 00:09:59

Re: Таймеры и прерывания[PIC16f873A]

Сообщение Core-X »

Вопрос конечно риторический. А вы забивали в гугл как подключить кнопку к МК и программно ее обработать?
Для связи email: risctronix собака gmail.com
Реклама
Эиком - электронные компоненты и радиодетали
boom19
Родился
Сообщения: 8
Зарегистрирован: Сб ноя 09, 2019 14:56:38

Re: Таймеры и прерывания[PIC16f873A]

Сообщение boom19 »

Я писал программу, с использованием кнопок, диодов, но только с подпрограммой выдержки времени. А сейчас у меня нет представления как связать таймеры с кнопками и диодами.
Реклама
Аватара пользователя
Core-X
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс ноя 01, 2015 00:09:59

Re: Таймеры и прерывания[PIC16f873A]

Сообщение Core-X »

А что тут сложного, к примеру, СТАРТ/ПАУЗА - старт (разрешить прерывания TMR1)/пауза (запретить прерывания TMR1). И делов-то :tea:
Для связи email: risctronix собака gmail.com
Реклама
boom19
Родился
Сообщения: 8
Зарегистрирован: Сб ноя 09, 2019 14:56:38

Re: Таймеры и прерывания[PIC16f873A]

Сообщение boom19 »

Вот допустим я написал код(начало вверху)

Код: Выделить всё

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
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс ноя 01, 2015 00:09:59

Re: Таймеры и прерывания[PIC16f873A]

Сообщение Core-X »

Вы не внимательно читаете даташит. Прерывания будет происходит при каждом переполнении таймера
Для связи email: risctronix собака gmail.com
boom19
Родился
Сообщения: 8
Зарегистрирован: Сб ноя 09, 2019 14:56:38

Re: Таймеры и прерывания[PIC16f873A]

Сообщение boom19 »

А как собственно сделать так, чтобы я нажал на кнопку SA3, и включились два диода на 0,5 сек. Если Вам не сложно, не могли бы на моём примере, написать код с нажатием кнопки и включением 2 диодов на 0,5 сек с использованием таймера
Аватара пользователя
Core-X
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс ноя 01, 2015 00:09:59

Re: Таймеры и прерывания[PIC16f873A]

Сообщение Core-X »

Нет :)). Думайте. У вас в голове нечего не останется, если за вас кто-то будет решать. Так что, "включайте" мозг, "запрягайте" гугл и в перед :). Я ж вам дал рекомендацию, погуглите на счет МК и кнопки. Примеров полно! С большой долей вероятности, вы этого явно не делали...
Для связи email: risctronix собака gmail.com
boom19
Родился
Сообщения: 8
Зарегистрирован: Сб ноя 09, 2019 14:56:38

Re: Таймеры и прерывания[PIC16f873A]

Сообщение boom19 »

Хорошо, спасибо
Аватара пользователя
Core-X
Встал на лапы
Сообщения: 83
Зарегистрирован: Вс ноя 01, 2015 00:09:59

Re: Таймеры и прерывания[PIC16f873A]

Сообщение Core-X »

Дам небольшую подсказку. Задействуйте флаги. Берет ячейку памяти, и вот вам 8 флагов :)
Для связи email: risctronix собака gmail.com
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Таймеры и прерывания[PIC16f873A]

Сообщение OKF »

Я бы сделал максимально просто и без каши. Таймер по прерыванию формирует системный тик. А по нему синхронизируются все остальные - кнопки, светодиоды, звук.
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Таймеры и прерывания[PIC16f873A]

Сообщение otest »

Как я понимаю, когда я нажму кнопку SA3, программа перейдёт
Понимать и думать конечно надо, но и про симулятор не нужно забывать.
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Таймеры и прерывания[PIC16f873A]

Сообщение OKF »

А вообще, подобная задачка делается и без таймера (и без прерывания).
boom19
Родился
Сообщения: 8
Зарегистрирован: Сб ноя 09, 2019 14:56:38

Re: Таймеры и прерывания[PIC16f873A]

Сообщение boom19 »

[uquote="OKF",url="/forum/viewtopic.php?p=3750891#p3750891"]А вообще, подобная задачка делается и без таймера (и без прерывания).[/uquote]
Это да, я делал это без таймеров. Мне задали написать программу с использованием таймеров
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Таймеры и прерывания[PIC16f873A]

Сообщение OKF »

Ну так я вам логику и привёл выше. А без таймеров это просто delay(T_SYS) и всё.)
Ответить

Вернуться в «PIC»