Hola!
Estoy comenzando un programa para activar/desactivar una bomba de agua, para checar que mi programa este funcionando bien tengo la buena costumbre de colocar un led que lo enciendo al principio y asi lo dejo (algunas veces lo apago y vuelvo a prender para hacer pruebas), pero en esta ocasiòn se me ocurrio colocaarlo en el pin RB3 del PIC16F876A y ¡no prende!, no se por que, ya revise mi programa y no encuentro la falla, hice la prueba de encender otros leds y no tuvieron problemas.
Hasta el momento he probado mi programa con el proteus v7.2 sp6, no se si es error del simulador o del programa
Espero por favor alguien me pueda ayudar, anexo el codigo que llevo y el archivo de simulacion del proteus para que me ayuden, GRACIAS!:
CODIGO:
LIST P=16F876A
INCLUDE"P16F876A.INC"
ERRORLEVEL -302,-304
__CONFIG (_CP_OFF & _DEBUG_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC)
;/////////////////////////////////////////
; DEFINICION DE NOMBRES DE REGISTROS DE PROPOSITO GENERAL
;cblock
d1 equ 0X20
d2 equ 0X21
RESPALDO_W equ 0X22
;endc
;/////////////////////////////////////////
; DEFINICION DE NOMBRES A PUERTOS Y BITS
; PUERTO A
; PUERTO B
#DEFINE BOTON_PARO PORTB,0
#DEFINE BOTON_ENCENDIDO PORTB,1
#DEFINE BOTON_INICIO PORTB,2
#DEFINE LED PORTB,3
; PUERTO C
#DEFINE RELE_BOMBA PORTC,0
#DEFINE BOTON_ACT_BOMBA PORTC,1
#DEFINE BOTON_DESACT_BOMBA PORTC,2
#DEFINE LED_PARO PORTC,3
#DEFINE LED_ENCENDIDO PORTC,4
#DEFINE LED_INICIO PORTC,5
#DEFINE LED_AUTOMATICO PORTC,6
#DEFINE LED_MANUAL PORTC,7
;/////////////////////////////////////////
ORG 0X00
GOTO MAIN
ORG 0X04 ; EXISTEN HASTA EL MOMENTO DOS POSIBLES INTERRUPCIONES:
GOTO INTERRUPCION ; POR INT EXTERNA Y POR SOBREFLUJO DEL TIMER
;**************************************************************************
;BLOQUE DE CONFIGURACION
MAIN
;CONGIGURACION PUERTO A
bsf STATUS,RP0 ; SELECCION BANCO 1
movlw 0XFF
movwf TRISA ; Puerto A son entradas
movlw 0X07
movwf CMCON ; Deshabilitación de comparadores analógicops en Puerto A
movlw 0X06
movwf ADCON1 ; Para configurar todas las entradas como digitales
;CONFIGURACION DE PUERTOS B Y C
movlw 0XF7
movlw TRISB ; RB0-RB2 = BOTONES, RB3 = LED, RB4-RB7 HASTA EL MOMENTO LIBRES
movlw 0X06
movwf TRISC ; RC0=RELE, RC1-RC2 = BOTONES, RC3-RC7 = LEDS
bcf STATUS,RP0 ; SELECCION BANCO 0
;***************************************************************************
;Inicializaciòn de PORTA, PORTB y PORTC
clrf PORTA
clrf PORTB
clrf PORTC
;****************************************************************************
;CONFIGURACION PARA INTERRUPCION EXTERNA INT
bsf STATUS,RP0 ; SELECCION BANCO 1
movlw 0X80
movwf OPTION_REG ; PULL-UP INTERNAS DE PORTB DESHABILITADAS, FLANCO DE BAJADA DE INT (RB0)
bsf INTCON,PEIE ; HABILITACION DE INTERRUPCIONES POR PERIFERICOS
bcf INTCON,INTF ; LIMPIEZA DE BANDERA DE SOBREFLUJO DE INTERRUPCION EXTERNA
bsf INTCON,INTE ; HABILITACION DE INTERRUPCION EXTERNA INT (RB0)
bcf STATUS,RP0 ; SELECCION BANCO 0
;****************************************************************************
;CONFIGURACION E INICIALLZACION DEL TIMER 0
bsf STATUS,RP0 ; SELECCION BANCO 1
bcf INTCON,TMR0IF ; LIMPIEZA DE BANDERA DE SOBREFLUJO DE TIMER
bsf OPTION_REG,PS2 ; CONFIGURACION DE TIMER 0 (PREESCALA 256, TIMER)
bsf OPTION_REG,PS1
bsf OPTION_REG,PS0
bcf STATUS,RP0 ; SELECCION BANCO 0
;*****************************************************************************
; CONFIGURACION DE INTERRUPCION POR CAMBIOS EN RB7:BR4 (SENSORES DE MOTORES)
bsf STATUS,RP0 ; SELECCION BANCO 1
bcf INTCON,RBIF ; LIMPIEZA DE BANDERA DE ITERRUPCION X CAMBIOS EN PORTB
bsf INTCON,RBIE ; HABILITACION DE INTERRUPCION
bsf INTCON,GIE ; HABILITACION GLOBAL DE INTERRUPCIONES
bcf STATUS,RP0 ; SELECCION BANCO 0
;*****************************************************************************
; PROGRAMA PRINCIPAL
INICIO
bsf LED ; ENCENDIDO DE LED DE PRUEBA ********NO FUNCIONA*******
bsf LED_INICIO ; ********SI FUNCIONA*******
bsf LED_AUTOMATICO ; ********SI FUNCIONA*******
bsf LED_MANUAL ; ********SI FUNCIONA*******
btfsc BOTON_ENCENDIDO ; PREGUNTAR POR EL ESTADO DEL BOTON DE ENCENDIDO (¿ENCENDIDO=0?)
goto IR_A_PARO ; NO, IR A PARO
goto ENCENDIDO ; SI, ENCENDER EL SISTEMA
ENCENDIDO
bsf LED_ENCENDIDO
bcf LED_PARO
goto INICIO
IR_A_PARO
call PARO ; EJECUTAR SUBRUTINA DE PARO
goto INICIO
;**************************************************************************************
; SUBRUTINAS
;**************************************************************************************
; SUBRUTINA DE CONTROL DE INTERRUPCIONES
INTERRUPCION
BTFSC INTCON,INTF ; PREGUNTAR SI SE ACTIVO LA BANDERA DE INTERRUPCION EXTERNA
GOTO INT_EXT ; SI, ENTONCES ATENDER LA INTERRUPCION EXTERNA
BTFSC INTCON,TMR0IF ; PREGUNTAR SI SE ACTIVO LA BANDERA DE INTERRUPCION POR SOBREFLUJO
; DEL TIMER 0
GOTO TIMER_0_OVF ; SI, ENTONCES ATENDER LA INTERRUPCION POR SOBREFLUJO DEL TMR0
BTFSC INTCON,RBIF ; PREGUNTAR SI SE ACTIVO BANDERA POR INT DE CAMBIOS EN RB7:RB4
GOTO INT_CHANGE
RETFIE
;**************************************************************************************
; SUBRUTINA DE ATENCION POR INTERRUPCION EXTERNA (PARO)
INT_EXT
bcf INTCON,INTF ; BORRADO DE BANDERA DE INTERRUPCION EXTERNA
movwf RESPALDO_W
call RETARDO_UN_CUARTO_SEG
btfsc BOTON_PARO
goto SALIR_INT_EXT
call PARO
SALIR_INT_EXT
movf RESPALDO_W,0
RETFIE
;**************************************************************************************
; SUBRUTINA DE ATENCION POR INTERRUPCION POR DESBORDAMIENTO DEL TMR-0
TIMER_0_OVF
RETFIE
;**************************************************************************************
; SUBRUTINA DE ATENCION POR INTERRUPCION PORC CAMBIOS EN RB7:RB4
INT_CHANGE
RETFIE
;**************************************************************************************
; SUBRUTINA DE PARO
PARO
bsf LED_PARO
bcf LED_ENCENDIDO
bcf RELE_BOMBA ; APAGADO DE BOMBA DE LODO
return
;**************************************************************************************
RETARDO_UN_CUARTO_SEG
; Delay = 0.25 seconds
; Clock frequency = 4 MHz
; Actual delay = 0.25 seconds = 250000 cycles
; Error = 0 %
;249993 cycles
movlw 0x4E
movwf d1
movlw 0xC4
movwf d2
RETARDO_UN_CUARTO_SEG_0
decfsz d1, f
goto $+2
decfsz d2, f
goto RETARDO_UN_CUARTO_SEG_0
;3 cycles
goto $+1
nop
;4 cycles (including call)
return
; Generated by
http://www.piclist.com/cgi-bin/delay.exe (December 7, 2005 version)
; Thu Sep 03 17:41:02 2009 GMT
;**************************************************************************************
; FIN DE SUBRUTINAS
;**************************************************************************************
end