新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)CCS之C語(yǔ)言(#DEVICE的用法)

PIC單片機(jī)CCS之C語(yǔ)言(#DEVICE的用法)

作者: 時(shí)間:2016-11-17 來(lái)源:網(wǎng)絡(luò) 收藏
#DEVICE

語(yǔ)法: #device chip options

本文引用地址:http://m.butianyuan.cn/article/201611/315393.htm

chip是一個(gè)特殊的處理器名字(如:PIC16C74),目的是取得支持設(shè)備的當(dāng)前列表:

START | RUN | CCSC +Q

Option是設(shè)備標(biāo)準(zhǔn)操作的限定句.有效的可選項(xiàng)是:

*=5 使用5位指針(適合所有的器件)

*=8 使用8位指針(適合14和16位的器件)

*=16 使用16位指針(適合14位的器件)

ADC=x 這里的x是read_adc()函數(shù)返回的位數(shù).

ICD=TRUE 產(chǎn)生兼容Microchips ICD硬件調(diào)試代碼

WRITE_EEPROM=ASYNC 當(dāng)寫EEPROM時(shí),防止EEPROM寫暫停.當(dāng)使用時(shí),不會(huì)從

ISR和外部的ISR寫入EEPROM

chip和options是可選項(xiàng),若干個(gè)#device行可全部用來(lái)定義這個(gè)設(shè)備.注意: 帶有`芯片標(biāo)識(shí)符的#device將會(huì)清除先前的#device和#fuse的設(shè)定.

目的:定義目標(biāo)處理器,每個(gè)程序必須有一個(gè)正確的帶有chip的#device.

例子:

#device PIC16C74 //定義目標(biāo)處理器為PIC16C74

#device PIC16C67 *=16 //定義目標(biāo)處理器為PIC16C67,使用16位指針

#device *=16 ICD=TRUE //使用16位指針,產(chǎn)生兼容的ICD硬件調(diào)試代碼

#device PIC16F877 *=16 ADC=10 // read_adc()函數(shù)返回的位數(shù)為10位

例子文件:ex_mxram.c, ex_icd.c, 16c74.h

文件: ex_mxram.c如下:

#if defined( __PCB__) //若使用了PCB編譯器,則defined( __PCB__)返回值為1

#include <16C57.H> //包含16C57.H頭文件

#device *=8 // This allows auto variables over location 0x1F

//使用8位指針(適合14和16位的器件)

#fuses HS, NOWDT, NOPROTECT //HS:高速晶振/諧振器, NOWDT:不使用WDT

// NOPROTECT:程序存儲(chǔ)器代碼不保護(hù)

#use delay(clock=20000000) //使能內(nèi)置函數(shù)的功能:delay_ms()和delay_us()

//#USE DELAY()必須在#use rs232()使用之前出現(xiàn).

#use rs232(baud=9600, xmit=PIN_A3, rcv=PIN_A2) //使用波特率為9600,

//發(fā)送腳為PIN_A3

//接收腳為PIN_A2

//使能內(nèi)置函數(shù):GETC,PUTC和PRINTF, kbhit();

#define BUFFSIZE 16 //用BUFFERSIZE代替10

#elif defined(__PCM__)

#include <16F877.H>

#device *=16 // This allows auto variables over location 0xFF

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay(clock=20000000)

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12

#define BUFFSIZE 64

#endif //結(jié)束if定義

byte buffer1[BUFFSIZE],buffer2[BUFFSIZE],buffer3[BUFFSIZE];

// Three buffers are allocated because C requires arrays elements to be in

// consecutive memory locations and the PIC memory has holes.

//聲明buffer1[BUFFSIZE]數(shù)組, buffer2[BUFFSIZE]數(shù)組, buffer3[BUFFSIZE]數(shù)組

// The following allows reads and writes to the three arrays like they are

// one large array.

void write_buffer(char * index, char value) {

if(index

buffer1[index]=value; //若index

else if(index<(BUFFSIZE*2)) //否則,若BUFFSIZE

buffer2[index%BUFFSIZE]=value;

else

buffer3[index%BUFFSIZE]=value; //否則,若index>(BUFFSIZE*2) ,則執(zhí)行該句;

}

char read_buffer(char * index) {

if(index

return(buffer1[index]); //若index

else if(index<(BUFFSIZE*2)) //否則,若BUFFSIZE

return(buffer2[index%BUFFSIZE]);

else

return(buffer3[index%BUFFSIZE]); //否則,若index>(BUFFSIZE*2) ,則執(zhí)行該句;

}

void main() {

char * i; //聲明字符型指針變量i

char c; //聲明字符型變量c

do {

i=0;

printf("rnEnter string: ");

do{

c=getc(); //讀UART

write_buffer(i++,c); //寫數(shù)組

} while(c!=r);

i=0;

printf("rnString from buffer: ");

do{

c=read_buffer(i++); //讀數(shù)組

putc(c); //寫UART,通過(guò)RS232發(fā)送

} while(c!=r);

} while(1);

}

上面的例子通過(guò)UART讀/寫三個(gè)數(shù)組.

文件: ex_icd.c如下:

#if defined(__PCM__) //若使用了PCM編譯器,則defined( __PCM__)返回值為1

#include <16F877.h> //包含16F877.h頭文件

#device ICD=TRUE //產(chǎn)生兼容Microchips ICD硬件調(diào)試代碼

#fuses HS,NOWDT,NOPROTECT,NOLVP //HS:高速晶振/諧振器, NOWDT:不使用WDT

// NOPROTECT:程序存儲(chǔ)器代碼不保護(hù)

#use delay(clock=20000000) //使能內(nèi)置函數(shù)的功能:delay_ms()和delay_us()

//#USE DELAY()必須在#use rs232()使用之前出現(xiàn).

#endif //結(jié)束if定義

#define TOGGLE_PIN PIN_B0 //用TOGGLE_PIN代替PIN_B0

// This function turns the LEDs on and off這個(gè)函數(shù)是用來(lái)開關(guān)LED

void flash_led() {

output_low(TOGGLE_PIN); // TOGGLE_PIN腳(PIN_B0)輸出低電平

delay_ms(500); //延時(shí)500ms

output_high(TOGGLE_PIN); // TOGGLE_PIN腳(PIN_B0)輸出高電平

delay_ms(500); //延時(shí)500ms

}

void main() {

int a, b, c; //聲明整型變量a, b和c

long al, bl, cl; //聲明Long型變量a1, b1和c1

a=10; //將a初始為10

b=25; //將b初始為25

al=300; //將a1初始為300

bl=525; //將b1初始為525

c=a+b; //簡(jiǎn)單數(shù)學(xué)加法

c=a*b; //簡(jiǎn)單的數(shù)學(xué)乘法

cl=al+bl;

cl=al*bl;

while(TRUE)

flash_led(); //LED的閃爍頻率為1Hz

}

上面的例子介紹delay_ms(), output_high(), output_low()函數(shù)的用法



關(guān)鍵詞: PIC單片機(jī)CCSDEVIC

評(píng)論


技術(shù)專區(qū)

關(guān)閉