Una pequeÑa ayuda en secuencia de leds

Bueno que tal amigos tengo un problema con este programa en PIC16f877A.El programa tiene 4 secuencias y trata de encender 11 Leds (8 del puerto C y 3 del puerto D). En el encendido de los 8 leds del puerto C no hay ningun problema pero los 3 del puerto D no encienden para nada. Quisiera ver si le pueden dar una mirada a la programacion y decirme en que estoy fallando porfavor.gracias

PD: adjunto la programacion que esta en asm (mplab) y la imagen del proteus.



HTML:
		INCLUDE		<P16F877A.INC>
        __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
    
	
        CBLOCK      0X20
SEC		
REG1
REG2	
REG3	
        ENDC


		ORG		0x00
		GOTO		MAIN
		ORG		0x04
		GOTO		PAUSA
		
		
MAIN	
		BCF 		STATUS,RP1
		BSF		STATUS,RP0
		CLRF		PORTC
        	CLRF            TRISD
		MOVLW		B'11111111'
		MOVFW       	PORTB
		BCF		STATUS,RP0
		BSF		INTCON,7		;CONFIGURO INTERRUPCION
		BSF		INTCON,3
		BCF		INTCON,0
		
INICIO	
		CLRF		PORTC
		CLRF        	PORTD
		CLRF		SEC

PREG1	
		BTFSS		SEC,0
		GOTO		PREG2
		GOTO 		S1
PREG2	
		BTFSS		SEC,1
		GOTO		PREG3
		GOTO		S2
PREG3	
		BTFSS		SEC,2
		GOTO		PREG4
		GOTO		S3
PREG4	
		BTFSS		SEC,3
		GOTO		PREG1
		GOTO		S4
		
S1
		MOVLW		B'10101010'
		MOVWF		PORTC
        	MOVLW		B'00000111'
		MOVWF		PORTD
		CALL		RETARDO
		CLRF		PORTC
		CLRF		PORTD
		CALL		RETARDO
		GOTO		PREG1
		
S2
		MOVLW		B'11001100'
		MOVWF		PORTC
		MOVLW		B'00000111'
		MOVWF		PORTD
		CALL		RETARDO
var1
		BTFSS		SEC,1
		GOTO		PREG1
		COMF		PORTC,F
       		COMF		PORTD,F
		CALL		RETARDO
		GOTO		var1
S3
		MOVLW		B'00110000'
		MOVWF		PORTC
		MOVLW		B'00000111'
		MOVWF		PORTD
		CALL		RETARDO
var2	
		BTFSS		SEC,2
		GOTO		PREG1
		RLF		PORTC
		RLF		PORTD
		CALL		RETARDO
		GOTO		var2
		
S4		MOVLW		B'00010000'
		MOVWF		PORTC
		MOVLW		B'00000111'
		MOVWF		PORTD
		CALL		RETARDO
var3
		BTFSS		SEC,3
		GOTO		PREG1
		RRF		PORTC
		RRF		PORTD
		CALL		RETARDO
		GOTO		var3
		
		
PAUSA	
		BCF		INTCON,7		

CHECA_BOTON
		BTFSC		PORTB,4
		GOTO		$+4
		CALL		ANTIRREBOTES
		MOVLW		B'00000001'
		MOVWF		SEC
		BTFSC		PORTB,5
		GOTO		$+4
		CALL		ANTIRREBOTES
		MOVLW		B'00000010'
		MOVWF		SEC
		BTFSC		PORTB,6
		GOTO		$+4
		CALL		ANTIRREBOTES
		MOVLW		B'00000100'
		MOVWF		SEC
		BTFSC		PORTB,7
		GOTO		$+4
		CALL		ANTIRREBOTES
		MOVLW		B'00001000'
		MOVWF		SEC
		GOTO		SALIDA

ANTIRREBOTES
		BTFSS		PORTB,4
		GOTO		ANTIRREBOTES
		BTFSS		PORTB,5
		GOTO		ANTIRREBOTES
		BTFSS		PORTB,6
		GOTO		ANTIRREBOTES
		BTFSS		PORTB,7
		GOTO		ANTIRREBOTES
		RETURN
		
SALIDA	
		BSF		INTCON,7
		BCF		INTCON,0
		retfie

RETARDO	
		MOVLW		10
		MOVWF		REG1
TRES
		MOVLW		20
		MOVWF		REG2
DOS
		MOVLW		30
		MOVWF		REG3

UNO		DECFSZ		REG3,1
		GOTO		UNO
		DECFSZ		REG2,1
		GOTO		DOS
		DECFSZ		REG1,1
		GOTO		TRES
		RETURN

		
		END
URL]
 
Última edición:
Si estuviera en C....te ayudaria...pero aun no programo mplab..... disculpa.
Espeto tengas suerte..... y que sin duda alguien mas te ayudara
 
Hola

No he tenido tiempo de simular con el MPLAB pero si el puerto C te hace la operacion
correctamente y el puerto D no te enciende ningun led puede ser que la configuracion no sea la correcta
BCF STATUS,RP1
BSF STATUS,RP0
CLRF PORTC
CLRF TRISD
MOVLW B'11111111'
MOVFW PORTB
BCF STATUS,RP0

Unos puertos los pones como PORTC,PORTB y el que no hace nada esta como TRISD

Un saludo
 
Si quieres que te ayuden facilitanos el archivo en isis, seria mucho trabajo estar armando el circuito configurando para simular eso toma tiempo.
Si ya lo tienes en ISIS.
 
Última edición:
Hola, prueba en usar el WATCH en VIEW del MPLAB.

Ahi selecciona el PORTD y veras si cambian los bits.

Saludos.

Perdon, pero eso siempre y cuando estes en modo Debugger y corras algun simulador, como el MPLAB SIM y si tenes pulsadores tendras que usar el STIMULUS dentro de Debugger.

Saludos
 
Última edición:
Un saludo
Siento el haberme precipitado en mi primer post
Al simular el programa me he dado cuenta , pues si que muestra el puerto D los bits en alto, es que los bits activados son RD0,RD1,RD2 y en el diagrama de proteus los diodos estan conectados a RD7,RD6,RD5

Los diodos no efectuan el encendido en la primera secuencia pero si en el resto

Revisa el circuito o el programa y efectuara las secuencias que deseas

Un saludo
 
Atrás
Arriba