Hola, he hecho un programa en ASM para controlar un servo según se pulse un botón. Pulsando una vez el servo va hacia un lado y pulsando otra se va hacia el otro y así sucesivamente.
Al simularlo con el ISIS, arranca bien y el servo se posiciona a un lado, pero al apretar el botón el PIC se queda bloqueado, cosa que debugeando he visto que no sale de la interrupción aunque he probado de cambiar todo el registro INTCON y hacer un bit clear del RBIF pero no consigo modificar este registro de ninguna manera, ni manualmente en el MPLAB se me cambia de valor, solo se queda en: '00001001' y no hay manera de sacarlo de ahí. Alguna ayuda por favor??????
A continuación pongo el programa entero:
;**************************************************************
;* Control de un servo por PWM *
;**************************************************************
;-------------CABAECERA--------------
list p=16F84A3
#include P16F84A.inc
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;------------VARIABLES---------------
Boton EQU 0
Motor EQU 0
Estado EQU 0x20
Contador1 EQU 0x21
;-----------PROGRAMA-----------------
RESET: org 0x00
goto INICIO
org 0x04
goto INTER
INICIO: bsf STATUS,RP0
movlw b'11110'
movwf TRISA
movlw b'11111111'
movwf TRISB
bcf STATUS,RP0
movlw b'10001000'
movwf INTCON
bcf INTCON,RBIF
bcf Estado,0
goto CONTROL
CONTROL: btfsc Estado,0
goto GIRO1
goto GIRO2
GIRO1: bsf PORTA,0
call RETA_1
bcf PORTA,0
call RETA_1
goto CONTROL
GIRO2: bsf PORTA,0
call RETA_2
bcf PORTA,0
call RETA_2
goto CONTROL
RETA_1: movlw d'249'
movwf Contador1
BUCLE1: nop
decfsz Contador1
goto BUCLE1
return
RETA_2: movlw d'199'
movwf Contador1
BUCLE: nop
nop
nop
nop
nop
nop
nop
decfsz Contador1
goto BUCLE
return
INTER: btfsc Estado,0
goto CAMBIO0
movlw 0x01
movwf Estado
bcf INTCON,RBIF
retfie
CAMBIO0: movlw 0x00
movwf Estado
bcf INTCON,RBIF
retfie
End