Ordenar de Forma Ascendente el resultado de datos

Buenas electrónicos!
Tengo una duda! Resulta que estoy realizando un Proyecto de la creación de un voltímetro que mida en 6 voltajes diferentes, (voltaje comprendido entre 0v y8v) mediante el uso del Microcontrolador 16f887, acontece que una de las opciones a este MicroC que se le debe agregar es:

Ordenar de Forma Ascendente el resultado de los datos (los 6 voltajes medidos por el MicroC), mostrarlos con 1 Segundo de diferencia entre uno y otro.

Tengo el conocimiento de como realizar el retardo de 1 segundo, más no le encuentro la lógica CORTA para ordenar los valores de manera Ascendente (utilizar cualquier valor, cualquier ejemplo), ya que esta no es la única opción que debe llevar este proyecto, y la lógica que estoy usando para realizar esta opción es muy larga!
Esperando su pronta respuesta.Gracias de Antemano.

PD: Si está algún tema ya publicado como este, por favor mandar el Link que la misma, ya que realicé la búsqueda hasta 100 páginas y no encontré nada.
 
Muy buenas, no dices en que lenguage estás programando. Si estás con alguno de alto nivel (C, basic,...) puedes utilizar el metodo de la burbuja, es poco eficiente pero es muy corto y facil de implementar, solamente con dos "for" anidados.

Busca en google que el te explicará el algoritmo.

Un saludo
 
En caso de asm también se puede usar el mismo método, sólo que debes asegurarte de poner las 6 variables consecutivas, luego creas 2 bucles (uno anidado en el otro) haciendo las funciones de un for. Dentro de los bucles tienes que acceder a las variables haciendo uso del direccionamiento indirecto.

Un saludo.
 
Eso mismo! tengo certeza de que debo trabajar con el FSR y el INDF, mas sin embargo esos bucles anidados no encuentro el modo de como escribirlos =S!
 
Método "Burbuja"

Código "Encontrado" y sin verificar

Código:
******ESTE PROGRAMA ORGANIZA DATOS CON EL METODO DE BURBUJA*********
TITLE PRAC6_1                
.MODEL SMALL                 
.STACK 100h
.DATA                         
        MSG1    DB      'INTRODUZCA DIGITOS Y ENTER PARA TERMINAR: $'       
        ARREGLO DB      100 DUP(0)      
.CODE
 MAIN   PROC
        MOV     AX,@DATA                  
        MOV     DS,AX                     
        MOV     SI,0
        LEA     DX, MSG1
        MOV     AH,9                      
        INT     21h                       
        XOR     CX,CX
        MOV     CL,13
        MOV     CH,0
        XOR     BX,BX
        XOR     DX,DX                     
        MOV     BX,1
        MOV     AH,1
PIDE_DATO:
        CMP     DL,CL
        JE      ORDENA
        INT     21h
        CMP     AL,CL
        JE      ORDENA
        MOV     ARREGLO[SI],AL
        INC     SI
        JMP     PIDE_DATO
ORDENA:
        MOV     BP,SI
CONTINUA:
        CMP     SI,0
        JE      FIN
        CMP     SI,1
        JE      IMPRIME
        MOV     DL,1
        MOV     CX,BP
        MOV     SI,0
BURBUJA:
        CMP     DL,0
        JE      IMPRIME
        MOV     DL,0
        MOV     BL,ARREGLO[SI]
        MOV     BH,ARREGLO[SI+1]
        CMP     BL,BH
        JBE     OTRO
        MOV     AL,ARREGLO[SI]
        MOV     ARREGLO[SI],BH
        MOV     ARREGLO[SI+1],AL
        INC     SI
        MOV     DL,1
        DEC     CL
        CMP     CL,1
        JE      CONTINUA
        JMP     BURBUJA
OTRO:
        INC     SI 
        DEC     CL
        CMP     CL,0
        JE      ORDENA
        JMP     BURBUJA
IMPRIME:
        MOV     AH,2
        MOV     DL,10
        INT     21h
        MOV     AH,2
        MOV     DL,13
        INT     21h
        MOV     CX,BP
        MOV     SI,0
CICLO:
        CMP     CL,0
        JE      FIN
        MOV     DL,ARREGLO[SI]
        INT     21h
        INC     SI
        DEC     CL
        JMP     CICLO
FIN:
        MOV     AH,4CH                     
        INT     21h                       
MAIN   ENDP                      
        END MAIN
 
Última edición:
Amigo, mil gracias, pero ni idea de que lenguaje es el programa que acabas de publicar =S
Me faltó acotar en la publicación que estoy tratando con lenguaje Assembler, sino es mucha molestia
Gracias!
 
Aquí te dejo una libreria que realiza lo que necesias, creo que funciona.
Este es el ejemplo de como funciona

Código:
		__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
		LIST	P=16F84
		INCLUDE <P16F84A.INC>

		CBLOCK	0x0C

		UNO
		DOS
		TRES
		CUATRO
		CINCO
		SEIS
		SIETE
		OCHO
		ENDC


;ZONA CODIGOS

		ORG		0

Inicio

; variables a ordenar

		movlw	d'3'
		movwf	UNO
		movlw	d'1'
		movwf	DOS
		movlw	d'7'
		movwf	TRES
		movlw	d'2'
		movwf	CUATRO
		movlw	d'4'
		movwf	CINCO
		movlw	d'6'
		movwf	SEIS
		movlw	d'5'
		movwf	SIETE
		movlw	d'9'
		movwf	OCHO

;uso de la libreria

		movlw	d'7'
		call	Tamaño

		movlw	0x0C
		call	Dir_Memoria
		call	Ordenar		

;ordenado

		SLEEP

		INCLUDE<BURBUJA.inc>
		END

Un saludo
 

Adjuntos

  • BURBUJA.rar
    1.1 KB · Visitas: 61
Atrás
Arriba