LIST P=16F877A
INCLUDE <P16F877A.INC>
LOC EQU 0x20
VIS EQU 0x21
W_TEMP EQU 0x22
STATUS_TEMP EQU 0x23
TEMP EQU 0x24
AUX EQU 0x25
cblock 0x26
PDel0
PDel1
PDel2
endc
;-----------------INICIO--------------
ORG 0
GOTO INICIO
ORG 4
GOTO INTERRUPT
INICIO
BSF STATUS,RP0
BSF INTCON,GIE
BSF INTCON,RBIE
MOVLW 0xFF
MOVWF TRISB
CLRF TRISD
CLRF TRISC
BCF STATUS,RP0
CLRF PORTD
CLRF PORTC
CALL MOSTRAR
MOSTRAR MOVF LOC,W
MOVWF PORTC
MOVF VIS,W
MOVWF PORTD
CALL DEMORA
MOVLW 0xFF
MOVWF PORTC
MOVLW 0xFF
MOVWF PORTD
CALL DEMORA
INTERRUPT MOVWF W_TEMP
MOVF STATUS,W
MOVWF STATUS_TEMP
MOVLW .9
MOVWF PORTC
CALL DEMORA
MOVLW 0xFF
MOVWF PORTC
CALL DEMORA
MOVF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 13/11/2011 Hs 10:40:28 a.m.
; Descripcion: Delay 3000000 ciclos
;-------------------------------------------------------------
DEMORA movlw .67 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .91 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .122 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------
END
Estoy trabajando con el pic16f877a y lo tengo con un cristal de 4Mhz. Les dejo mi esquema de proteus.
LIST P=16F877A
INCLUDE <P16F877A.INC>
LOC EQU 0x20
VIS EQU 0x21
W_TEMP EQU 0x22
STATUS_TEMP EQU 0x23
TEMP EQU 0x24
AUX EQU 0x25
#DEFINE BANCO0 BCF STATUS,5
#DEFINE BANCO1 BSF STATUS,5
cblock 0x26
PDel0
PDel1
PDel2
endc
;-----------------INICIO--------------
ORG 0
GOTO INICIO
ORG 4
BCF INTCON,0
MOVWF W_TEMP
MOVF STATUS,W
MOVWF STATUS_TEMP
MOVLW .9
MOVWF PORTC
CALL DEMORA
MOVLW 0xFF
MOVWF PORTC
CALL DEMORA
MOVF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
INICIO BANCO1
MOVLW 0xFF
MOVWF TRISB
CLRF TRISD
CLRF TRISC
BANCO0
BSF INTCON,GIE
BSF INTCON,RBIE
BANCO0
CLRF PORTD
CLRF PORTC
CALL MOSTRAR
MOSTRAR MOVF LOC,W
MOVWF PORTC
MOVF VIS,W
MOVWF PORTD
CALL DEMORA
MOVLW 0xFF
MOVWF PORTC
MOVLW 0xFF
MOVWF PORTD
CALL DEMORA
return
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 13/11/2011 Hs 10:40:28 a.m.
; Descripcion: Delay 3000000 ciclos
;-------------------------------------------------------------
DEMORA movlw .67 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .91 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .122 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------
END
Ya modifique el código pero aún se me sigue ciclando en la interrupcion, ya no se que mas hacer, ¿alguna sugerencia?Código: [Seleccionar]LIST P=16F877A
INCLUDE <P16F877A.INC>
LOC EQU 0x20
VIS EQU 0x21
W_TEMP EQU 0x22
STATUS_TEMP EQU 0x23
TEMP EQU 0x24
AUX EQU 0x25
#DEFINE BANCO0 BCF STATUS,5
#DEFINE BANCO1 BSF STATUS,5
cblock 0x26
PDel0
PDel1
PDel2
endc
;-----------------INICIO--------------
ORG 0
GOTO INICIO
ORG 4
BCF INTCON,0
MOVWF W_TEMP
MOVF STATUS,W
MOVWF STATUS_TEMP
MOVLW .9
MOVWF PORTC
CALL DEMORA
MOVLW 0xFF
MOVWF PORTC
CALL DEMORA
MOVF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
INICIO BANCO1
MOVLW 0xFF
MOVWF TRISB
CLRF TRISD
CLRF TRISC
BANCO0
BSF INTCON,GIE
BSF INTCON,RBIE
BANCO0
CLRF PORTD
CLRF PORTC
CALL MOSTRAR
MOSTRAR MOVF LOC,W
MOVWF PORTC
MOVF VIS,W
MOVWF PORTD
CALL DEMORA
MOVLW 0xFF
MOVWF PORTC
MOVLW 0xFF
MOVWF PORTD
CALL DEMORA
return
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 13/11/2011 Hs 10:40:28 a.m.
; Descripcion: Delay 3000000 ciclos
;-------------------------------------------------------------
DEMORA movlw .67 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .91 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .122 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------
END