Autor Tema: Interrupción asm pic  (Leído 168 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ERos

  • PIC10
  • *
  • Mensajes: 6
Interrupción asm pic
« 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?
Código: [Seleccionar]
    #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    

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7116
Re:Interrupción asm pic
« Respuesta #1 en: 29 de Marzo de 2019, 09:29:51 »
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.


 

anything