    #include<pic.h>   
    //PIC16F876A   
       
    __CONFIG( HS & PWRTEN & BOREN & PROTECT & WDTEN );   
       
       
    //----------------------------------------------------------   
    bank1 unsigned char tm_sum;   
    bank1 float sin_am, sin_l, sin_d;   
    bit sin_up;
    bit b_timer_ok; 
        
    const unsigned char PWM_TAB[]={       
    0,25,50,74,98,120,142,162,180,197,212,   
    225,235,244,250,254,255,254,250,244,235,   
    225,212,197,180,162,142,120,98,74,50,25   
    };                             
    unsigned char index;

    void port_init(void)  
    {   
        TRISC = 0x00;        
        PORTC = 0;      
    }   

    void CCP_Init(void)   
    {   
        CCPR2L = 0X00;     
        CCPR1L = 0X00;  
        TRISC1 = 0;   
        TRISC2 = 0;     
        TRISC  = 0X00;    
        PR2    = 0XFF;    
        CCP1M3 = 1;   
        CCP1M2 = 1;      
        CCP2M3 = 1;   
        CCP2M2 = 1;       
        sin_up = 1;      
        index  = 0;        
        sin_am = 1;     
    }   
       
    void ISR_CCP(void)   
    {      
        if(index == 31)   
        {   
            index = 0;   
            sin_up = !sin_up;   
        }   
       
        sin_l = sin_am * PWM_TAB[index];   
       
        if(sin_l >= 255)   
            sin_l = 255;      
               
        if( sin_up )   
        {   
            CCPR1L = 0;   
            CCPR2L = (unsigned char)sin_l;   
        }
        else    
        {   
            CCPR2L = 0;   
            CCPR1L = (unsigned char)sin_l;   
        }   
           
        index++;   
    }   
       
    void interrupt isr_servers(void)   
    {   
        if(TMR2IF & TMR2IE)   
        {   
            TMR2IF = 0;   
            ISR_CCP();   
        }   
           
        CLRWDT();  
        if(TMR1IF & TMR1IE)   
        {   
            TMR1IF = 0;   
            if( ++tm_sum >= 10 )   
            {   
                tm_sum = 0;   
                //b_timer_ok = 1;   
                RC3 = !RC3;   
            }   
        }   
    }   
       
    main(void)   
    {   
        OPTION = 0x0F;   
       
        CLRWDT();         
        port_init();        
       
        PEIE    = 1;          
        GIE     = 1;          
       
        TMR1CS  = 0;         
        T1SYNC  = 0;           
        TMR1H   = 0xFD;   
        TMR1L   = 0x10;
        TMR1IE  = 1;             
        TMR1ON  = 1;          
       
        TOUTPS3 = 0;   
        TOUTPS2 = 1;   
        TOUTPS1 = 0;   
        TOUTPS0 = 0;          
        TMR2IE  = 1;          
        TMR2ON  = 1;     
       
        CCP_Init();       
        while(1)   
        {   
            CLRWDT();    
            if( b_timer_ok )   
            {   
                b_timer_ok = 0;   
            //  RC3 = !RC3;    
            }   
        }   
    }   