TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: luisko01 en 01 de Septiembre de 2010, 19:39:44
-
Hola a todos..
Tengo un problema que no he podido identificar.
Tengo un GPS Star III
quiero adaptarlo a un pic, estoy probando todo acerca de la comunicacion seríal y todo ok, incluso el programa me funciona bien en el simulador (pic Simulator ide), pero cuando lo corro en el pic, funciona perfecto para la primera cadena de texto del GPS, pero luego se bloquea y no me bota nada más..
Adjunto el código y la cadena que el envio.
Codigo
inicio:
StartFromZero
Dim vh(6) As Byte
Dim vn(10) As Byte
Dim vw(10) As Byte
Dim va(6) As Byte
Hseropen 9600
WaitMs 1000
Dim h As Byte
Dim i As Byte
Dim tmp As Byte
Dim comas As Byte
Dim vp(6) As Byte
Hserout "Entro a Inicio: ", CrLf
WaitMs 200
For i = 0 To 5
vp(i) = 0
vh(i) = 0
va(i) = 0
Next i
For i = 0 To 9
vn(i) = 0
vw(i) = 0
Next i
i = 0
tmp = 0
comas = 0
h = 0
PCLATH = 0
loop:
Hserin tmp
vp(i) = tmp
If vp(0) = "$" Then
i = i + 1
If i = 6 Then i = 0
If vp(0) = "$" And vp(1) = "G" And vp(2) = "P" And vp(3) = "G" And vp(4) = "G" And vp(5) = "A" Then
Goto guardar
Endif
Else
'i = 0
Goto loop
Endif
Goto loop
End
guardar:
loop2:
Hserin tmp
If tmp = "," Then comas = comas + 1
Select Case comas
Case 1
Goto guardarh
Case 2
Goto guardarn
Case 3
Case 4
Goto guardarw
Case 5
Case 6
Case 7
Case 8
Case 9
Goto guardara
Case 14
i = 0
Goto mostrar
Goto inicio
EndSelect
Goto loop2
Return
mostrar:
Hserout "HH:MM:SS ", vh(0), vh(1), ":", vh(2), vh(3), ":", vh(4), vh(5), CrLf
WaitMs 50
Hserout "NORTE: "
WaitMs 50
For h = 0 To 9
Hserout vn(h)
WaitMs 50
Next h
Hserout CrLf
Hserout "OESTE: "
WaitMs 50
For h = 0 To 9
Hserout vw(h)
WaitMs 50
Next h
Hserout CrLf
WaitMs 50
Hserout "ALTURA(MSNM): "
WaitMs 50
For h = 0 To 5
Hserout va(h)
WaitMs 50
Next h
Hserout CrLf
WaitMs 50
Goto inicio
Return
guardarh:
'While
Hserin tmp
If tmp <> "," Then
vh(i) = tmp
i = i + 1
'If i = 6 Then Goto guardar
Else
comas = comas + 1
i = 0
Goto guardarn
Endif
Goto guardarh
Return
guardarn:
'While
Hserin tmp
If tmp <> "," Then
vn(i) = tmp
i = i + 1
'If i = 6 Then Goto guardar
Else
comas = comas + 1
i = 0
Goto guardar
Endif
Goto guardarn
Return
guardarw:
'While
Hserin tmp
If tmp <> "," Then
vw(i) = tmp
i = i + 1
'If i = 6 Then Goto guardar
Else
comas = comas + 1
i = 0
Goto guardar
Endif
Goto guardarw
Return
guardara:
'While
Hserin tmp
If tmp <> "," Then
va(i) = tmp
i = i + 1
'If i = 6 Then Goto guardar
Else
comas = comas + 1
i = 0
Goto guardar
Endif
Goto guardara
Return
Cadena:
$GPGGA,123456,1234.56789,N,08913.7086,W,2,06,3.6,555.22,M,-32.3,M,,*7D
Muchas Gracias a quien pueda ayudarme...
-
No estoy muy metido aún en este mundo, pero con lo que he hecho hasta ahora (display giratorio) puedo decirte que el código que funciona perfectamente en el simulador no tiene porqué funcionar en el PIC.
Intenta poner algún chivato después de la primera iteración, a ver si llega, salta, cambia el valor, ...
-
Hola, puede que te esté dando problemas en las comparaciones.
IF (A==B) AND (C==D) ... procura usar parentesis y a ser posible el doble ==, aunque en PBP parece que da igual, pero no , a veces se lia un poco el compilador.