Autor Tema: adresl 16f877a  (Leído 2161 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado RAMAR

  • PIC10
  • *
  • Mensajes: 1
adresl 16f877a
« en: 25 de Abril de 2007, 09:41:59 »
Que chicharron.
Requiero de una explicacion .asm de como llevar los datos del registro ADRESL  16f877 a una lcd y que estos datos representen un valor maximo de 100 en decimal y un minimo de 000 den decimal todo esto visto en una pantalla. Se que se requiere hacer una conversion de hexa del registro adresl a decimal, mejo ahun el ASCII de unidades decenas y centenas para que lo lea la lcd.
 :-/
Gracias pelaos a y pelaas
NINPO.

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: adresl 16f877a
« Respuesta #1 en: 25 de Abril de 2007, 14:39:53 »
Mira este post:
http://www.todopic.com.ar/foros/index.php?topic=8518.0

Para pasar un número bcd a código ascci solo debes sumar 48 en decimal, o 0x30h (en hexadecimal)

saludos.
Pereira - Colombia

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: adresl 16f877a
« Respuesta #2 en: 01 de Mayo de 2007, 18:05:31 »
Para pasar un número bcd a código ascci solo debes sumar 48 en decimal, o 0x30h (en hexadecimal)

Antes de hacer eso, hay que separar cada nibble del número en BCD, sino mostrará cualquier cosa.

Por ej.

BCD = 0x34 = 52dec


Lo que se quiere visualizar es claramente 34, si le sumamos 48dec a 52dec así sin más, visualizaremos el caracter Ascii 100, que es una "d"

Lo que debe hacerse es tomar el nibble superior, moverlo al nibble inferior y luego borrar el nibble superior. 


Código: ASM
  1. movlw   0x34
  2.      movwf   NUM_BCD
  3.      
  4. ;Convertir a ASCII
  5.  
  6. ; Digito Decenas
  7.      
  8.      swapf   NUM_BCD,w        ; intercambio nibble inferior y superior. WREG = 0x43
  9.      andlw   0x0F             ; borro nibble superior. WREG = 0x03
  10.      addlw   .48              ; Ahora si le sumo 48dec --> WREG = "3"
  11.      movwf   TEMP             ; TEMP = 3 en ASCII o 51dec.
  12.  
  13.                               ; Aca se hace lo que uno desee con TEMP.
  14.  
  15. ; Digito Unidades
  16.      movf    NUM_BCD,w
  17.      andlw   0x0F             ; borro nibble superior. WREG = 0x04
  18.      addlw   .48              ; Ahora si le sumo 48dec --> WREG = "4"
  19.      movwf   TEMP             ; TEMP = 4 en ASCII o 52dec.


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything