ccs C语言编译器,PIC单片机CCS之C语言(#TYPE的用法)

原标题:PIC单片机CCS之C语言(#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,在中的例子程序和包含的文件被警告而可能不正确工作.

这个命令也常用来将默认的有用RAM区改变成变量存储区.通过指定default=area就可实现,这里的area是一个typemod地址空间.

例子:TYPE SHORT=8, INT=16, LONG=32

#TYPE default=area

typemoduser_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("Compion %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

}

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值