#include <16F676.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOCPD                    //No EE protection
#FUSES NOPUT                    //No Power Up Timer
#FUSES BANDGAP_HIGH          
#use delay(clock=20000000)

#define  SCK pin_C1
#define  SDI pin_C2
#define  LOAD pin_C3
#DEFINE  CS   PIN_C4

int16 DATA_A;

VOID CALL_DAC(VOID);
void writ_DAC_A(VOID);
INT16 VALUEA;

void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
   WHILE(TRUE)
   {
      OUTPUT_TOGGLE(PIN_A0);
      DELAY_MS(10);
 
      VALUEA+=100;IF(VALUEA>4095)VALUEA=0;
  
      CALL_DAC();
   }

}

void writ_DAC_A(VOID)
{int8 i;
  output_HIGH(CS);
  
  DATA_A+=VALUEA;
  
DELAY_US(10);
DATA_A&=0X7FFF;


output_low(CS);
output_low(SCK);
OUTPUT_HIGH(LOAD);


for(i=0;i<16;++i)
   {
     output_bit(SDI,shift_left(&DATA_A,2,0));

     DELAY_US(1);
     
     output_high(SCK);
     delay_us(5);
     output_low(SCK);
     delay_us(5);


   }
     output_LOW(LOAD);
     delay_us(50);
     output_HIGH(LOAD);
     DELAY_US(1);OUTPUT_LOW(CS);DELAY_US(10);
}

VOID CALL_DAC(VOID)
{
DATA_A=0XF000;


 
writ_DAC_A(); 


//DATA_B=0XFEF0;



output_HIGH(CS);
//writ_DAC_B();
}
