void WriteFlash (U8 xdata * WFSaddr, U8 WFCdata)
{
U8 WFCintsav;

  WFCintsav = SG_IE;
  SG_IE = 0;
  SG_SFRPAGE = 0x0f;
  SF_CCH0CN &= 0xfe;    // single byte write
  SG_SFRPAGE = 0;
  if (WFSaddr > 0x7fff)
  {
    SG_PSBANK = 0x31; 
  }
  else
  {
    SG_PSBANK = 0x21; 
    WFSaddr   += 0x8000   ;
  }
  S0_FLSCL  |= 0x01     ; // flash write
  S0_PSCTL  |= 0x01     ; // movx to flash      
  *WFSaddr   =  WFCdata ; //write the byte
  S0_PSCTL  &= 0xfe     ; // restore     
  S0_FLSCL  &= 0xfe     ; // restore
  SG_PSBANK = 0x11      ;
  SG_IE = WFCintsav;  
}