corrección Conteo binario en mplab

Hola intento hacer un conteo binario del puerto b en el pic16f628A, uso como indicadores leds en todo el puerto B, pero cuando corro el programa solo me muestra un led encendido, el programa debe consistir, que al principio todo el puerto B este apagado menos un bit (00000001), al momento de presionar un boton en el puerto A, que se baya incrementando el puerto B, hasta llegar a 250 intente hacerlo con INCF, pero no supe muy bien como usar este comando, a si que use el siguiente código, no se si me puedan ayudar a corregir el programa, o ayudarme en poder usar el INCF GRACIAS :D

Código:
         list p=16f628a
	#include <p16f628a.inc> 

	__CONFIG _CP_OFF& _WDT_OFF& _PWRTE_ON& _MCLRE_ON& _LVP_OFF&     _INTOSC_OSC_NOCLKOUT
    REC1 EQU 0X20
    INC  EQU 0X22
    REC2 EQU 0x21
    INC2  EQU 0X23
	org 0
	goto CONFIG_PUERTOS
	org 5
	CONFIG_PUERTOS
	    CLRF PORTA
	    CLRF PORTB

		bcf STATUS,RP1
		bCf STATUS,RP0

		movlw	0x07
		movwf	CMCON
	
		   
	    bcf STATUS,RP1
	    bSf STATUS,RP0
		
            movlw   b'11111111'
	    movwf   TRISA
            movlw     0x00	
	    movwf	TRISB
	    
	    bcf STATUS,RP1
	    bCf STATUS,RP0
	

;EL PROGRAMA COMIENZA SIN PRESIONAR PORTA,0
INICIO
      
      BTFSS PORTA,0
      GOTO APAGADO 
      CALL RETARDO;MANDO LLAMAR LA SUBRRUTINA PARA ELIMINAR REBOTES 
      
      
      MOVLW .250
      MOVWF INC2
RETARDO2  
      MOVLW .250
      MOVWF INC 
RETARDO3 
      MOVLW .1  ; le doy a w el valor de 1
      ADDWF PORTB ; sumo lo que hay en el puerto b con w
      movwf	PORTB 
      NOP
      DECFSZ INC,1 
      GOTO RETARDO3 
      NOP
      DECFSZ INC2,1
      GOTO RETARDO2 
      GOTO INICIO 
APAGADO
      MOVLW B'00000001'
      MOVWF PORTB
      GOTO INICIO 
      

;;;;;;;;;;;; subrrutina     
RETARDO 
      MOVLW .100
      MOVWF REC1
OTRO2  
      MOVLW .100
      MOVWF REC2
OTRO1 
      DECFSZ REC2,1
      GOTO OTRO1
      
      DECFSZ REC1,1
      GOTO OTRO2 
  
      RETURN 
      END
 
Última edición por un moderador:
Está algo enredado el programa pero alcanzo a distinguir lo que creo es el problema principal. Si te fijas, en esta parte:

Código:
BTFSS PORTA,0
GOTO APAGADO 
CALL RETARDO;MANDO LLAMAR LA SUBRRUTINA PARA ELIMINAR REBOTES

Tan pronto como RA0 sea =0 se entrará a la parte de APAGADO poniendo a PORTB=0x01 y borrando la cuenta anterior.

Para solucionarlo haz esto:

Código:
movlw   0x01
movwf   PORTB   ;PORTB=1
 
Espera              ;Lazo para esperar tecla
btfss  PORTA,.0
goto   Espera    ;Si no se presiona tecla, no incrementa contador
.
.
.
Saludos
 
Hola, ahora realicé un código usando incf para hacer el contador binario, pero no hace nada jajaja.
No sé cual es el problema. No sé si me pueden decir el problema.

Código:
INICIO 
      BTFSS PORTA,0 ; PREGUNTO SI ESTA PRESIONADO
      GOTO  INICIO  ; SI NO PRESIONO EL BOTON VUELVE A INICIO 
      CALL  RETARDO ; ELIMINO REBOTES 
      INCF  INC,1 ; INCREMENTO LA VARIABLE INC 
      MOVF  INC ; W = INC 
      MOVWF PORTB ; PUERTO B = W 
      GOTO  INICIO ; REGRESA A INICIO 

; subrrutina     
RETARDO 
      MOVLW .250
      MOVWF REC2
OTRO2  
      MOVLW .250
      MOVWF REC1
OTRO1 
      NOP 
      DECFSZ REC2,1
      GOTO OTRO1
      
      DECFSZ REC1,1
      GOTO OTRO2 
  
      RETURN 
      END
 

Adjuntos

  • Captura de pantalla 2014-10-05 12.37.34.jpg
    Captura de pantalla 2014-10-05 12.37.34.jpg
    115.1 KB · Visitas: 3
Última edición por un moderador:
Conecta la terminal MCLR del PIC a V+.
En la programación veo raro tu bucle de espera, los registros que se decrementan están invertidos; debe ser:

Código:
RETARDO 
      MOVLW .250
      MOVWF REC2
OTRO2  
      MOVLW .250
      MOVWF REC1
OTRO1 
      NOP 
      DECFSZ REC1,1
      GOTO OTRO1
      
      DECFSZ REC2,1
      GOTO OTRO2 
  
      RETURN 
      END
 
Atrás
Arriba