miércoles, 30 de marzo de 2016

Ejercicio Nº2

;    Ejercicio 02:
;    Definir un número de 16 bits (Ejem: d'25503') y guardar la parte alta
;    de éste en un registro "NumH" y la parte baja en "NumL"


;    Solución: (Autor: JeysonJMG)

; Lo normal para almacenar un número de 16bits , seria dar los valores directamente 

; a NumH y NumL, sin embargo para variar un poco y facilitar las cosas, he creado
; la siguiente macro que nos permite ingresar cualquier numero entre 0 y 65536 (decimal)
; y guardar la parte alta y baja en los registros que nosotros le indiquemos.

; En cuanto a optimización del código, no se ve afectado ya que se hace uso de las 
; directivas if,else,endif que de acuerdo a determinadas situaciones verá que parte del
; codigo deberá ensamblar al momento de compilar. Es decir, como lo dije en un principio
; seria como dar los valores directamente a NumH y NumL. Nos facilita y resulta más
; cómodo la lectura del codigo y el ingreso del número.  Jeizon1L

 ; ********** MACRO **********
CargarNumero16bits macro Numero,RegParteAlta,RegParteBaja
local j,k    ; Variables macro locales
;Observación: Numero es constante (cualquier valor entre 0x00y 0xFFFF)
        if    Numero>.255
            j=Numero/.256
            k=Numero-j*.256
            movlw    j
            movwf    RegParteAlta
            movlw    k
            movwf    RegParteBaja
        else
            clrf    RegParteAlta
            movlw    Numero
            movwf    RegParteBaja
        endif
endm

, ************************


; Programa:

    __config _CP_OFF & _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF
    RADIX    DEC   
    list    p=16f877a ; uC utilizado
    include    <p16f877a.inc> ; fichero pregrabado en mplab del uC utilizado
   
    CBLOCK 0x20 ; Memoria RAM del usuario (Banco-0)

    NumH
    NumL

    endc
   
    ORG    0
   
    ;Numero de 16bits (entre  0x00 (0)y 0xFFFF(65535)):
    Numero=.25503
    CargarNumero16bits    Numero,NumH,NumL   
    ;*******************
   
    sleep
    END


Simulación en MPLAB:



No hay comentarios:

Publicar un comentario

Deja tus dudas, comentarios aquí.