先确定程序中有没有对芯片的时钟进行过修改,要是没有,就是你的逻辑的问题,可能是一些逻辑进行了for的延时,你判断长还是短按的过程中的延时不对才会到导致你的时间不对的。
要进行仿真,或是列出你的程序代码
如果你的程序里,没有对单片机的时钟进行修改操作的话,
我觉得应该是你中断的问题。
个人猜测:很有可能是其他的中断影响了串口中断的执行。
或者是while(1)里面的其他的程序严重阻塞了程序的执行。
你可以试试屏蔽掉无关的代码,进行调试试试。