首页 PICC使用手册

PICC使用手册

举报
开通vip

PICC使用手册 本手册分两部分: 第一部分 HI-TECH PICC C 的使用说明. 这里我们只讲述了 PICC C与标准 C的不同, 它不是一本 C语言的教程, 并且我们假定你有 C语言的基础. 第二部分 在伟福集成环境下使用 PICC. 讲述在伟福集成环境如可设置 PICC, 简单的调试步骤. 更详细的说明请参阅 伟福仿真器使用手册. 关于如何在MPLAB下使用 PICC C语言, 请参阅Microchip相应的手册. ...

PICC使用手册
本手册分两部分: 第一部分 HI-TECH PICC C 的使用说明. 这里我们只讲述了 PICC C与标准 C的不同, 它不是一本 C语言的教程, 并且我们假定你有 C语言的基础. 第二部分 在伟福集成环境下使用 PICC. 讲述在伟福集成环境如可设置 PICC, 简单的调试步骤. 更详细的说明请参阅 伟福仿真器使用手册. 关于如何在MPLAB下使用 PICC C语言, 请参阅Microchip相应的手册. 该软件是以 Microhcip公司提供的 PICC限 7版(智能编译 57 67 77 877)为准 相关资料获取网站: M icrochip网址: www.microchip.com Hi-tech 公司网址: www.htsoft.com 第一部分 为了对 PIC单片机有更好的支持,PICC在标准 C的基础上作了一些扩充: z 定义 I/O函数,以便在你的硬件系统中使用中定义的函数。 z 用 C语言编写中断服务程序 z 用 C语言编写 I/O操作程序 z 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'格式。你可以用 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 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命令来定义: #include __CONFIG(x) 其中 x是配置字,头文件中定义了相应的配置说明符,如: __CONFIG(WDTDIS & XT & UNPROTECT); 这将关闭看门狗,设置 XT振方式,程序不加密。注意:不同的 配置符间用'&'相联,未定义的部分保留未编程状态。详细的情况请参考 头文件及 PIC数据手册。 1-7 ID 位置 有些 PIC单片机在程序空间外还有 ID空间,可用下面的方法来定义: #include __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()用来加入一条汇编语言. 如: #include 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语言. 第二部分 2-1 安装 PICC 将 CD-ROM装入光驱, 自动运行程序将自动启动, 如果你已禁止自动运行功能, 可以 直接运行: cd_drive:\compiler\install.exe 安装程序将指导你完成 PICC的安装. 2-2 设置伟福集成环境 在伟福集成环境中, 将编译器路径指向 PICC 所在目录 将C命令行设置为: -16F877 –G –O –Zg -c 将连接命令行设置为: -16F877 –G –O -Zg 其中: -16F877 为芯片型号 –G –O -c为源程序调试设置项, 不可修改 –Zg 为打开优化 你可以在命令行中加入其它控制项 2-3 调试C语言 在WAVE\SAMPLES目录下有一个 PIC C语言的例子程序: PIC_C.PRJ. 1. 打开 PIC_C项目. 2. 编译该项目(F9) 3. 用 F7,F8单步调试例子程序 4. 打开观察窗口观察变量
本文档为【PICC使用手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_223060
暂无简介~
格式:pdf
大小:37KB
软件:PDF阅读器
页数:9
分类:互联网
上传时间:2010-10-29
浏览量:158