I am trying to talk to a pc with a 16F877 USART. Nowhere in the docs does it say whether I need a serial interface chip or not, so I stuck a meter on the output of pins <26:25>, and I didn't see any negative voltage, so I am assuming I do need a chip (although I tried it without, just in case). The circuit works fine with other code loaded in it, and o-scopes ok too (not that I know what I'm doing with it, but hey :-) Circuit has a 10Mhz x-tal. I tried connecting it to a laptop and a pc. Also tried various combinations of CTS/RTS & DTR/DSR with no luck. The laptop echoes perfectly when TX is tied to RX. Anyway, the circuit was producing gibberish on the screen (wired as 3-wire, no flow control), so it seemed like I had it wired properly and had a baud rate problem, so I tried the code below with different SPBRG and baudrate=0 and 1 with no luck. I'm just using hyperterminal. Then I noticed that I forgot to connect pin 15 of the MAX232A to ground (duhhhh!), so I did, and it won't utter a bit. That ground also makes the OSC all fuzzy on the scope. It still has +/-10v on pins 2 and 6, tho. I used .1uf caps as indicated on page 17 of the datasheet. (Those are just dumb. Will use a Dallas next time!) Help! list p=16F877, R=DEC #include ; Registers i equ 0x0C j equ 0x0D __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON org 0x0000 ; Constants CONSTANT LF = d'10' ; Line Feed CONSTANT CR = d'13' ; Carriage Return ; Initialize ports clrf PORTA ; Set PORTA output latch to 0 (optional) clrf PORTB ; Set PORTB output latch to 0 clrf PORTC ; Set PORTC output latch to 0 clrf PORTD ; Set PORTC output latch to 0 clrf PORTE ; Set PORTC output latch to 0 bsf STATUS,RP0 ; Switch to Bank1 movlw B'11000000' ; Set PORTC 7,6 to TRI-state for RX/TX movwf TRISC ; Set PORTC to all outputs & TRI-S for RX,TX bcf STATUS,RP0 ; Switch back to Bank0 ; Initialize USART Transmitter movlw B'10000000' ; Select: Port C serial ports (not I/O), RX disabled movwf RCSTA bsf STATUS, RP0 ; Switch to Bank1 movlw d'32' ; 19,200bps for 10Mhz x-tal movwf SPBRG ; movlw B'00100100' ; Select Asynchronous, 8bit, high baud rate, TX enabled serial port movwf TXSTA ; bcf STATUS, RP0 ; Switch to Bank0 ;TEMP ; also tried ;movlw 'X' ; this, instead ;movwf TXREG ; of the table ;goto TEMP ; stuff below start clrf i loop movf i,w incf i call HelloTable movwf j movf j btfsc STATUS,Z goto start movwf TXREG ; Move w to TX register goto loop HelloTable addwf PCL retlw 'H' retlw 'e' retlw 'l' retlw 'l' retlw 'o' retlw CR retlw LF retlw 0 end