您的位置 首页 厂商

PIC单片机CCS之C言语(#DEVICE的用法)

#DEVICE语法:#devicechipoptionschip是一个特殊的处理器名字(如:PIC16C74),目的是取得支持设备的当前列表:START

#DEVICE

语法: #device chip options

chip是一个特别的处理器姓名(如:PIC16C74),意图是获得支撑设备的当时列表:

START | RUN | CCSC +Q

Option是设备规范操作的限制句.有用的可选项是:

*=5 运用5位指针(合适一切的器材)

*=8 运用8位指针(合适14和16位的器材)

*=16 运用16位指针(合适14位的器材)

ADC=x 这儿的x是read_adc()函数回来的位数.

ICD=TRUE 发生兼容Microchips ICD硬件调试代码

WRITE_EEPROM=ASYNC 当写EEPROM时,避免EEPROM写暂停.当运用时,不会从

ISR和外部的ISR写入EEPROM

chip和options是可选项,若干个#device行可悉数用来界说这个设备.留意: 带有`芯片标识符的#device将会铲除从前的#device和#fuse的设定.

意图:界说方针处理器,每个程序必须有一个正确的带有chip的#device.

比如:

#device PIC16C74 //界说方针处理器为PIC16C74

#device PIC16C67 *=16 //界说方针处理器为PIC16C67,运用16位指针

#device *=16 ICD=TRUE //运用16位指针,发生兼容的ICD硬件调试代码

#device PIC16F877 *=16 ADC=10 // read_adc()函数回来的位数为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:程序存储器代码不维护

#use delay(clock=20000000) //使能内置函数的功用:delay_ms()和delay_us()

//#USE DELAY()必须在#use rs232()运用之前呈现.

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

//发送脚为PIN_A3

//接收脚为PIN_A2

//使能内置函数: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 //完毕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]数组, buffer2[BUFFSIZE]数组, buffer3[BUFFSIZE]数组

// 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) ,则履行该句;

}

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) ,则履行该句;

}

void main() {

char * i; //声明字符型指针变量i

char c; //声明字符型变量c

do {

i=0;

printf(“\r\nEnter string: “);

do{

c=getc(); //读UART

write_buffer(i++,c); //写数组

} while(c!=\r);

i=0;

printf(“\r\nString from buffer: “);

do{

c=read_buffer(i++); //读数组

putc(c); //写UART,经过RS232发送

} while(c!=\r);

} while(1);

}

上面的比如经过UART读/写三个数组.

文件: ex_icd.c如下:

#if defined(__PCM__) //若运用了PCM编译器,则defined( __PCM__)回来值为1

#include <16F877.h> //包括16F877.h头文件

#device ICD=TRUE //发生兼容Microchips ICD硬件调试代码

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

// NOPROTECT:程序存储器代码不维护

#use delay(clock=20000000) //使能内置函数的功用:delay_ms()和delay_us()

//#USE DELAY()必须在#use rs232()运用之前呈现.

#endif //完毕if界说

#define TOGGLE_PIN PIN_B0 //用TOGGLE_PIN替代PIN_B0

// This function turns the LEDs on and off这个函数是用来开关LED

void flash_led() {

output_low(TOGGLE_PIN); // TOGGLE_PIN脚(PIN_B0)输出低电平

delay_ms(500); //延时500ms

output_high(TOGGLE_PIN); // TOGGLE_PIN脚(PIN_B0)输出高电平

delay_ms(500); //延时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; //简略数学加法

c=a*b; //简略的数学乘法

cl=al+bl;

cl=al*bl;

while(TRUE)

flash_led(); //LED的闪耀频率为1Hz

}

上面的比如介绍delay_ms(), output_high(), output_low()函数的用法

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/268133.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部