请注意void IR_IN(void)interrupt 0中的while(!RIN)和while(IRIN)这里会存在死机的概率,取决于你红外遥控按下的时机。一旦当你按下按键的那一刻后,单片机检测到了信号进入中断,此时恰好按键松开了又没信号了也就死机了。建议不要软件解码红外信号,可以采用专门的解码芯片。希望对你有所启发和帮助。