專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導(dǎo)入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
** PIC CCS C語言程序范例 ** **
CCS C編譯器包含許多常見應(yīng)用程序的示例程序庫。每個示例程序都包含一個標題,其中包含有關(guān)如何運行示例的說明,以及必要時用于連接外部設(shè)備的接線說明。以下是我們的編譯器附帶的三個這樣的示例程序,以及由編譯器生成的列表文件,其顯示生成的與C代碼對應(yīng)的程序集。有關(guān)CCS C編譯器附帶的示例文件和源代碼驅(qū)動程序的完整列表,請轉(zhuǎn)到:步進電機控制器| 秒計時器| 簡單的A / D | 示例列表文件| 示例文件列表步進電機控制器
////////////////////////////////////////////////// /////////////////////// //// EX_STEP.C //// //// //// ////這個程序接口到步進電機。程序?qū)?/// ////使用RS-232接口來控制電機//// ////模擬輸入,開關(guān)輸入或RS-232命令。//// //// //// ////按如下方式配置CCS原型卡://// ////將步進電機連接到引腳47-50(B0-B3)//// / /// Conenct 40到54(按鈕)////
////連接9到15(鍋)////
////請參閱下面的其他連接。//// ////////////////////////////////////////////// /////////////////////////// ////(C)版權(quán)所有1996,2001定制電腦服務(wù)//// ////源代碼只能由CCS //// //// C編譯器的許可用戶使用。此源代碼只能分發(fā)給CCS C編譯器的其他//// ////許可用戶。沒有其他用途,//// ////允許復(fù)制或分發(fā),不得書面//// ////許可。使用該軟件//// ////以目標代碼形式創(chuàng)建的衍生程序不受任何限制。//// ////////////////////////////////////////////// ///////////////////////////
include <16c74.h> #fuses HS,NOWDT,NOPROTECT #use delay(clock = 20000000)#use rs232(baud = 9600,xmit = PIN_C6,rcv = PIN_C7)//跳線:8到11,7到12
#包括
define FOUR_PHASE TRUE
ifdef FOUR_PHASE
字節(jié)常量倉[4] = {0b0101, 0b1001, 0b1010, 0b0110}; #else偽字節(jié)常量倉[8] = {0b0101, 0b0001, 0b1001, 0b1000, 0b1010, 0b0010, 0b0110, 0b0100}; #萬一
drive_stepper(字節(jié)速度,字符dir,字節(jié)步長){ static byte stepper_state = 0; 字節(jié)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( “\ r \ n”);
while(TRUE){ value = read_adc(); 的printf( “%2X \ r”,值); if(value <0x80) drive_stepper(value,'R',8); 否則if(value> 0x80) drive_stepper(128-(value-128),’F’,8); }
use_switch(byte speed,char dir){
字節(jié)步驟;
printf(“\ n \ rSteps per press:”); steps = gethex();
while(true){
while(輸入(PIN_B7)); drive_stepper(速度,DIR,步驟); while(!input(PIN_B7)); delay_ms(100); } }
main(){
字節(jié)速度,步驟; char dir;
setup_port_a(RA0_RA1_ANALOG);
while(TRUE){ printf(“\ n \ rSpeed(hex):”); speed = gethex();
if(speed == 0) use_pot();
printf(“\ n \ rDirection(F,R):”); DIR = GETC()| 0×20; putc將(DIR);
printf(“\ n \ rSteps(hex):”); steps = gethex();
if(steps == 0) use_switch(speed,dir);
drive_stepper(速度,DIR,步驟); }
}
秒計時器//////////////////////////////////////////////// ///////////////////////
//// EX_STWT.C //// //// //// ////這個程序使用RTCC(timer0)和中斷來保持//// ////實時秒計數(shù)器。一個簡單的秒表功能//// ////然后實現(xiàn)。//// //// //// ////按如下方式配置CCS原型卡://// ////插入跳線:11到17和12到18. //// // ////////////////////////////////////////////////// ///////////////////
include <16C84.H>
fuses HS,NOWDT,NOPROTECT
use delay(clock = 20000000)#use rs232(baud = 9600,xmit = PIN_A3,rcv = PIN_A2)
define INTS_PER_SECOND 76 //(20000000 /(4 256 256))
字節(jié)秒; //一個運行的秒計數(shù)字節(jié)int_count; // 經(jīng)過//秒之前剩余的中斷數(shù)
int_rtcc //每次clock_isr(){// RTCC(timer0)溢出(255-> 0)時都會調(diào)用此函數(shù)。 //對于這個程序, 如果( - int_count == 0){//每秒,這是apx 76次。 ++秒; int_count = INTS_PER_SECOND; }
}
main(){
字節(jié)開始;
int_count = INTS_PER_SECOND; set_rtcc(0); setup_counters(RTCC_INTERNAL,RTCC_DIV_256); enable_interrupts(RTCC_ZERO); enable_interrupts(GLOBAL);
做{
printf(“按任意鍵開始。\ n \ r”); GETC(); 開始=秒; printf(“按任意鍵停止。\ n \ r”); GETC(); printf(“%u seconds。\ n \ r”,秒啟動);
} while(TRUE);
}
簡單的A / D ////////////////////////////////////////////// /////////////////////////// //// EX_ADMM.C ////
//// //// ////這個程序在//// // RS-232接口上顯示最少和最多30個A / D樣本。這個過程永遠重復(fù)。//// //// //// ////配置CCS原型卡如下://// ////插入跳線:11到17,12到18和9到16 /// / ////使用#9 POT改變電壓。//// ////////////////////////////////////////////// ///////////////////////////
include <16C71.H>
use delay(clock = 15000000)#use rs232(baud = 9600,xmit = PIN_A3,rcv = PIN_A2)
main(){
int i,value,min,max;
的printf( “采樣:”);
setup_port_a(ALL_ANALOG); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(0);
做{ min = 255; 最大= 0; for(i = 0; i <= 30; ++ i){ delay_ms(100); value = Read_ADC(); if(value <min) min = value; if(value> max) max = value; } printf(“\ n \ rMin:%2X Max:%2X \ r \ n”,min,max);
} while(TRUE);
}
輸出清單……………….. min = 255; 008D:MOVLW FF 008E:MOVWF 28 ……………….. max = 0; 008F:CLRF 29 ……………….. incc = TRUE; 0090:BSF 2B,0
………………..(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(值> 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(xiàn)
00AB:GOTO 092 ……………….. if(incc)00AC:BTFSC 2B,0 ……………. …. counter ++;
00AD:INCF 2A,F(xiàn)