这种温度传感器和单片机是以它自己独有的一种串行通信方式来进行的。基本上所有的串行通信在进行期间都不允许中断掉去干其他事情。 数据传输过程中一旦中断,中断后即使你的现场保护的很好,也白费。因为数据是一个位一个位传的,在向传感器发数据或者命令的时候,它只要一个完整的8位传完后对方才能知道你所发的是什么数据。并且传感器给你数据的时候,它可不管你此时是否中断了 ,它只是一口气发送完,你要就收,不要拉倒。
所以,读传感器的时候,绝对不可以中断干其他事情,只有对传感器发完指令,然后接受完传感器送来的数据后,才能进行中断等其他操作。
另外,我对你使用CCP1做捕捉功能却还用定时器0及其中断不是太理解。因为用捕捉的话,是应该开定时器1的,而且定时器1的中断不需要开,定时器只是给一个计数的功能。就是说,当外部有脉冲进来时候,打开定时器1,定时器1开始计数。当收到下一个脉冲的时候,ccp1模块自动停止计数,根据你设置进行中断(CCP中断,不是定时器1的中断)。然后你可以再中断服务子程序里读取TMR1H和TMR1L送到CCPR1H和CCPR1L里面的数据。就是两个脉冲之间的时间差(其实是两个脉冲之间间隔了N个时钟周期)。所以跟TRM0中断没有什么关系。
单片机要解决的无非是“时间问题”与“空间问题”。你的这个问题就是一个时间冲突的问题,解决的方法是分时进行,当读写DS18B20时让它独占CPU的时间,而一旦检测到有红外线,就不要读写DS18B20,先完成红外线的所有接受这后再去读写DS18B20。因为红外遥控的机会很少,而读写DS18B20如果是一秒一次也已经是足够了,你会有足够的时间来分别处理的。