Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

20/09/2016 #1


Dudas en este código en MPLAB
Código PHP:
Bit8_cdu
    clrf    cen
    clrf    dec
    clrf    uni
    movf    dato
,f
    btfss    status
,z
    
goto    no_es_cero_dato    
    
return
    
no_es_cero_dato
    movlw    d
'10'
    
subwf    dato,w
    btfsc    status
,c
    
goto    dato_es_mayor_igual_a_10
    movf    dato
,w
    movwf    uni
    
return
dato_es_mayor_igual_a_10
    movlw    d
'10'
    
subwf    dato,f
    incf    dec
,f
    movlw    d
'10'
    
subwf    dec,w
    btfss    status
,z
    
goto    no_es_cero_dato
    incf    cen
,f
    clrf     dec
    
goto    no_es_cero_dato 
20/09/2016 #2
Moderador

Avatar de D@rkbytes

Ese código está en lenguaje ensamblador, MPLAB es un entorno de desarrollo.
¿Cuál es la duda?
24/09/2016 #3


Mi duda es, cómo funciona al restarle respectivamente la centena, decena y unidad 10, es decir, evalúa si la última operación es igual a 0, pero cómo va almacenando cada cifra ya sea centena, decena o unidad que obtiene por la entrada? Gracias de antemano.
24/09/2016 #4
Moderador

Avatar de D@rkbytes

Para entender el proceso del programa, necesitas estudiar las instrucciones del compilador.
También necesitas estudiar sobre los registros y para qué sirve cada bit de los mismos.

Espero que con el programa comentado lo puedas comprender.
Código PHP:
Bit8_cdu
    clrf    cen                            
Limpiar la variable "cen" (La pone en 0)
    
clrf    dec                            Limpiar la variable "dec" (La pone en 0)
    
clrf    uni                            Limpiar la variable "uni" (La pone en 0)
    
movf    dato,f                        Guardar "dato" en el acumulador F
    btfss    status
,z                    Comparar el bit Z (Cerodel registro STATUS (Saltar si es 1)
    goto    
no_es_cero_dato                Si está en 0ir a "no_es_cero_dato"
    
return                                ; Si está en 1Regresar
    
no_es_cero_dato
    movlw    d
'10'                        Cargar 10 en el acumulador W
    subwf    dato
,w                        Se resta el valor de "dato" al acumulador W
    btfsc    status
,c                    Comparar el bit C (Carry Acarreodel registro STATUS (Saltar si es 0)
    goto    
dato_es_mayor_igual_a_10    Si está en 1ir a "dato_es_mayor_igual_a_10"
    
movf    dato,w                        Si está en 0guardar "dato" en el acumulador W
    movwf    uni                            
Mover el contenido del acumulador W a la variable "uni"
    
return                                ; Regresar
dato_es_mayor_igual_a_10
    movlw    d
'10'                        Cargar 10 en el acumulador W
    subwf    dato
,f                        Se resta el valor de "dato" al acumulador F
    incf    dec
,f                        Incrementar la variable "dec"
    
movlw    d'10'                        Cargar 10 en el acumulador W
    subwf    dec
,w                        Se resta el valor de "dec" al acumulador W
    btfss    status
,z                    Comparar el bit Z (Cerodel registro STATUS (Saltar si es 1)
    goto    
no_es_cero_dato                Si está en 0ir a "no_es_cero_dato"
    
incf    cen,f                        Si está en 1incrementar la variable "cen"
    
clrf    dec                            Limpiar la variable "dec" (La pone en 0)
    goto    
no_es_cero_dato                Ir a "no_es_cero_dato" 
26/09/2016 #5


Vale, entonces para millares, tocaría seguir:
movlw d'10'
subwf dato,f
incf cen,f
movlw d'10'
subwf cen,w
btfss status,z
goto no_es_cero_dato1
incf mill,f
clrf cen
Te anexo códigos y simulación.
Archivos Adjuntos
Tipo de Archivo: rar Display.rar (44,3 KB (Kilobytes), 1 visitas)
26/09/2016 #6
Moderador

Avatar de D@rkbytes

Prácticamente sí, pero ya serán 16 bits y deberás usar dos puertos, aparte de multiplexar los displays.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.