Syntax & Functions
문법 & 함수
http://www.ccsinfo.com/content.php?page=syntax-functions
▼예제들 포함된 사이트
http://www.ccsinfo.com/content.php?page=compexamples
PCM (supports most PIC12 and PIC16 devices):
PCD (supports PIC24/dsPIC® DSC families):
간단한 학교 프로젝트의 경우는 PCM계열의 칩으로 마무리할 수 있다.
▼예제를 통해 CCSC 만의 문법이 어떻게 차이가 있는지 살펴보자.
문법공부를 따로하기 보다는 해당 예제를 통해 익히는게 효율적이다.
#include <16c74.h> //칩 선언 #fuses HS,NOWDT,NOPROTECT //Freq. WDT, Code Protection 선언 #use delay(clock=20000000) //20MHz사용 #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12 #include <input.c> #byte port_b = 6 #define FOUR_PHASE TRUE #ifdef FOUR_PHASE byte const POSITIONS[4] = {0b0101, 0b1001, 0b1010, 0b0110}; #else byte const POSITIONS[8] = {0b0101, 0b0001, 0b1001, 0b1000, 0b1010, 0b0010, 0b0110, 0b0100}; #endif drive_stepper(BYTE speed, char dir, BYTE steps) { static BYTE stepper_state = 0; BYTE i; for(i=0; i<steps; ++i) { delay_ms(speed); set_tris_b(0xf0); port_b = POSITIONS[ stepper_state ]; if(dir!='R') stepper_state=(stepper_state+1)&(sizeof(POSITIONS)-1); else stepper_state=(stepper_state-1)&(sizeof(POSITIONS)-1); } } use_pot() { BYTE value; setup_adc(adc_clock_internal); set_adc_channel( 1 ); printf("rn"); while( TRUE ) { value=read_adc(); printf("%2Xr",value); if(value<0x80) drive_stepper(value,'R',8); else if(value>0x80) drive_stepper(128-(value-128),'F',8); } } use_switch(BYTE speed, char dir) { BYTE steps; printf("nrSteps per press: "); steps = gethex(); while(true) { while(input(PIN_B7)) ; drive_stepper(speed,dir,steps); while(!input(PIN_B7)) ; delay_ms(100); } } main() { byte speed,steps; char dir; setup_port_a(RA0_RA1_ANALOG); while (TRUE) { printf("nrSpeed (hex): "); speed = gethex(); if(speed==0) use_pot(); printf("nrDirection (F,R): "); dir=getc()|0x20; putc(dir); printf("nrSteps (hex): "); steps = gethex(); if(steps==0) use_switch(speed,dir); drive_stepper(speed,dir,steps); } }
Simple 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 //HighSpeed, No Low Voltage Prgming, Power Up Timer #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);
}
'MPLAB > CCSC Syntax' 카테고리의 다른 글
Making Hex File (0) | 2013.01.23 |
---|