; 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í.