necesito ayuda con un proyecto para comunicar un pic con un modulo gps por PICBASIC estoy utilizando un 16F876A.
el problema es el siguiente hice el siguiente código:
'la trama que envío es asi:
'$GPGGA,563452.000,9876.9876,N,23455.6538,E,#,##,2.5,607.75,M,47.6,M,,*67<CR>
ahora bien el problema es que el programa solo lee a primera ves que se ejecuta después no lee mas y se va a la subrutina timeout como si no recibiera tramas
. Una de mis preguntas es wait sirve para que el espere $GPGGA, pero el timeout espera también a $GPGGA o solamente espera a que cualquier tipo de trama llegue?
les agradecería su ayuda por favor, la verdad no tengo ni idea que esta pasando.
nose si quieren que les envíe el archivo para simularlo en proteus
el problema es el siguiente hice el siguiente código:
PHP:
Include "modedefs.bas"
'RCSTA: RECEIVE STATUS ANInclude "modedefs.bas"
'RCSTA: RECEIVE STATUS AND CONTROL REGISTER (ADDRESS 18h)
DEFINE OSC 4 'se define el oscilador en MHz
DEFINE HSER_RCSTA 90h ' Set receive register to receiver enabled
DEFINE HSER_TXSTA 20h ' Set transmit register to transmitter enabled
DEFINE HSER_BAUD 4800 ' Set baud rateD CONTROL REGISTER (ADDRESS 18h)
DEFINE OSC 4 'se define el oscilador en MHz
DEFINE HSER_RCSTA 90h ' Set receive register to receiver enabled
DEFINE HSER_TXSTA 20h ' Set transmit register to transmitter enabled
DEFINE HSER_BAUD 4800 ' Set baud rate
DEFINE HSER_SPBRG 25 ' Set SPBRG directly (normally set by HSER_BAUD)
Define LCD_DREG PORTB
Define LCD_DBIT 4
Define LCD_RSREG PORTB
Define LCD_RSBIT 2
Define LCD_EREG PORTB
Define LCD_EBIT 3
hora var byte
minutos var byte
segundos var byte
latitudp1 var byte
latitudp2 var byte
latitudp3 var byte
latitudp4 var byte
ns var byte
longitudp1 var word
longitudp2 var byte
longitudp3 var byte
longitudp4 var byte
oe var byte
kmh var byte
TRISB = 0
GPS:
high PORTB.0 ' prendo un led al principio del programa
pause 200
low PORTB.0 ' apago led
gosub lee ' esta sub rutina lee la trama del gps al final coloco como es la trama
pause 500
gosub muestra ' muestra los datos que toma de la trama
goto GPS
end
lee:
hserin 4800,timeout,[wait("$GPGGA"),dec2 hora,DEC2 minutos,DEC2 segundos,skip 5,dec2 latitudp1,DEC2 latitudp2,DEC2 latitudp3,DEC2 latitudp4,skip 1,ns,dec3 longitudp1, dec2 longitudp2,dec2 longitudp3,dec2 longitudp4,skip 1,oe] ' 4800 es un tiempo según para que cuando no se recibe trama el llama otra rutina en este caso timeout
return
muestra:
lcdout $FE, 1
lcdout "UTC: ",dec hora
lcdout ":",dec minutos
lcdout ":",dec segundos
pause 1200
lcdout $FE, 1
pause 50
lcdout "lat:",dec latitudp1
lcdout %10110000 'simbolo °
lcdout dec latitudp2
lcdout "."
lcdout dec latitudp3
lcdout dec latitudp4
lcdout "'"
lcdout ns
lcdout $FE, $C0
lcdout "lon"
lcdout dec longitudp1
lcdout dec longitudp2
lcdout %10110000 'simbolo °
lcdout "."
lcdout dec longitudp3
lcdout dec longitudp4
lcdout "'"
lcdout oe
clear ' borro las variables de la memoria
return
timeout:
lcdout $FE, 1
pause 500
lcdout "no hay trama"
pause 500
return
'la trama que envío es asi:
'$GPGGA,563452.000,9876.9876,N,23455.6538,E,#,##,2.5,607.75,M,47.6,M,,*67<CR>
ahora bien el problema es que el programa solo lee a primera ves que se ejecuta después no lee mas y se va a la subrutina timeout como si no recibiera tramas
les agradecería su ayuda por favor, la verdad no tengo ni idea que esta pasando.
nose si quieren que les envíe el archivo para simularlo en proteus
Última edición por un moderador: