《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

PICC ME16 C简要说明书
程序匠人 发表于 2008-2-14 4:41:00  阅读全文 | 回复(0) | 引用通告 | 编辑

第一部分 PICC C 的使用说明. 这里我们只讲述了PICC C与标准C的不同,它不是一本C语言的教
          程, 并且我们假定你有C语言的基础.

第二部分 关于如何在MPLAB下使用PICC C语言, 请参阅Microchip相应的手册.

 

   
第一部分

为了对PIC单片机有更好的支持,PICC在标准C的基础上作了一些扩充:

  • 定义I/O函数,以便在你的硬件系统中使用中定义的函数。
  • 用C语言编写中断服务程序
  • 用C语言编写I/O操作程序
  • C语言与汇编语言间的接口
1-1 与标准C的不同
  PICC只在一处与标准C不同:函数的重入。
因为PIC单片机的寄存器及堆栈有限,所以PICC不支持可重入函数。
   
1-2 支持的PIC芯片
  PICC 支持很多PIC单片机,支持PIC单片机的类型在LIB目录下的picinfo.ini 文件中有定义。
   
1-3 PICC 包含一些标准库
   
1-4 PICC 编译器可以输出一些格式的目标文件,缺省设置为输出Bytecraft的'COD' 格式和 Intel的'HEX'格式。你可以用表1-1中的命令来指定输出格式。
   
  表1-1
 
格式名称 描述 PICC 命令 文件类型
Motorola HEX S1/S9 type hex file -MOT .HEX
Intel HEX Intel style hex records(缺省) -INTEL .HEX
Binary Simple binary image -BIN .BIN
UBROF Universal Binary Image Relocatable Format -UBROF .UBR
Tektronix HEX Tektronix style hex records -TEK .HEX
American Hex format with symbols for American -AAHEX .HEX
Automation HEX Automation emulators    
Bytecraft .COD Bytecraft code format(缺省) n/a(缺省) .COD
Library HI-TECH library file n/a .LIB
   
1-5 符号文件
  PICC -G 命令用于生成符号文件,有了符号文件,你就可以进行源程序调试.
命令格式为: PICC -16F877 -G test.c
在使用仿真器时必须使用-G命令。
   
1-6 配置字
PIC单片机的配置字可以用__CONFIG命令来定义:

#i nclude
__CONFIG(x)
其中x是配置字,头文件中定义了相应的配置说明符,如:
__CONFIG(WDTDIS & XT & UNPROTECT);
这将关闭看门狗,设置XT振方式,程序不加密。注意:不同的配置符间用'&'相联,未定义的部分保留未编程状态。详细的情况请参考头文件及PIC数据手册。
   
1-7 ID 位置
有些PIC单片机在程序空间外还有ID空间,可用下面的方法来定义:
#i nclude
__IDLOC(x) 其中x是ID标示,如:
__IDLOC(15F0);
将ID的四个单元定义为:1, 5, 15, 0. ID的具体位置由所指定的PIC芯片自动设定。
   
1-8 EEPROM 数据
有些PIC单片机支持用外部编程器对内部的EEPROM进行编程。
__EEPROM_DATA()可以将用于初始化的数据放入HEX文件中,如:
__EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7)
可将0-7八个数放入HEX文件中,在用外部的编程器进行编程时将 这八个数写入PIC单片机中。
__EEPROM_DATA不是用于运行时写入EEPROM数据的,在运行时请用 EEPROM_READ(), EEPROM_WRITE()。
   
1-9 位指令
只要有可能,PICC总是采用位指令。如:
int foo;
foo |= 0x40;
的编译结果为:bsf _foo, 6
为了方便可以定义如下宏:
#define bitset(var, bitno) ((var) |= (1 << (bitno)))
#defien bitclr(var, bitno) ((var) &= (1 << (bitno)))
上一条语句可写为:bitset(foo, 6);
   
1-10 支持的数据类型
PICC 支持1,2,4字节的基本类型。 所有的多字节类型都采用低有效位在前的格式, 表1-2列出了所有数据类型及它们所占空间大小。
  表1-2
 
类型 大小(位) 数字类型
bit 1 逻辑类型 0 或 1
signed char 8 有符号字符 -128..+127
unsigned char 8 无符号字符 0..255
signed short 16 有符号整数 -32768..+32767
unsigned short 16 无符号整数 0..65535
signed int 16 有符号整数 -32768..+32767
unsigned int 16 无符号整数 0..65535
signed long 32 有符号整数 -2147483648..+2147483647
unsigned long 32 无符号整数 0..4294967295
float 24 浮点  
double 24 or 32 浮点 由-D24, -D32决定
   
1-10-1 常量及进制表示
PICC 支持标准C的进制表示方法。
l或L后缀表明常量为long类型, u或U后缀表示常量为unsinged类型。 浮点数为double类型,可以用f或F指定浮点数为float类型。
字符型由单引号括起,如'a'.
字符串由双引号括起,如"Hello world".
   
1-10-2 位数据类型
PICC 支持一位的变量,用bit来定义。如: static bit init_flag;
变量必须是全局的或静态的,它不能是自动变量或一个函数的参数,但可以作为 一个函数的返回类型。
位变量很象unsigned char,但它只有0或1两个值,位变量占用空间少,且运算 速度快. 所有的位变量在startup是被清0,请在程序开始处初始化它们。
如果将一个整型数赋给位变量,只是将最低位赋给位变量,如果你是想要将一个整型 变量是否为0赋值给一个位变量,请用: bitvar = other_var != 0;
如要你使用了PICC的-STRICT命令,bit将被视为非法命令。
   
1-10-2-1 使用可位寻址的寄存器
位变量的定义可以与绝对地址的定义结合起来使用。如: 为了访问STATUS中Power Down位,先定义STATUS的绝对地址为3,然后再 定义一位变量绝对地址为27
static unsigned char STATUS @ 0x03;
static bit PD @ (unsigned)&STATUS*8+3;
注意: 头文件中已定义所有的特殊功能寄存器及相应的位寄存器.
   
1-10-3 PICC浮点数使用IEEE754
32位格式和IEEE754(截断)24位格式.
float类型使用24位格式,double使用24位或32位格式, 由PICC命令控制, -D24使用24位格式, -D32使用32位格式.
   
1-11 绝对地址变量
一个全局的或静态的变量可以定位绝对地址, 使用如下格式:
unsigned char Portvar @ 0x06;  
这里定义了一个名为'Portvar'的变量, 地址为06h,注意,编译器并不保留任何    单元,仅仅是将一个变量分配在06h单元. 它等价于汇编语言: _Portvar EQU 06h   编译器及连接器都不作任何检查, 完全由程序员保证分配不会发生冲突.
   
1-12 结构与联合
PICC 支持struct及union, 它们可以作为函数的参数及返回值, 也可以作为指针 指向的目标.
   
1-12-1 结构限定
PICC 支持在结构上使用限定符, 如果在一个结构上使用限定符, 那么, 这个结构的 所有成员都被限定. 
如: bank1 struct { int number; int *ptr; }
在这个结构里,number, ptr 都被放在bank1寄存器内.
   
1-12-2 结构中定义位成员   
PICC 支持在结构中定义位成员.
位成员按最低有效位在前的方式存储,位成员总是按8位字节方式存放, 当当前 字节放满后再放下一个字节,位成员不会跨字节存放. 如:
struct {
unsigned hi: 1;
unsigned dummy: 6;
unsigned lo: 1;
} foo @ 0x10;
结构foo占用10h单元, hi为10h单元的第0位, lo为10h单元的第7位, dummy为10h 单元的2-6位,(第6位为最高有效位)   
不使用的位可用未命名的位成员来定义, 如果我们不使用dummy, 就可定义为:
struct {
unsigned hi: 1;
unsigned : 6;
unsigned lo: 1;
} foo @ 0x10;
   
1-13 在ROM及RAM存放字符串.
一个未说明的字符串总是存放在ROM中, 并且只能通过常量指针为访问.
#define HELLO "Hello word"
SendBuff(HELLO);
一个非常量的数组被一个字符串初始化, 如:
char fred[] = 'Hello world";
将在RAM中保留一个数组, 在startup时, 用存放在ROM中的"Hello world"来初始化.
如果要将一个常数字符串作为函数参数或将它赋给一个指针, 必须定义一个常数指针.
如: void SendBuff(const char * ptr)
   
1-14 const, volatile 类型限定符.
PICC 支持标准C的const, volatile 类型限定符
const类型限定符通知编译器一个目标含有的常量并且不会改变. 一个常量被放在ROM中, 显然一个常量是不能被赋值的. 如:
const int version = 3;
volatile 类型限定符通知编译器, 一个目标不能保证在连续的访问中不被改变. 这将禁止编译器对该目标的优化. 所有的I/O口及在中断中使用的变量必须 有volatile 类型限定符.
如: volatile unsigned char P_A @ 0x05;
对volatile目标的访问与对non-volatile的访问是不同的, 如对volatile目标置1是 先将该目标清0后加1, 而对non-volatile目标置1是先将1放在W中后再将W 赋值到目标中.
   
1-14 特别的类型限定符.  
PICC 支持一些特别的类型限定符: persistent, bank1, bank2及bank3,这些限定符不可用于自动变量.
   
1-14-1 persistent
按C的标准, 所有的C变量在startup时被清为0. 但是在有些情况下, 我们希望在 复位后仍保持一些变量的值. persistent类型限定符使被其限定的变量在 startup时不被清0, 而保留原有的值.
   
1-14-2 bank1, bank2及bank3类型限定符.
bank1, bank2及bank3类型限定符用于指定变量所在的寄存器页. 如:
static bank3 unsigned char fred;
bank3 unsigned char *ptrfred;
缺省页是 bank0
   
1-15 C语言中的中断处理
在PICC C语言中可以用"interrupt"限定符来编写中断服务程序.
一个中断服务函数必须用 interrupt void 来定义, 不能有参数, 并且不能被C语言直接调用. 如:
long tick_count;
void interrupt tc_int(void)
{ ++tick_count; }
   
1-15-1 在中断中保存环境  
PIC单片机硬件只保存PC, PICC 编译器自动地保存其它可能用到的变量. 但是编译器无法确定inline中的汇编语言段使用变量的情况, 你必须自已保护它们.
   
1-15-2 开启中断
在PIC.H中定义了所有的中断位, di()关闭所有中断, ei()打开所有中断. 如:
ADIE = 1; // A/D interrupt will be used
PEIE = 1; // all peripheral interrupts are enabled
ei();  // enable all interrupts
di();  // disable all interrupts
   
1-16 在C中使用汇编语言 #asm, #endasm, asm()  
可以在C语言中直接使用汇编语言. #asm, #endasm用来加入一段汇编语言, 而asm()用来加入一条汇编语言. 如:
#i nclude
unsinged char var;
void main(void)
{ var = 1;
#asm
rlf _var, 1
rlf _var, 1
#endasm
asm("rlf _var, 1");
}
   
1-17 函数调用变换
由于PIC5X只有两级堆栈, PICC 编译器使用转移指令来调用函数, 这样被套调用 层次增加, 但调用速度下降, 请在需要快速调用的函数前加fastcall来指定编译器 直接使用调用指令调用函数.
对于14位的PIC单片机, 将永远使用调用指令调用.
   
1-18 MPLAB使用的调试控制项
-FACKLOCAL 命令用于在MPLAB下观察函数内的局部变量
-MPLAB_ICD 命令用于使用ICD调试C语言.
   
  [ TOP ]
   
  第二部分
   
2-1 安装PICC
将CD-ROM装入光驱, 自动运行程序将自动启动, 如果你已禁止自动运行功能, 可以 直接运行: cd_drive:\compiler\install.exe
安装程序将指导你完成PICC的安装.
   
2-2 MPLAB下使用PICC C语言, 请参阅Microchip相应的手册.

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!