That post was in error, but there was no way to change it. You can get up
to 19200 bps with a 4MHz osc with PBP's DEBUG.

Someone mentioned the error, but it wouldn't allow me to change it.

However, you definitely can get up to 115200 bps with a 4MHz osc, but you'll
need to use assembler. Try this;
Code:
	processor	16F876a
	#include	<P16F876a.inc>
	errorlevel -302 ; suppress "not in bank 0" message

	; Defines
	#define TxPin	PORTC,6		;define serial TX pin
	#define	bank1	banksel 0x80	;select bank 1
	#define	bank0	banksel 0x00	;select bank 0

	; variable allocations
	cblock 0x20	;start at RAM location 20h
	  Counter		;bit counter
	  TxByte		;holds byte to transmit
	  MsgPtr		;message character pointer offset
	  CharCnt		;number of characters in text message
	  dlyLSD		;for delay loop
	endc

	org	0x00	;reset vector
	goto	Main	

	org 	0x05	;required for MCS loader
Main
	call 	Init	;init port
	
MsgLoop
	movlw	.17	;17 characters in the message
	movwf	CharCnt	;load character count
	movlw	.0	;pointer offset to 1st char in table
	movwf	MsgPtr	;load character pointer
	
NextChar
	movf	MsgPtr,w   ;load char pointer into W reg
	call	Message	   ;fetch character from table
	call	TxRoutine  ;send it
	incf	MsgPtr,f   ;increment char pointer
	decfsz	CharCnt,f  ;decrement char count, skip if done
	goto	NextChar   ;not finished, then fetch next char
	call	Delay_50uS ;short delay between messages
	goto	MsgLoop    ;continuous loop

Message 			;prints Hello World....!<CR>
	addwf	PCL,f	;load character offset
	retlw	'H'	;return with ASCII character in W reg
	retlw	'e'	 
	retlw	'l'	
	retlw	'l'	
	retlw	'o'	
	retlw	' '	
	retlw	'W'
	retlw	'o'	
	retlw	'r'	
	retlw	'l'	
	retlw	'd'	
	retlw	'.'	
	retlw	'.'	
	retlw	'.'	
	retlw	'.'	
	retlw	'!'
	retlw	'\r'		;carriage return tagged onto end of message

TxRoutine
	movwf	TxByte		;load byte to send into TxByte
	movlw	.8		;preload bit counter with 8
	movwf	Counter

StartBit
	bcf	TxPin	;true mode / low for START bit
	goto	$+.1  ; 2uS
	goto	$+.1  ; 2uS
	nop

TxLoop
	rrf	TxByte,f	            ;rotate into carry / send LSB first
	btfsc	STATUS,C	;if bit = 1 then
	goto	SetBit		;send a 1
	bcf	TxPin		;else send a 0
	goto	$+.1		;2uS
	decfsz	Counter,f	;decrement bit count
	goto	TxLoop		;if not 0, then continue
	goto	StopBit+.2	;else send stop bit

SetBit
	bsf	TxPin		;send 1
	nop		
	decfsz	Counter,f
	goto	TxLoop
	
StopBit
	nop
	goto	$+.1		;2uS
	goto	$+.1		;2uS
	bsf	TxPin		;begin stop bit period
	goto	$+.1		;2uS
	goto	$+.1		;2uS
	return			;2uS rest of program handles the rest 

Init
	bank0
	movlw	b'01000000' ;TX pin idles high (true mode)
	movwf	PORTC		;set port latches
	bank1			;bank 1
	movlw	b'10000000' ;RX in, rest outs
	movwf	TRISC		;set port directions
	bank0			;back to bank 0
	return
        
Delay_50uS			;call + delay + return = 50uS
	movlw	.15		;at 4MHz
             movwf	dlyLSD
             decfsz	dlyLSD, f
             goto	$ - .1
             return

	end