Autor Tema: Pasar 8 bits a 3 cifras  (Leído 1757 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dioskamisama

  • PIC10
  • *
  • Mensajes: 9
Pasar 8 bits a 3 cifras
« en: 04 de Febrero de 2006, 21:42:00 »
Hola, esta es una pregunta que ya hice... pero quiza no aclare lo suficiente la cuestion. Lo que quiero es poder recibir en hyperterminal (por ejemplo) un numero de 3 cifras que represente el valor de 8 bits del PIC
Por ejemplo si estoy contando quiero enviar el valor del contador via RS232 a la PC. Hasta ahora se me ocurrio este macro, pero creo que debe haber una forma mas sencilla en ASM

bin2decmacro macro _asus, _pato1, _pato2, _pato3
   ;(Probe usar Local, pero no lo sabre usar
   movf _asus, w      ;Copio el valor original para cuando
   movwf bkconstante   ;me paso con la resta restaurarlo
NIVEL1
   movf _asus, w      ;Lo mismo, lo que pasa que lo puse
   movwf bkconstante   ;despues, haciendo arreglos
   movlw d"100"      
   subwf _asus,1      ;Decremento en 100
   btfsc STATUS,C      ;Saltar si no hay carry=Negativo
   incf _pato1,1      ;Hay una centena!!!
   btfsc STATUS,C      ;Saltar si no hay carry=Negativo
   goto NIVEL1      ;volver a revisar si puedo sacar 100
   movfw bkconstante   ;Si me pase=negativo
   movwf _asus      ;apurarse a restaurar el valor anterior
   movlw 0Ah
   movwf aux1      ;Cuento las decenas
Nivel2
   decfsz _asus,f      ;Decrementar saltar si termino
   goto Nivel3      ;me voy fijando si llego a la decena
   Goto Nivel4      ;Fin del calculo
Nivel3   
   decfsz aux1,1      ;decrementar Aux1 10-1
   goto Nivel2      ;Sigo decrementando nro ppal
   incf _pato2,1      ;Complete una decena!!!!
   movlw 0Ah      ;Recarlo las decenas para decrementar
   movwf aux1
   goto Nivel2
Nivel4
   decf aux1,1      ;Como sali antes de llegar decremento
   comf aux1,1      ;Calculo el complemento(uso dec no inc)
   movlw d"245"      ;Y pongo el complemento de una decena
   subwf aux1,W      ;Hago la resta
   movwf _pato3      ;y paso las unidades
   endm

Espero alguna idea ingeniosa... saludos

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Pasar 8 bits a 3 cifras
« Respuesta #1 en: 04 de Febrero de 2006, 22:51:00 »
Hola dioskamisama, si mal no entiendo lo que tu estas haciendo en esa macro es tomar el byts y convertirlo en BCD, ¿es así?

Bueno, si es así lo que te esta faltando es que a cada digito del BCD le sumes D"48", con esto convertís los valores del BCD a ASCII, luego de lo anterior, realizas la transmisión de la manera convencional.

El Hyperterminal interpreta caracteres ASCII, por ese motivo debes sumarle 48 (en decimal) de esta forma los representara correctamente.

Con lo anterior serán indicados todos los valores uno detrás del otro.

Si tú deseas que el Hyperterminal te indique cada valor leído uno debajo del otro (en columna) deberás enviar seguidamente de lo anterior los datos:

H"0D" = retorno del carro
H"0A" = línea siguiente

Entonces, envías los 3 byts (sumándole 48) correspondientes a los caracteres BCD, enseguida envías H"0D" el cursor regresa al principio, y por ultimo envías H"0A" el cursor pasa a la línea inferior.

De esta ultima forma que te explico cada dato leído y convertido a BCD será indicado en el Hyperterminal uno debajo del otro por orden de llegada.

Espero esto sea lo que andás necesitando, suerte.

Un saludo

Atte. CARLOS
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.


 

anything