CCS Cコンパイラー・サンプル・プログラム
サンプル・ファイルの全リストCCS Cコンパイラーは多くの共通アプリケーションのためのサンプル・プログラムのライブラリーを含んでいます。
各サンプル・プログラムはどの様にサンプルを実行するか命令とヘッダーを含んでいます。
必要の有る場合は、外部デバイスとのインターフェースのための配線のインストラクションも含んでいます。
サンプル・ファイルはインストールされますとフォルダー Examplesにあります。
以下はコンパイラに含まれているサンプル・プログラムです。コンパイラにより生成されたリスト・ファイルが Cコードに呼応するようにアセンブリーが示されています。
サンプル・ファイル, ソース・コード・ドライバーのリストはCCS Cコンパイラに含まれています。 ここをクリック
PCMコマンドライン版 又は、PCW IDE版(PIC12とPIC16®をサポート): |
---|
PCDコマンドライン版(PIC24/dsPIC® DSC ファミリー) 又は、PCWHD IDE版(PIC10,12,16,18,PIC24/dsPIC® DSC ファミリーをサポート): |
---|
さらに多くのサンプル・プログラムとライブラリー |
---|
下記が新しく追加されたライブラリーとサンプルです:
|
ステッパー・モーター・コントローラ |
---|
///////////////////////////////////////////////////////////////////////// //// EX_STEP.C //// //// //// //// This program interfaces to a stepper motor. The program will //// //// use the RS-232 interface to either control the motor with a //// //// analog input, a switch input or by RS-232 command. //// //// //// //// Configure the CCS prototype card as follows: //// //// Connect stepper motor to pins 47-50 (B0-B3) //// //// Conenct 40 to 54 (pushbutton) //// //// Connect 9 to 15 (pot) //// //// See additional connections below. //// ///////////////////////////////////////////////////////////////////////// //// (C) Copyright 1996,2001 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 <16c74.h> #fuses HS,NOWDT,NOPROTECT #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12 #include |
セカンド・タイマー |
---|
/////////////////////////////////////////////////////////////////////// //// EX_STWT.C //// //// //// //// This program uses the RTCC (timer0) and interrupts to keep a //// //// real time seconds counter. A simple stop watch function is //// //// then implemented. //// //// //// //// Configure the CCS prototype card as follows: //// //// Insert jumpers from: 11 to 17 and 12 to 18. //// /////////////////////////////////////////////////////////////////////// #include<16f877a.h> #fuses HS,NOLVP,NOWDT,PUT #use delay(clock=20000000) #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) #define high_start 76 byte seconds, high_count; #INT_RTCC //Interrupt procedure clock_isr() { //called every time RTCC high_count -= 1; //flips from 255 to 0 if(high_count==0) { ++seconds; high_count=high_start; //Inc SECONDS counter every } //76 times to keep time } void main() { //a simple stopwatch program byte start, time; high_count = high_start; setup_timer_0( RTCC_INTERNAL | RTCC_DIV_256 ); set_timer0(0); enable_interrupts(INT_RTCC); enable_interrupts(GLOBAL); do { printf("Press any key to begin.nr"); getc(); start = seconds; printf("Press any key to stop.rn"); getc(); time = seconds - start; printf("%U seconds.nr", time); } while (TRUE); } |
シンプルなA/D |
---|
///////////////////////////////////////////////////////////////////////// //// EX_ADMM.C //// //// //// //// This program displays the min and max of 30 A/D samples over //// //// the RS-232 interface. The process is repeated forever. //// //// //// //// Configure the CCS prototype card as follows: //// //// Insert jumpers from: 11 to 17, 12 to 18 and 9 to 16 //// //// Use the #9 POT to vary the voltage. //// ///////////////////////////////////////////////////////////////////////// #include<16f877a.h> #fuses HS,NOLVP,NOWDT,PUT #use delay(clock=20000000) #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) void main() { int i, value, min, max; printf("Sampling:"); setup_adc_ports( RA0_ANALOG ); setup_adc( ADC_CLOCK_INTERNAL ); set_adc_channel( 0 ); do { //Takes 30 samples from pin A0 min = 255; //and displays the min and max max = 0; //values for that 100ms period for(i = 0; i <= 30; ++i) { delay_ms(100); value = read_adc(); if(value < min) min = value; if(value > max) max = value; } printf("nrMin:%x MAX: %x", min, max); } while (TRUE); } |
C/ASM出力リスティング |
---|
.................... min=255; 008D: MOVLW FF 008E: MOVWF 28 .................... max=0; 008F: CLRF 29 .................... incc=TRUE; 0090: BSF 2B,0 .................... for(i=0;i<=30;++i) { 0091: CLRF 26 0092: MOVLW 1F 0093: SUBWF 26,W 0094: BTFSC 03,0 0095: GOTO 0AC .................... delay_ms(100); 0096: MOVLW 64 0097: MOVWF 2C 0098: GOTO 02D .................... value = Read_ADC(); 0099: BSF 1F,2 009A: BTFSC 1F,2 009B: GOTO 09A 009C: MOVF 1E,W 009D: MOVWF 27 .................... if(value < min) 009E: MOVF 28,W 009F: SUBWF 27,W 00A0: BTFSC 03,0 00A1: GOTO 0A4 .................... min=value; 00A2: MOVF 27,W 00A3: MOVWF 28 .................... if(value > max) 00A4: MOVF 27,W 00A5: SUBWF 29,W 00A6: BTFSC 03,0 00A7: GOTO 0AA .................... max=value; 00A8: MOVF 27,W 00A9: MOVWF 29 .................... } 00AA: INCF 26,F 00AB: GOTO 092 .................... if (incc) 00AC: BTFSC 2B,0 .................... counter++; 00AD: INCF 2A,F |
簡単な正弦波ジェネレータ |
---|
///////////////////////////////////////////////////////////////////////// //// 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); } } |
ウォッチドッグ・タイマー |
---|
///////////////////////////////////////////////////////////////////////// //// 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変換 |
---|
///////////////////////////////////////////////////////////////////////// //// 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(value |