Hi and thanks for your comments.
It's all fixed now. I used the ProcessorExpert, selected SCI and allowed it to generate the MCUinit file. I then cut the portion of code out of this relevant to the SCI and placed it in my code as shown below. Away she went even after a power on reset. Some different things the ProcessorExpert did that i hadn't was; 1) disabling of the SCI before the dummy reads and 2)the format in which the dummy reads were written (maybe the way i wrote it the compiler optimisation deleted it??)
See below for the code which works flawlessly, even after a POR! :smileyhappy:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "gentypes.h"
#include "portsDef.h"
/**********************************************************************************************************/
/* Function Pre Processors */
/**********************************************************************************************************/
void delay(uint16 delayit);
void MCU_init(void);
uint8 CharToPrint=0;
uint8 temp; /*dummy storage variable*/
/**********************************************************************************************************/
/* Main Routine */
/**********************************************************************************************************/
void main(void) {
EnableInterrupts; /* enable interrupts */
MCU_init();
initialiseLCD();
cursorAddress(0x00);
for(;

{
while (CharToPrint){
LCDPrint(&SCID,1);
CharToPrint=0;
} /*end while */
} /* end for loop forever */
/* please make sure that you never leave main */
}
/**********************************************************************************************************/
/* Delay Routine */
/**********************************************************************************************************/
void delay(uint16 delayit) {
uint16 i;
i=0;
for (i=0;i<delayit;i++){ /*delayit value based on 4Mhz clock and this instruction 25clk cycles per run*/
}
}
void MCU_init(void)
{
/* ### MC9S08QG8_16_QFN "Cpu" init code ... */
/* PE initialization code after reset */
/* Common initialization of the write once registers */
/* SOPT1: COPE=0,COPT=1,STOPE=0,BKGDPE=1,RSTPE=0 */
SOPT1 = 0x52;
/* SPMSC1: LVDF=0,LVDACK=0,LVDIE=0,LVDRE=1,LVDSE=1,LVDE=1,BGBE=0 */
SPMSC1 = 0x1C;
/* SPMSC2: PDF=0,PPDF=0,PPDACK=0,PDC=0,PPDC=0 */
SPMSC2 = 0x00;
/* SPMSC3: LVDV=0,LVWV=0 */
SPMSC3 &= (unsigned char)~0x30;
/* System clock initialization */
ICSTRM = *(unsigned char*far)0xFFAF; /* Initialize ICSTRM register from a non volatile memory */
ICSSC = *(unsigned char*far)0xFFAE; /* Initialize ICSSC register from a non volatile memory */
/* ICSC1: CLKS=0,RDIV=0,IREFS=1,IRCLKEN=0,IREFSTEN=0 */
ICSC1 = 0x04; /* Initialization of the ICS control register 1 */
/* ICSC2: BDIV=1,RANGE=0,HGO=0,LP=0,EREFS=0,ERCLKEN=0,EREFSTEN=0 */
ICSC2 = 0x40; /* Initialization of the ICS control register 2 */
/* Common initialization of the CPU registers */
/* ### Init_SCI init code */
/* SCIC2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 */
SCIC2 = 0x00; /* Disable the SCI module */
(void)(SCIS1 == 0); /* Dummy read of the SCIS1 registr to clear flags */
(void)(SCID == 0); /* Dummy read of the SCID registr to clear flags */
/* SCIBD: SBR12=0,SBR11=0,SBR10=0,SBR9=0,SBR8=0,SBR7=1,SBR6=1,SBR5=0,SBR4=1,SBR3=1,SBR2=0,SBR1=1,SBR0=0 */
SCIBD = 0xDA;
/* SCIC1: LOOPS=0,SCISWAI=0,Rsrc=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */
SCIC1 = 0x00;
/* SCIC2: TIE=0,TCIE=0,RIE=1,ILIE=0,TE=0,RE=1,RWU=0,SBK=0 */
SCIC2 = 0x2C;
/* SCIC3: R8=0,T8=0,TXDIR=1,TXINV=0,ORIE=0,NEIE=0,FEIE=0,PEIE=0 */
SCIC3 = 0x00;
/* ### */
PTADD = 0x0F; /*PTA0-PTA3 output*/
PTBDD |= 0x08; /*LED Display*/
} /*MCU_init*/
/**********************************************************************************************************/
/* Interrupt Routines */
/**********************************************************************************************************/
void interrupt 15 ReceiveBufferFull(void){
if (ReceiverFull()==1){ /* 2 step process in order to clear RDRF flag i.e. this is always true*/
temp=SCID;
}
CharToPrint = 1;
}