problema con salidas digitales con 16f886 y ensamblador

Hola que tal ya tengo un poco de tiempo en el foro pero por lo regular no pregunto ya que en otras preguntas resuelven mi duda pero en esta ocacion no he encontrado como resolver mi problema, ahora al punto, es algo muy sencillo solo es prender y apagar led con los puertos son 24 leds usando los tres puertos del pic con oscilador interno y el MCLR es pin de entrada con un boton para seleccionar la secuencia de los led, el problema es es el siguiente en la secuencia de prender los leds uno por uno aste que 8 esten prendidos prendo el r1 luego el r2 y asi asta el r8 pero cuando mando a prender el r2 se apaga el r1 y cuando prendo el r3 se apaga el r2 y cuando prendo el r4 se queda prendido el r3 eso es como debe ser y asi se prenden son problemas pero el r1 y r2 dan problema y asi es algo parecido con los g1-g8 y con los b1-b8 , solo por aclarar esta programado en asm pongo parte del codigo para ver si ahi pueda ser el problema les agradeceria que me ayudaran PD cuando hago simulacion en la computadora hace lo mismo :confused: y me es muy raro que tambien lo haga en simulacion el problema podria estar en la linea _config???


Código:
 list P=16F886 ; indicamos el modelo de PIC que tenemos

#include "P16F886.inc"
    __CONFIG _CONFIG1, _MCLRE_OFF & _PWRTE_OFF & _LVP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _FCMEN_OFF & _IESO_OFF & _BOR_OFF
    org             0x0000
; registros
         ;bcf   STATUS,IRP
        ;bsf   STATUS,RP0
        ;bcf   STATUS,RP1
        banksel     ADCON0
        BCF            ADCON0,ADON
        Banksel     TRISA
        MOVLW           B'00000000'
          movwf          TRISA
        MOVLW        B'00000000'
        MOVWF        TRISB
        MOVLW        B'00000000'
        MOVWF        TRISC
        MOVLW        B'11111111'
        MOVWF        TRISE
        banksel PORTA
#DEFINE R1     PORTA,0
#DEFINE G1     PORTA,1        
#DEFINE B1     PORTA,2        
#DEFINE R2     PORTA,3
#DEFINE G2     PORTA,4        
#DEFINE B2     PORTA,5
#DEFINE R3     PORTA,7
#DEFINE G3     PORTA,6        
#DEFINE B3     PORTC,0
#DEFINE R4     PORTC,1
#DEFINE G4     PORTC,2        
#DEFINE B4     PORTC,3
#DEFINE R5     PORTC,4
#DEFINE G5     PORTC,5        
#DEFINE B5     PORTC,6
#DEFINE R6     PORTC,7
#DEFINE G6     PORTB,0        
#DEFINE B6     PORTB,1
#DEFINE R7     PORTB,2
#DEFINE G7     PORTB,3        
#DEFINE B7     PORTB,4
#DEFINE R8     PORTB,5
#DEFINE G8     PORTB,6        
#DEFINE B8     PORTB,7

#DEFINE BOT PORTE,3

PDel0  equ 0x20          ;Usado en la rutina Delay
PDel1  equ 0x21      ;idem
PDel2  equ 0x22      ;idem
VAR        EQU 0X23
        movlw    b'00000000'
        movwf    PORTA
        movlw    b'00000000'
        movwf    PORTB
        movlw    b'00000000'
        movwf    PORTC
        movlw    3
        movwf    VAR

INICIO    


        movlw        4; NUMERO MAXIMO DE CICLOS EN EL PROGRAMA
        SUBWF          VAR,W ;resta el valor W del valor DE VAR
        BTFSS        STATUS,Z; si es cero la resta el bit Z se pone en uno y se revisa 
        GOTO         UNO
        MOVLW        1
        MOVWF        VAR

UNO        movlw        1; NUMERO QUE INDICA CUAL ES LA RUTINA PARA SELECCIONAR
        SUBWF          VAR,W ;resta el valor W del valor DE VAR
        BTFSS        STATUS,Z; si es cero la resta el bit Z se pone en uno y se revisa 
        GOTO         DOS
        GOTO        RUTINA1
DOS        movlw        2; NUMERO QUE INDICA CUAL ES LA RUTINA PARA SELECCIONAR
        SUBWF          VAR,W ;resta el valor 0x23 del valor de la letra ulsada
        BTFSS        STATUS,Z; si es cero la resta el bit Z se pone en uno y se revisa 
        GOTO         TRES
        GOTO        RUTINA2
TRES    movlw        3; NUMERO QUE INDICA CUAL ES LA RUTINA PARA SELECCIONAR
        SUBWF          VAR,W ;resta el valor 0x23 del valor de la letra ulsada
        BTFSS        STATUS,Z; si es cero la resta el bit Z se pone en uno y se revisa 
        GOTO         INICIO
        GOTO        RUTINA3

RUTINA3
        BSF        R1
        ;CALL     DE500MS
        MOVLW    0XFF
        MOVLW    0
        CALL    CAMBIO
        BSF        R2
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        R3
        BSF        R2
        BSF        R1
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        R4
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        R5
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        R6
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        R7
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        R8
        BSF        R7
        ;CALL     DE1S
        ;CALL    CAMBIO
        BCF        R1
        BCF        R2
        BCF        R3
        BCF        R4
        BCF        R5
        BCF        R6
        BCF        R7
        BCF        R8
        
        BSF        G1
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        G2
        BSF        G1
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        G3
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        G4
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        G5
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        G6
        BSF        G5
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        G7
        BSF        G6
        BSF        G5
        ;CALL     DE500MS
        ;CALL    CAMBIO
        BSF        G8
        ;CALL     DE1S
        ;CALL    CAMBIO
        BCF        G1
        BCF        G2
        BCF        G3
        BCF        G4
        BCF        G5
        BCF        G6
        BCF        G7
        BCF        G8

        BSF        B1
        ;CALL     DE500MS
        BSF        B2
        BSF        B1
        ;CALL    CAMBIO
        ;CALL     DE500MS
        BSF        B3
        ;CALL    CAMBIO
        ;CALL     DE500MS
        BSF        B4
        ;CALL    CAMBIO
        ;CALL     DE500MS
        BSF        B5
        ;CALL    CAMBIO
        ;CALL     DE500MS
        BSF        B6
        BSF        B5
        ;CALL    CAMBIO
        ;CALL     DE500MS
        BSF        B7
        BSF        B6
        BSF        B5
        ;CALL    CAMBIO
        ;CALL     DE500MS
        BSF        B8
        ;CALL    CAMBIO
        ;CALL     DE1S
        BCF        B1
        BCF        B2
        BCF        B3
        BCF        B4
        BCF        B5
        BCF        B6
        BCF        B7
        BCF        B8
        GOTO     RUTINA3


    GOTO INICIO


CAMBIO    BTFSS  BOT
        RETURN
        INCF    VAR,W
        MOVWF    VAR
        movlw    b'00000000'
        movwf    PORTA
        movlw    b'00000000'
        movwf    PORTB
        movlw    b'00000000'
        movwf    PORTC
        CALL     DE500MS
        GOTO     INICIO

        

END
 
Última edición por un moderador:
pues aqui de nuevo solo para comentar que ya pude resolver el problema 5 horas despues :oops: todo el asunto fue en que no estaba poniendo en ceros el registro ANSEL Y ANSELH, despues de limpiar el registro del PORTA Y PORTB limpio los ANSEL y problema resuelto :D
bueno por si alguien tiene un problema igual pues aqui esta una solucion del problema

gracias a todos (y)
 
Atrás
Arriba