Нужна помощь по PIC (перерывания)

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
nppElM
Родился
Сообщения: 12
Зарегистрирован: Чт мар 05, 2009 10:32:23

Нужна помощь по PIC (перерывания)

Сообщение nppElM »

Доброго время суток! Поставили задачу откорректировать программу написанную для PICа с пиками не когда не сталкивался, а сделать нужно быстро, в программе есть прерывания по входу INT, а мене бы нужно еще добавить туда прерывания по переполнению TMR0 (нужен отсчет 1 сек). С тем как проинициализировать их все понятно, а вот как к ним обратиться что то не очень, обычное есть вектора прерываний которые имеют совой приоритет, и конкретно прописаны и при срабатывании того или иного прерывания оно и происходит, а тут как???
У меня есть МК PIC16f73

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

INTCON  equ    0b ; здесь поправлю это понятно
OPTIONs	equ 1
        org     0000
        goto    start
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ПРЕРЫВАНИЕ
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
      org     4
int
	movwf	RwTmp		;|	
	swapf	STATUS,w	;\сохранение
	movwf	RstaTmp		;/STATUS и W
; процедура

	movwf	STATUS		;/STATUS
	swapf	RwTmp,f		;\ и W
	swapf	RwTmp,w		;/

	retfie
А как сюда добавить прерывания по переполнению TMR0? подскажите, пожалуйста!
Реклама
Аватара пользователя
radio-kot
Собутыльник Кота
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Re: Нужна помощь по PIC (перерывания)

Сообщение radio-kot »

Смотрите ПРИМЕРЫ !!!!!!!!!!!

у PIC16 обычно один адрес (вектор) прерывания. Т.е. при всех прерываниях прога перескакивает на него. В процедуре прерывания вам надо програмно проанализировать его источник.
Будете проходить мимо- проходите!
Реклама
driver_gv
Потрогал лапой паяльник
Сообщения: 399
Зарегистрирован: Сб авг 08, 2009 23:02:57
Откуда: Ростов-на-Дону
Контактная информация:

Re: Нужна помощь по PIC (перерывания)

Сообщение driver_gv »

Примерно так:

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


	list		p=16f73		; list directive to define processor
	#include	<p16f73.inc>	; processor specific variable definitions
	
	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC


;***** VARIABLE DEFINITIONS * IRQ *****

w_temp			EQU	0x20		; variable used for context saving
w_temp1			EQU	0xA0		; reserve bank1 equivalent of w_temp 
status_temp		EQU	0x21		; variable used for context saving
pclath_temp		EQU	0x22		; variable used for context saving

........


;**********************************************************************
			ORG     0x000             ; processor reset vector

			clrf    PCLATH            ; ensure page bits are cleared
  			goto    START              ; go to beginning of program
		

;**********************************************************************

			ORG     0x004             ; interrupt vector location

			movwf   w_temp            ; save off current W register contents
			movf	STATUS,w          ; move status register into W register
			bcf     STATUS,RP0        ; ensure file register bank set to 0
			movwf	status_temp       ; save off contents of STATUS register
			movf	PCLATH,w	  ; move pclath register into w register
			movwf	pclath_temp	  ; save off contents of PCLATH register

		movlw HIGH RETIRQ 	;load high 8-bit address of Table
		movwf PCLATH
; узнавание источника прерывания

		BTFSS	INTCON,INTF
   		GOTO 	IRQ_TIMER

; обработка прерывания не от таймера
		BCF		INTCON,INTF				
..................
..................
		GOTO	RETIRQ
IRQ_TIMER 
; обработка прерывания таймера
		BCF	INTCON,T0IF	; RESET FLAG TIMER
..............
..............

RETIRQ
			bcf     STATUS,RP0        ; ensure file register bank set to 0
			movf	pclath_temp,w	  ; retrieve copy of PCLATH register
			movwf	PCLATH		  ; restore pre-isr PCLATH register contents
			movf    status_temp,w     ; retrieve copy of STATUS register
			movwf	STATUS            ; restore pre-isr STATUS register contents
			swapf   w_temp,f
			swapf   w_temp,w          ; restore pre-isr W register contents
			retfie                    ; return from interrupt
;**********************************************************************

;##########################################################
; Начало нашей программы
START 

...............

__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять
nppElM
Родился
Сообщения: 12
Зарегистрирован: Чт мар 05, 2009 10:32:23

Re: Нужна помощь по PIC (перерывания)

Сообщение nppElM »

БОЛЬШОЕ СПАСИБО!!! Все стало понятно!
Реклама
Эиком - электронные компоненты и радиодетали
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»