Jump to content
boomO

Таймеры и прерывания (PIC16f873A)

Recommended Posts

Здравствуйте, задали написать программу - "Исходное состояние - все светодиоды погашены, при нажатии 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

 

Share this post


Link to post
Share on other sites

код как-то мало соответствует задаче...

1. зачем включен модуль АЦП, в задаче есть аналоговые измерения?

2. зачем включены три таймера , для работы  задачи достаточно одного таймера

3. вы уверены что звуковая сигнализация паузы выполняется включением внешней пишалки , а не должна быть реализована с помощью модуля ССР1

4. в коде прерывания отсутствует блок сохранения контента, откройте папки МПЛАБА и посмотрите пример оформления кода в темповских файлах на свой МК и возьмите его за основу.

5. по условию задачи не совсем понятно SA3 и SA4 переключатели или кнопки без фиксации, алгоритмы обработки у них разный.

ЗЫ есть подозрение что код вы вообше не писали.

ЗЫЫ в каком виде вы ожидаете  помочь?

Share this post


Link to post
Share on other sites

По 4 пункту предыдущего комментария добавлю. Обработчик прерывания завершается не командой return,  а командой retfie.

Ну и сохраняют КОНТЕКСТ, а не контент. Контекст в общем случае на этой платформе содержит три регистра - STATUS, WREG  и PCLATH.

Share this post


Link to post
Share on other sites

Руководство для разработчика приложений на базе STM32WB55

Представив двухъядерные беспроводные микроконтроллеры STM32WB для IoT-приложений, компания STMicroelectronics предлагает разработчикам экосистему, включающую в себя отладочные платы, примеры кода для микроконтроллера, готовое ПО всех уровней и большой массив документации.

Читать статью

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Купите б.у. компьютерный БП. Там выходы по питанию + 12V, + 3,3V, +5V. И ток не детский. При этом цена, например у меня в городе от 600 руб. до 700 руб. Вот реально покупал для питания накала в ламповом унч: Один в 18г., другой недавно. Шуруповёрт на 12V крутит только в путь. И всего делов то сделать клеммы. Как включить без компьютера - если не знаете, на форуме подскажут.
    • Теперь и винты не по стандарту Витиному  
    • Мля... Опять накормил троллей... Вот что значит в палату давно санитары не заходили... Вадим, не опускайся до их уровня, они там в авторитете!
    • А не пошёл бы ты на хутор, быдло? Вечно жить собрался? Ты или упырь, или... нет, крыльев сзади не торчит. Значит, всё-таки упырь. В отличие от твоего карлика характерного, коричневого цвета (и запаха, видимо, соответствующего), моя звезда несла свет и согревала людей, давая им качество звука и надёжность аппаратов на уровне фирменной концертной аппаратуры.  Альтернативно одарённый и кастрюлеголовый в одном лице тут только один, и это - аффтар высера на скриншотах. О каком-таком стеклянном йухе ты можешь рассуждать, когда ты фирменные ОУ в руках не маял сроду, лупень? 
    • Сначала аналог с винила, потом АЦП и передача через блютуз и в оконечнике - усилитель в классе D. Ну и где то между всего этого провода из бескислородной меди и позолоченные штекеры. Я правильно понял? И после этого: Часть аудиофилов сразу повесилась, а часть - ушла в запой. Остались только те, что винил через лампу слушает.
    • Я думаю не в предыдущем ПО дело , я когда пробовал печатать с microSD карты у меня уже сбилась область печати по осям Х и У. А в ПО cura нашел управление принтером и пробовал просто стол гонять по оси Z  когда нажимал кнопку чтоб стол вверх поднимался , он наоборот опускался вниз , а в Simplify3D все отлично работает. Написал продавцу чтоб прошивку на почту скинул , жду ответа. Буду перепрошивать принтер.
×
×
  • Create New...