TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: ERos en 28 de Marzo de 2019, 12:59:31
-
Buenas, tengo el siguiente código, lo que hace es activar un pulso con flanco descendente más no ascendente, funciona bien, sin embargo si quisiera hacerlo como una interrupción para que aparte también haga otras acciones como por ejemplo ocuparlo como temporizador, qué parámetros debo tener en cuenta?
#INCLUDE "P16F887.INC"
__CONFIG _CONFIG1, _FOSC_INTRC_NOCLKOUT & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF
__CONFIG _CONFIG2, _BOR4V_BOR40V & _WRT_OFF
REGISTROS UDATA 0X0020
CONTADOR RES 1
ORG 0X0000
GOTO CONFIG_
CONFIG_
BANKSEL TRISC
inicio
bsf STATUS,RP0
movlw b'00000000'
movwf TRISC
movlw b'11111'
movwf TRISA
banksel OPTION_REG
movlw b'00111000'
movwf OPTION_REG
bcf STATUS,RP0
clrf TMR0
clrf PORTA ; inicialización del puerto A
clrf PORTC ; inicialización del puerto B
bucle
BTFSC PORTC, 0
GOTO apagar
GOTO encender
encender
MOVLW .1
XORWF TMR0,W
BTFSS STATUS,Z
GOTO $-3
BSF PORTC, RC0
CLRF TMR0
GOTO apagar
apagar
MOVLW .1
XORWF TMR0,W
BTFSS STATUS,Z
GOTO $-3
BCF PORTC, RC0
CLRF TMR0
GOTO encender
END
-
El problema es que estas usando una cosa que es el Timer para otra cosa, que es simplemente detectar un flanco ascendente o descendente.
Si usas el Timer para contar pulsos externos, entonces NO vas a poder usarlo para contar tiempo ( contar pulsos del cristal).
La solucion seria usar la entrada RB0/INT que es la que te genera una interrupcion y la cual podes definir un flanco. Y luego el Timer te queda libre para lo que necesites.