I am not currentl with PBP, so, please refer the manual where necessary.

It is most likely you are overrunning the specified receive buffer gps_data of 80 bytes as you are not doing any bounds checking to keep the data within that 80 bytes region. That is trashing the variables declared beyond the 80 bytes boundary.

Ideally, you should receive characters until a terminating character is received like a CR or a $00 character (whichever method is used by the module) or the buffer limit is reached (i = 80 as per your code)

edit:looks like I posted together with Henrik and amgen.