Hola, como estas?, te diria que lo mejor es que consideres que en el entorno que vas a trabajar tu paralelo y meridiano virtual seran perpendiculares, luego deberias trabjar alguna rutina de suma y resta de 16 bit, aca te adjunto una:
;*******************************************************************
; Double Precision Addition & Subtraction
;
;*******************************************************************;
; Addition : ACCb(16 bits) + ACCa(16 bits) -> ACCb(16 bits)
; (a) Load the 1st operand in location ACCaLO & ACCaHI ( 16 bits )
; (b) Load the 2nd operand in location ACCbLO & ACCbHI ( 16 bits )
; (c) CALL D_add
; (d) The result is in location ACCbLO & ACCbHI ( 16 bits )
;
; Performance :
; Program Memory : 07
; Clock Cycles : 08
;*******************************************************************;
; Subtraction : ACCb(16 bits) - ACCa(16 bits) -> ACCb(16 bits)
; (a) Load the 1st operand in location ACCaLO & ACCaHI ( 16 bits )
; (b) Load the 2nd operand in location ACCbLO & ACCbHI ( 16 bits )
; (c) CALL D_sub
; (d) The result is in location ACCbLO & ACCbHI ( 16 bits )
;
; Performance :
; Program Memory : 14
; Clock Cycles : 17
;
;************************************************
;variables a declarar:
TemporalLO equ 10
TemporalHI equ 11
ResultadoLO equ 12
ResultadoHI equ 13
;*******************************************************************
; Double Precision Subtraction ( ACCb - ACCa -> ACCb )
;
D_sub call neg_A ; At first negate ACCa; Then add
neg_A comf TemporalLO, F ; negate ACCa ( -ACCa -> ACCa )
incf TemporalLO, F
btfsc STATUS,Z
decf TemporalHI, F
comf TemporalHI, F
;
;*******************************************************************
; Double Precision Addition ( ACCb + ACCa -> ACCb )
;
D_add movf TemporalLO,W
addwf ResultadoLO, F ;add lsb
btfsc STATUS,C ;add in carry
incf ResultadoHI, F
movf TemporalHI,W
addwf ResultadoHI, F ;add msb
retlw 0
parece fea pero anda bien, la baje de por ahi y la he usado varias veces, simulala y veras.
cargas los datos en temporal y resultado, y si queres sumar; call D_add y si queres restar call D_sub.
yo hice algo con gps este verano que empaqueta 15 posiciones codificadas en un sms, le programas el espacio entre punto y punto y genera el mensaje cuando se llena la memoria, esta hecho en un 16f628.
Suerte y hasta luego.
mauri