|One pin on the embedded target can be spared for generic debugging |purposes but simple "blinky LED" or whatnot doesn't cut it very well. |I'd like to have at least one digit (hex, even) for display of the |embedded system's state to display on a 7-segment. (I don't have a |logic analyzer, I don't want to hook the PIC up to my PC parallel port, |and I don't have an oscilloscope.) The normal approach I use (though I do have an oscilloscope >:*3) is to do something like this: SendByte: bsf C rlf Data,f SendBit: bsf OUTPUT btfss C bcf OUTPUT bcf C rlf Data,f movf Data,f ; Test if zero bcf OUTPUT btfss Z goto SendBit return Note that RRF's may be substituted if lsb-first ordering is desired. On a scope, the data will appear as a series of blips, with wider blips representing "1"s and narrower ones representing "0"s. Since the total time of either type of bit is constant, the display on the scope is stable. For your application, you may want to strech out the pulses somewhat (a low bit is represented by only a 2us pulse, and there's only 3us between the end of a high bit and the start of the next bit) but this coding scheme is quick and easy to implement, easy to look at with a scope, and easy to decode (wait for a risin g edge and then look at the data a few microseconds later).