¿Cómo podría hacer un programa que me ordene una tabla de menor a mayor en mplab?
Hice ésta pero creo que sólo me funciona para los valores que puse en la tabla, no sé cómo hacer si meto mas valores y en orden distinto en la tabla.
Gracias por su atención.
Hice ésta pero creo que sólo me funciona para los valores que puse en la tabla, no sé cómo hacer si meto mas valores y en orden distinto en la tabla.
Gracias por su atención.
PHP:
; 4.4 DE UNA SERIE DE NUMEROS QUE INICIA EN LA DIRECCION (0X21) Y SU LONGITUD EN LA (0X20) ORDENAR DE MENOR A MAYOR
LIST P=16F877A ; SE DECLARA EL PROCESADOR A UTILIZAR
#INCLUDE <P16F877A.INC> ; SE DECLARA LA LIBRERIA DEL PIC16F877A
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ; SE HACE LA CONFIGURACION DE BITS
REG1 EQU 0X20 ; DECIMOS QUE REG1 ESTA EN LA DIRECCION 0X20
REG2 EQU 0X25 ; DECIMOS QUE REG2 ESTA EN LA DIRECCION 0X25
REG3 EQU 0X26 ; DECIMOS QUE REG3 ESTA EN LA DIRECCION 0X26
REG4 EQU 0X27 ; DECIMOS QUE REG4 ESTA EN LA DIRECCION 0X27
REG5 EQU 0X28 ; DECIMOS QUE REG5 ESTA EN LA DIRECCION 0X28
ORG 0X00 ; EL PROGRAMA INICIA EN LA DIRECCION 0X00
CLRF REG1 ; SE LIMPIA EL REG1
CLRF REG2 ; SE LIMPIA EL REG2
CLRF REG3 ; SE LIMPIA EL REG3
CLRF REG4 ; SE LIMPIA EL REG4
CLRF REG5 ; SE LIMPIA EL REG5
TABLA
MOVLW 0x04
MOVWF 0X21
MOVLW 0X01
MOVWF 0X22
MOVLW 0x02
MOVWF 0X23
MOVLW 0X03
MOVWF 0X24
INICIO
MOVLW 0X04 ; SE CARGA EN W UN 04 EN HEXADECIMAL (LONGITUD DE LA TABLA)
MOVWF REG1 ; SE MUEVE W AL REG1
CLRW ; SE LIMPIA W
MOVLW 0X21 ; SE CARGA EN W UN 21 EN HEXADECIMAL
MOVWF FSR ; SE MUEVE W A FSR, INDICANDOLE EN QUE DIRECCION DEBE POSICIONARSE
CLRW ; SE LIMPIA W
NUMERO1
BTFSS INDF,0 ; SE PREGUNTA SI HAY UN UNO EN EL BIT 0 DE INDF
GOTO NUMERO2 ; SALTA A NUMERO2
MOVF INDF,W ; SE MUEVE INDF A W
MOVWF REG2 ; SE MUEVE W AL REG2
INCF FSR,F ; SE INCREMENTA FSR Y SE QUEDA EN FSR
DECFSZ REG1,F ; SE DECREMENTA EL REG1 Y SE QUEDA EN EL REG1
GOTO NUMERO2 ; SALTA A NUMERO2
GOTO FIN ; SALTA A FIN
NUMERO2
BTFSS INDF,1 ; SE PREGUNTA SI HAY UN UNO EN EL BIT 1 DE INDF
GOTO NUMERO3 ; SALTA A NUMERO3
MOVF INDF,W ; SE MUEVE INDF A W
MOVWF REG3 ; SE MUEVE W AL REG3
INCF FSR,F ; SE INCREMENTA FSR Y SE QUEDA EN FSR
DECFSZ REG1,F ; SE DECREMENTA EL REG1 Y SE QUEDA EN EL REG1
GOTO NUMERO3 ; SALTA A NUMERO3
GOTO FIN ; SALTA A FIN
NUMERO3
BTFSS INDF,0 ; SE PREGUNTA SI HAY UN UNO EN EL BIT 0 DE INDF
GOTO NUMERO4 ; SALTA A NUMERO4
BTFSS INDF,1 ; SE PREGUNTA SI HAY UN UNO EN EL BIT 1 DE INDF
GOTO NUMERO4 ; SALTA A NUMERO4
MOVF INDF,W ; SE MUEVE INDF A W
MOVWF REG4 ; SE MUEVE W AL REG4
INCF FSR,F ; SE INCREMENTA FSR Y SE QUEDA EN FSR
DECFSZ REG1,F ; SE DECREMENTA EL REG1 Y SE QUEDA EN EL REG1
GOTO NUMERO4 ; SALTA A NUMERO4
GOTO FIN ; SALTA A FIN
NUMERO4
BTFSS INDF,2 ; SE PREGUNTA SI HAY UN UNO EN EL BIT 2 DE INDF
GOTO NUMERO1 ; SALTA A NUMERO1
MOVF INDF,W ; SE MUEVE INDF A W
MOVWF REG5 ; SE MUEVE W AL REG5
INCF FSR,F ; SE INCREMENTA FSR Y SE QUEDA EN FSR
DECFSZ REG1,F ; SE DECREMENTA EL REG1 Y SE QUEDA EN EL REG1
GOTO NUMERO1 ; SALTA A NUMERO1
GOTO FIN ; SALTA A FIN
FIN
NOP ; NO SE HACE NADA
END
Última edición por un moderador: