Sheldon, for IR pulses, interrupt is definitely the way forward. If you are making your own communication routine then it is better to have a longer start pulse and can also use a define pulsin statement on top (check manual) to limit the wait time for the start pulse. It will every now and then get false triggers, I don't think there is any way you can avoid that as I tried a lot before but could not do it unless I missed something. You can use DT_INT for this.