jonas13.como me pedistes ayuda por privado,te pondre la forma en la que yo haria el programa.no pongo el asm porque no tengo tiempo con los proyectos que ya tengo
pero esto te ayudara bastante.
para poder detectar si hay una coordenada cerca.yo haria lo siguiente:
lo primero es alojar las coordenadas recividas del gps en la memoria ram.por ejemplo:
cojemos la trama siguiente. $GPGGA,001430.003,3907.3885,N,12102.4767,W,1,05,02.1,00545.6,M,-26.0,M,,*5F
donde los datos que nos interesan son: 3907.3885 y 12102.4767 que son las coordenadas
en este ejemplo 39º serian los grados. 07,3885' son los minutos decimales.si quisieramos representralos en grados,minutos segundos.
tendriamos que hacer lo siguiente:
39º se deja como esta 07' que es la parte entera como esta.y ahora cogemos el valor 0.3885 y lo multiplicamos por 60.
0.3885 x 60= 23,31" la coordenada seria 39º07'23,31" y segun la circuferencia de la tierra he calculado que cada segundo son 30 mtrs. pero en esto puedo equivocarme.
de todas formas estos calculos solo nos sirven para visualizar las coordenadas en un display.si es que queremos modificarlas.
aqui solo queremos que el pic pueda detectar cuando nos acercamos a una coordenada preestablecida.
pues bien tendremos que realizar un programa que nos guarde en unos registros las coordenadas que van a ser actualizadas cada segundo.que va a ser
el tiempo que el gps nos mandara los datos.
serian los siguientes registros: uno por cada caracter.
UNIDAD_GRADOS_E
DECENAS_GRADOS_E
UNIDAD_MINUTOS_E
DECENAS_MINUTOS_E
UNIDAD_SEGUNDOS_E
DECENAS_2SEGUNDOS_E
UNIDAD_SEGUNDOS2_E
DECENAS_2SEGUNDOS2_E
UNIDAD_GRADOS_W
DECENAS_GRADOS_W
UNIDAD_MINUTOS_W
DECENAS_MINUTOS_W
UNIDAD_SEGUNDOS_W
DECENAS_2SEGUNDWS_W
UNIDAD_SEGUNDOS2_W
DECENAS_2SEGUNDOS2_W
tambien podemos realizar un direccionamiento directo.
como los datos recividos del gps son caracteres ASCII.tendremos que realizar un subprograma para convertir los valores ASCII en valores numericos hexadecimales
asi que el primer valor 39 cogeremos el 9 que es la unidad de los grados.
9 ascii=39hex asi que como en la tabla ascii,la diferencia entre el caracter 9 y los consecutivos hasta el 0.son que hay que restarle 30h.
pues lo tenemos muy facil para cojer el valor de la unidad.que seria 39h-30h=09h.facil
coger el valor de las decenas es un poco mas complicado.pero no imposible.asi se procede.
3 ascii=33hex 33h-30h=03h ahora solo hay que hacer un SUAPF y cambiamos los nibles de sitio= 30h.seguidamente lo sumamos con el valor 09h y tenemos el valor 39h
preparado para meterlo en un registro.de esta forma hemos ahorrado un byte en la pareja de los grados y el valor esta preparado para poder realizar operaciones arismeticas con el.
ya solo queda aplicarlo a las demas parejas de caracteres.con esto ahorramos 8bytes en cada coordenada respecto a los 16 bytes que ocupan los caracteres ascii
ya quedaria el subprograma para guardar la coordenada y el de comparacion.
el de guardar la coordenada es facil.que al pulsar un boton.se guarde en la eeprom de datos la coordenada gps actual.y asi sucesivamente hasta que la llenemos.
la comparacion ya es otra cosa.ya que tenemos que realizar un programa que esta constantemente comparando las coordenadas guardadas en la eeprom
de datos con la coordenada actual.que tendremos en un registro temporal que va cambiando cada segundo."aunque yo recomiendo pasar la eeprom de datos a la ram.porque sino ralentizariamos el programa y no nos leeria las coordenadas cada segundo."
para ello realizaremos restas de estos valores y conforme se vallan acercando la coordenada E o la W.con respecto a la almacenada en la eeprom habra un registro que contendra la diferencia.esta diferencia seran los metros que hay hasta la coordenada pregrabada.
pero bueno.ya es tarde y no puedo escribir mas .asi que si a alguien le interesa el final del cuento,ya me dira algo por aqui.
saludos.