PCD Compiler Examples

The CCS C compiler includes a library of example programs for many common applications. Each example program contains a header with instructions on how to run the example, and if necessary, the wiring instructions for interfacing external devices.

Below you will find a few specific example programs included with our PCD compiler which demonstrate the compiler's functionality for the dsPIC® chips. Click here for a full list of example files and source code drivers included with the CCS C Compiler.

Jump to: Simple Square Wave Generator | Watchdog Timer | A/D Conversion | List of Example Files


Simple Square Wave Generator


/////////////////////////////////////////////////////////////////////////
////                             EX_SQW.C                            ////
////                                                                 ////
////  This program displays a message over the RS-232 and waits for  ////
////  any keypress to continue.  The program will then begin a 1khz  ////
////  square wave over I/O pin B4.                                   ////
////                                                                 ////
////  Comment out the printf's and getc to eliminate the RS232 and   ////
////  just output a square wave.                                     ////
////                                                                 ////
////  Change both delay_us to delay_ms to make the frequency 1 hz.   ////
////  This will be more visable on a LED.                            ////
////                                                                 ////
////                                                                 ////
////  Change the device, clock and RS232 pins for your hardware if   ////
////  needed.                                                        ////
/////////////////////////////////////////////////////////////////////////

#include <30F2010.h>

//#device ICD=TRUE  // For using the debugger, un-comment

#use delay(crystal=20mhz)



// UART1A specifies the alternate UART pins Pin_C13, Pin_C14
// use UART1 to sprcify UART for pins Pin_F3, Pin_F2

#use rs232(baud=9600, UART1A)


void main() {

   printf("Press any key to beginnr");
   getc();
   printf("1 khz signal activatednr");

   while (TRUE) {
     output_high(PIN_B4);
     delay_us(500);
     output_low(PIN_B4);
     delay_us(500);
   }
}


Watchdog Timer


/////////////////////////////////////////////////////////////////////////
////                         EX_WDT.C                                ////
////                                                                 ////
////  This program demonstartes the watchdog timer.  If the user     ////
////  does not hit a key in the set amount of time, the processor    ////
////  restarts, and tells the user why it restarted.                 ////
////                                                                 ////
////  Jumpers:                                                       ////
////     PCH    pin C7 to RS232 RX, pin C6 to RS232 TX               ////
////     PCD    none                                                 ////
////                                                                 ////
////  This example will work with the PCD compiler.                  ////
////  The following conditional compilation lines are used to        ////
////  include a valid device for each compiler.  Change the device,  ////
////  clock and RS232 pins for your hardware if needed.              ////
/////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.  Derivative programs created using this software    ////
//// in object code form are not restricted in any way.              ////
/////////////////////////////////////////////////////////////////////////

#ifndef __PCD__
 #error This example is only for dsPIC/PIC24 devices
#endif

#include <30F5011.h>
#fuses HS,NOPROTECT,WDT,WPSB1,WPSA512
#use delay(clock=20000000)
#use rs232(baud=9200, UART1)

main()   {


   switch ( restart_cause() )
   {
      case RESTART_WATCHDOG:
      {
         printf("rnRestarted processor because of watchdog timeout!rn");
         break;
      }
      case RESTART_POWER_UP:
      {
         printf("rnNormal power up!rn");
         break;
      }
   }

   setup_wdt(WDT_ON);

   while(TRUE)
   {
      restart_wdt();
      printf("Hit any key to avoid a watchdog timeout.rn");
      getc();
   }
}



A/D Conversion


/////////////////////////////////////////////////////////////////////////
////                          EX_ADMM10.C                              ////
////                                                                 ////
////  This program displays the min and max of 30 A/D samples over   ////
////  the RS-232 interface.  The process is repeated forever.        ////
////                                                                 ////
////  If required configure the CCS prototype card as follows:       ////
////     Insert jumper from output of POT to pin A5                  ////
////     Use a 10K POT to vary the voltage.                          ////
////                                                                 ////
////  Jumpers:                                                       ////
////     PCM,PCH    pin C7 to RS232 RX, pin C6 to RS232 TX           ////
////     PCD        none                                             ////
////                                                                 ////
////  This example will work with the PCM, PCH, and PCD compilers.   ////
////  The following conditional compilation lines are used to        ////
////  include a valid device for each compiler.  Change the device,  ////
////  clock and RS232 pins for your hardware if needed.              ////
/////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2007 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.  Derivative programs created using this software    ////
//// in object code form are not restricted in any way.              ////
/////////////////////////////////////////////////////////////////////////


#include <30F5011.h>
#fuses HS,NOWDT
#use delay(clock=20000000)
#use rs232(baud=9600, UART1)


void main() { 

   int i, value, min, max;

   printf("Sampling:");                        

   setup_adc_ports( sAN0 );                     
   setup_adc( ADC_CLOCK_INTERNAL );            
   set_adc_channel( 0 );                      

   do {
      min=255;
      max=0;
      for(i=0; i<=30; ++i) {
         delay_ms(100);                        
         value = read_adc();                   
         if(valuemax)
            max=value;
      }
      printf("nrMin: %2X  Max: %2Xnr",min,max);     
   } while (TRUE);
}