您的位置 首页 解答

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

#TYPE语法:#typestandard-type=size#typedefault=areastandard-type是short,int,long或用户定义尺寸中的之一;size是1,8,16或

#TYPE

语法: #type standard-type=size

#type default=area

standard-type是short,int,long或用户界说尺度中的之一;

size是1,8,16或32;

area是#TYPE运用typemod指令界说的存储区.

意图:编译器默许将short看作1位, 将int看作8位, 将long看作16位.传统的C习惯为方针处理器而将INT界说成更高功率的尺度.在PIC中,INT是8位.为了有助于代码兼容,#type指令答应改动这些关键字. #TYPE能从头界说这些关键字.

留意:逗号是可选项.当然#TYPE或许使一些尺度得不到4种关键字的描绘(如上面的1位整型),下面的4种整型或许总是被用来表明:INT1,INT8,INT16和INT32.假如在你的程序运用了#TYPE,在CCS中的比如程序和包括的文件被正告而或许不正确作业.

这个指令也常用来将默许的有用RAM区改动成变量存储区.经过指定default=area就可完成,这儿的area是一个typemod地址空间.

比如:TYPE SHORT=8, INT=16, LONG=32

#TYPE default=area

typemod<,,,0x100,0x1ff>user_ram_block;

#type default= user_ram_block //一切的变量将在0x100~0x1ff这个区进行声明

#type default= //将存储器从头存回一般的状况

比如文件:ex_cust.c

文件: ex_cust.c如下:

#pragma case //坚持C编译器之间的兼容性,它有必要呈现在其它恣意预处理器指令之前

#pragma type short=8,int=16,long=32 //从头界说short, int, long

#define version 0x0001 //用version替代0x0001

#if defined(__PCB__) //若运用了PCB编译器,则defined( __PCB__)返回值为1

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

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

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

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

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

#pragma use rs232(baud=9600, xmit=PIN_A3, rcv=PIN_A2)

//运用波特率为9600,

//发送脚为PIN_A3

//接收脚为PIN_A2

//使能内置函数:GETC,PUTC和PRINTF, kbhit();

#define compiler __PCB__ //用compiler替代__PCB__

#elif defined(__PCM__)

#include <16F877.H>

#pragma fuses HS,NOWDT,NOPROTECT,NOLVP

#pragma use delay(clock=20000000)

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

#define compiler __PCM__

#elif defined(__PCH__)

#include <18F452.H>

#pragma fuses HS,NOWDT,NOPROTECT,NOLVP

#pragma use delay(clock=20000000)

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

#define compiler __PCH__

#endif //完毕if界说

#pragma id version

#reserve 0x20:0x2f //将RAM从地址0x20到0x2f的单元保存下来不被运用

//#reserve有必要呈现在#DEVICE指令之后,不然,没有用

int CYCLES; // Global cycles (note upper case)将CYCLES界说为16位大局整型变量

#inline //告知编译器,下面的函数当即被履行

void pulse_B0() {

#pragma use fast_io(B) //履行I/O的快速办法将使编译器不必对I/O方向寄存器进行编程就//可履行I/O操作,但用户有必要确保经过set_tris_X()来设置I/O方向寄//存器.

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

delay_ms(100); //延时100ms

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

delay_ms(100); //延时100ms

#pragma use standard_io(B) //告知编译器,今后每次运用I/O,原来是输出设置就永远是输出

//设置,直到下一个#USE XXX_io呈现停止

}

#separate //告知编译器,下面的程序当即被分隔履行,

//常用来阻挠编译器主动制作一个INLINE程序,也就说#inline到此停止,不再有用

void send_pulses() {

int cycles; // Local cycles (note lower case)

for(cycles=CYCLES; cycles!=0; –cycles) {

pulse_B0();

}

}

#pragma zero_ram // #zero_ram将一切的内部寄存器清0,I/O口为输出设置

void main() {

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

output_low(PIN_B1); //脚(PIN_B1)输出低电平

printf(“Firmware version is %4X\r\n”,version);

printf(“Compiled on %s with compiler version %s\r\n”, __DATE__, compiler);

printf(“Pulsing B0 and B1…”);

for(CYCLES=100;CYCLES<=300;CYCLES+=100) {

printf(“\r\nMajor cycle #%c…”,(CYCLES/100)+0);

output_low(PIN_B1); //脚(PIN_B1)输出低电平

output_high(PIN_B1); //脚(PIN_B1)输出高电平

send_pulses();

}

printf(“\r\nAll Done.”);

delay_ms(3); // Allow UART to finish

}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部