Hi, I'm, trying to do flow control, using PORTA,6 to signal that the pic is ready to recieve data. pseudocode is: interrupt handler: set PORTA,6 high retfie main loop: //wait for interrupt handler if PORTA,6 is low goto main loop else set PORTA,6 low get the byte out of RCREG //do things with it... not written yet goto main loop The result of running this is that when I send a byte, PORTA,6 goes high, but it never goes low again, ever. I've used the same initialisation for the usart registers in other working programs, so i know i've got that bit right. This is driving me mad, what have I missed?? Thanks Nick full code: list p=16f628a include "p16f628a.inc" __CONFIG 0x3f10 org 0x0000 goto main org 0x0004 goto isr org 0x0005 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; begin here ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; main ; initialisation: ;i/o ports MOVLW 0x07 MOVWF CMCON CLRF PORTA MOVLW 0x01 MOVWF PORTB bsf STATUS,RP0 CLRF TRISA MOVLW 0x0a MOVWF TRISB ;interrupts MOVLW 0x20 MOVWF PIE1 MOVLW 0xc0 MOVWF INTCON ;usart MOVLW 0x19 MOVWF SPBRG MOVLW 0x24 MOVWF TXSTA bcf STATUS,RP0 MOVLW 0x90 MOVWF RCSTA call delay movf RCREG,W movf RCREG,W movf RCREG,W ; flush receive buffer ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; main ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; start btfss PORTA,6 goto start MOVF RCREG,W bcf PORTA,6 ; do stuff goto start ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; isr ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; isr bsf PORTA,6 bcf RCSTA,4 ;clear overrun bsf RCSTA,4 retfie -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist