//pic18f452

#include <pic18.h>
#include <hitech.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include "Nokia_LCD.h"
//#include "delay.h"
//#include "sajat.h"
#include <htc.h>

__CONFIG(1,HSPLL & OSCSDIS);
__CONFIG(2,BORDIS & WDTDIS);
__CONFIG(3,CCP2RC1);
__CONFIG(4,DEBUGDIS & LVPDIS & STVRDIS);
__CONFIG(5,49167);
__CONFIG(6,57359);
__CONFIG(7,SWDTDIS);

    bank1 unsigned char tm_sum;   
    bank1 float sin_am, sin_l, sin_d;   
    bit sin_up;
    bit b_timer_ok; 
    unsigned int szamlalo;   

     
    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 BEALLITASOK(void)
{
  TRISA=0B11111111;
  ADCON0=0B01000000;
  ADCON1=0B10100100;
  TRISB=0B00000000;
  TRISC=0B10000000;
  TRISD=0B00000000;
  TRISE=0B001;
  LATB=0;
  LATD=0;
  LATC=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;   
            if(szamlalo>5)
              {
               ISR_CCP();   
               szamlalo=0;
              } 
           szamlalo++;  
        }   
           
        CLRWDT();  
        if(TMR1IF & TMR1IE)   
        {   
            TMR1IF = 0;   
            if( ++tm_sum >= 10)   
            {   
                tm_sum = 0;   
                //b_timer_ok = 1;   
                RC3 = !RC3;   
            }   
        }   
    }   
       
    main(void)   
    {   
        T0CON = 0x0F;   
       
        CLRWDT();         
        BEALLITASOK();        
       
        PEIE    = 1;          
        GIE     = 1;          
       
        TMR1CS  = 0;         
        T1SYNC  = 0;           
        TMR1H   = 0xFD;   
        TMR1L   = 0x10;
        TMR1IE  = 1;             
        TMR1ON  = 1;          
       
       /* TOUTPS3 = 0;   
        TOUTPS2 = 1;   
        TOUTPS1 = 0;   
        TOUTPS0 = 0;  */ 

        T2CKPS1=1;
        TOUTPS3 = 0;   
        TOUTPS2 = 1;   
        TOUTPS1 = 0;   
        TOUTPS0 = 0; 
     
        TMR2IE  = 1;          
        TMR2ON  = 1;     
       
        CCP_Init();  
        szamlalo=0;     
        while(1)   
        {   
            CLRWDT();    
            if( b_timer_ok )   
            {   
                b_timer_ok = 0;   
            //  RC3 = !RC3;    
            }   
        }   
    }   