In my routine for receiving DMX, I set the serial port (in a 16c74A) for 8 bits. I watch the FE bit to determine when there is a break. A code fragment that does this is... RxState2a ; We have a byte! btfss rcsta,ferr ; Check for FE goto RxState2b ; No FE, get data byte movf rcreg,0 ; get rx byte in w, throwing it away decf RxState,1 ; Go back to state 1, waiting for start code return ; Leave RxState at 1 and exit to ISR Similar to your idea, I've used a timer to detect loss of DMX. However I use an interrupt driven (in this case, 50/60 Hz line zero cross) RAM counter. Here's a code fragment showing clearing of the timer... RxState2d ; We are getting a value we want, not the last one clrf dmxLossTimer ; On each byte, reset timer that turns LED red ledgreen ; and turn it green movlw RxByte0 ; Get address of byte 0 addwf RxByteCountLo,0 ; Add in byte count, which now corresponds to dimmer number movwf fsr ; Point to RxByte array movf rcreg,0 ; Get the data byte movwf indf ; store data in RxByte array goto IncRxByteCount ; Increment count and return The dmxLossTimer is, in this product, actually decremented in the ISR that is called on detection of a negative line zero-cross. cblock dmxLossTimer endc decfsz dmxLossTimer,1 goto ZeroCross ; go do phase control stuff ledRed ; timed out, make led red if timed out Note that ledRed and ledGreen are macros so I don't have to remember which bit does what... Good luck with your project! Harold _____________________________________________________________________ You don't need to buy Internet access to use free Internet e-mail. Get completely free e-mail from Juno at http://www.juno.com Or call Juno at (800) 654-JUNO [654-5866]