串口中断的程序我帮不了你了,看到ourdev上贴的代码了,我自己的程序应该和你的是同源的,我把它简化了,只处理$gprmc指令,别的一概忽略,因为我的cpu还要干很多事情。但是cpu是avr的,不是51的,我也没搞过51.
你这样贴上整段代码提问,一般是没有人愿意仔细看了分析的,大家都比较忙,更何况静态分析未必有用,实际问题还是要进行跟踪调试才能找出来。如果你没有跟踪条件的话(51仿真器),给你出个主意,你的单片机串口连接gps模块只接受信息时只要用rxd,那么单片机的txd还是空的,把这个txd通过一个电平转换电路连接pc机的com口rxd,然后在你的中断程序中设定多个监视点,在监视点通过txd发一些东西到pc机,通过串口软件你就能知道你的程序运行到哪里死掉了,这样可以快速定位到问题。如果你的单片机有两个串口,那么这个办法就更方便了。我自己做avr时一般就是用这种办法的,基本不用仿真调试软件或者硬件。