Nicht für den AD7798, aber für den AD7795 hab ich so was.
Ist leider in "C" aber die grundlegenden Sachen sollte man schon erkennen können.

Code:
/* Einen Clockimpuls für den AD7795 generieren */
void clock_ad7795 (void)
{
#asm("nop");
#asm("nop");
ad7795_clock=0;
#asm("nop");
#asm("nop");
#asm("nop");
#asm("nop");
ad7795_clock=1;
#asm("nop");
#asm("nop");
}

/* 8Bit in den AD7795 schreiben */
void write_ad7795 (unsigned char uc_byte)
{
unsigned char i=0;
for(i=0;i<8;i++)
{
    if((uc_byte&(1<<7))==(1<<7))
    {
        ad7795_din=1;
    }
    else
    {
        ad7795_din=0;
    }
    clock_ad7795();
    uc_byte=uc_byte<<1;
}
ad7795_din=1;
}

/* AD Wandlerwert holen AD7795 */
unsigned int read_ad7795 (unsigned char uc_channel)
{
    unsigned char uc_i;
    unsigned int ad_value=0;
    
    uc_channel=uc_channel&0b00000111; /* Höherwertige Bits abtrennen */
    
    // Init Configutation Register for Channel X
    ad7795_din=1;
    ad7795_cs=0;
    write_ad7795(0b00010000);   /* Write to Configutation Register */
    write_ad7795(0b00011000);   /* Write value to Configutation Register high = VBIAS=OFF, Unipolar=1, Boost=On, Gain=1,*/
    write_ad7795((0b10010000|uc_channel));   /* Write value to Configutation Register low = RefSel=1,17V int, Buf=ON, CH=X */
    ad7795_cs=1;
    #asm("nop");
    
    // Init Mode Register = Read selected AD Channel
    ad7795_cs=0;
    write_ad7795(0b00001000);   /* Write to Mode Register */
    write_ad7795(0b00100000);   /* Write value to Mode Register high = Single Conversation=On, AMP_CM=OFF*/
    write_ad7795(0b00000100);   /* Write value to Mode Register low = CLK=int 64kHz,CHOP=en,UPD_Rate=62Hz*/
    
    delay_ms(50);               /* Auf A/D Wandler warten */
    if (ad7795_dout==1)
    {
        delay_ms(50);          /* Nochmal warten */
    }
    if (ad7795_dout==1)
    {
        ad_value=0;             /* Fehlerzähler hochzählen */
        uc_aderror++;
    }
    else                        /* A/D Wandler auslesen */
    {
        write_ad7795(0b01011000);  /* Readout Dataregister Command */
        for (uc_i=0;uc_i<16;uc_i++)
        {
            if (ad7795_dout==1)
            {
                ad_value=ad_value|0x0001;
            };
        ad_value=(ad_value<<1);
        clock_ad7795();
        }
    };
    
    ad7795_cs=1;
    #asm("nop");
    
    return (ad_value);
}

/* Reset für den AD7795 */
void reset_ad7795 (void)
{
    unsigned char uc_i;
    ad7795_cs=0;
    #asm("nop");
    ad7795_din=1;
    for(uc_i=0;uc_i<34;uc_i++) /* eigentlich 32 */
    {          
        clock_ad7795();
    }
    ad7795_cs=1;
    #asm("nop");
}


/* Initialisieren des AD7795 */
void init_ad7795 (void)
{
    volatile unsigned char uc_i;
    for(uc_i=0;uc_i<4;uc_i++)
    {
        // Init Configutation Register Ch X
        ad7795_cs=0;
        write_ad7795(0b00010000);   /* Write to Configutation Register */
        write_ad7795(0b00011000);   /* Write value to Configutation Register high = VBIAS=OFF, Unipolar=1, Boost=On, Gain=1,*/
        write_ad7795(0b10010000|uc_i);   /* Write value to Configutation Register low = RefSel=1,17V int, Buf=ON, CH=AIN X */
        ad7795_cs=1;
        #asm("nop");
    
        // Init Mode Register = Init Zero Calibration Ch X
        ad7795_cs=0;
        write_ad7795(0b00001000);   /* Write to Mode Register */
        write_ad7795(0b10000000);   /* Write value to Mode Register high = Zero Calibration=On, AMP_CM=OFF*/
        write_ad7795(0b00000100);   /* Write value to Mode Register low = CLK=int 64kHz,CHOP=en,UPD_Rate= 62Hz */
        delay_ms(50);
        if (ad7795_dout==1)
        {
            delay_ms(100);
            uc_aderror++;
        }
        ad7795_cs=1;
        #asm("nop");
        
        // Init Mode Register = Init Full Scale Calibration Ch X
        ad7795_cs=0;
        write_ad7795(0b00001000);   /* Write to Mode Register */
        write_ad7795(0b10100000);   /* Write value to Mode Register high = Full Scale Calibration=On, AMP_CM=OFF*/
        write_ad7795(0b00000100);   /* Write value to Mode Register low = CLK=int 64kHz,CHOP=en,UPD_Rate=62Hz*/
        delay_ms(50);
        if (ad7795_dout==1)
        {
            delay_ms(100);
            uc_aderror++;
        }
        
        ad7795_cs=1;
        #asm("nop");
    }
};

/* 6 A/D Werte aus dem AD7795 auslesen und abspeichern */
void read6_ad7795 (void)
{
    unsigned char uc_i;
    for (uc_i=0;uc_i<6;uc_i++)
    {
        ui_old7795[uc_i]=ui_7795[uc_i];
        ui_7795[uc_i]=read_ad7795(uc_i);
    }

}
//.............

// AD7795 Initialisieren
ad7795_cs=1;        /* /CS abschalten */
ad7795_clock=1;     /* CLK auf ruheposition =1 setzen */
ad7795_din=1;       /* DIN auf Ruheposition =1 setzen */
reset_ad7795();     /* AD 7795 resetten */
delay_ms(1);        /* 1ms warten */
init_ad7795();      /* Initialisierungsroutine aufrufen */
Ich hoffe es hilft weiter.