TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: venom1320 en 04 de Septiembre de 2009, 11:57:03
-
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
-
Buen día....
Para solucionar ese problema solo debes añadir a la línea __CONFG lo siguiente: _LVP_OFF.
Esto se debe a que el pin RB3 es un pin de programación, por lo que debes desactivar esta opción para que lo puedas utilizar como salida, porque de lo contrario queda configurado como entrada....
Saludos...! :)