Autor Tema: Problema con el pin RB3 del PIC16F876A  (Leído 2812 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado venom1320

  • PIC10
  • *
  • Mensajes: 4
Problema con el pin RB3 del PIC16F876A
« 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

Desconectado erikucha

  • PIC10
  • *
  • Mensajes: 1
Re: Problema con el pin RB3 del PIC16F876A
« Respuesta #1 en: 21 de Septiembre de 2009, 20:53:48 »
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...!  :)