PIC单片机C语言使用手册
更新时间:2023-10-13 13:11:01 阅读量: 综合文库 文档下载
- pic单片机c语言教程推荐度:
- 相关推荐
本手册分两部分:
第一部分 HI-TECH PICC C 的使用说明. 这里我们只讲述了PICC C与标准C的不同,
它不是一本C语言的教程, 并且我们假定你有C语言的基础.
第二部分 在伟福集成环境下使用PICC.
讲述在伟福集成环境如可设置PICC, 简单的调试步骤. 更详细的说明请参阅
伟福仿真器使用手册.
关于如何在MPLAB下使用PICC C语言, 请参阅Microchip相应的手册.
南京伟福实业有限公司
电话: 025 3193973 网址: www.wave-cn.com 电子信箱: wave-cn@263.net
PICC C 编译器请向Microchip 上海分公司购买, 售价: RMB 599. 电话: 021 62755700 网址: www.microchip.com
Hi-tech 公司网址: www.htsoft.com
第一部分
为了对PIC单片机有更好的支持,PICC在标准C的基础上作了一些扩充: ? 定义I/O函数,以便在你的硬件系统中使用
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 -UBROF .UBR
Format
Tektronix HEX Tektronix style hex records -TEK .HEX American Hex format with symbols for American -AAHEX .HEX Automation Automation emulators HEX
Bytecraft .CBytecraft code format(缺省) n/a(缺省) .COD OD
Library HI-TECH library file n/a .LIB
1-5 符号文件
PICC -G 命令用于生成符号文件,有了符号文件,你就可以进行源程序调试.
命令格式为: PICC -16F877 -G test.c 在使用仿真器时必须使用-G命令。
1-6 配置字
PIC单片机的配置字可以用__CONFIG命令来定义:
#include
其中x是配置字,头文件中定义了相应的配置说明符,如: __CONFIG(WDTDIS & XT & UNPROTECT);
这将关闭看门狗,设置XT振方式,程序不加密。注意:不同的
配置符间用'&'相联,未定义的部分保留未编程状态。详细的情况请参考 头文件及PIC数据手册。
1-7 ID 位置
有些PIC单片机在程序空间外还有ID空间,可用下面的方法来定义: #include
其中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 signed char 8 unsigned char 8 signed short 16 unsigned short 16 signed int 16 unsigned int 16 signed long 32
逻辑类型
有符号字符 无符号字符 有符号整数 无符号整数 有符号整数 无符号整数 有符号整数
0 或 1
-128..+127 0..255
-32768..+32767 0..65535
-32768..+32767 0..65535
-2147483648..+2147483647
0..4294967295
由-D24, -D32决定
unsigned long 32 无符号整数 float 24 浮点 double 24 or 32 浮点
1-10-1 常量及进制表示
PICC 支持标准C的进制表示方法。
l或L后缀表明常量为long类型, u或U后缀表示常量为unsinged类型。 浮点数为double类型,可以用f或F指定浮点数为float类型。 字符型由单引号括起,如'a'.
字符串由双引号括起,如\
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 \ SendBuff(HELLO);
一个非常量的数组被一个字符串初始化, 如: char fred[] = 'Hello world\ 将在RAM中保留一个数组, 在startup时, 用存放在ROM中的\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 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
var = 1; #asm
rlf _var, 1 rlf _var, 1 #endasm
asm(\ }
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. 打开观察窗口观察变量
正在阅读:
PIC单片机C语言使用手册10-13
RHCE04-26
2018年成人高考审计学 考试及答案(1-5)知识点复习考点09-06
健康档案统计及档案盒内目录表格08-11
中国入世的过程08-12
网球体育理论考试03-09
四川省渠县九校2022届九年级历史下学期第一次联合模拟试题04-12
浅析明代蒙学的教材和教法06-26
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 单片机
- 语言
- 手册
- 使用
- PIC
- 甘肃省预防接种重大失误责任追究办法
- 上市公司财务舞弊案例分析-无报表但案例很多
- 浅议税务行政诉讼风险及其应对
- 藏族历史与文化概述 - 图文
- 转速开环恒压频比控制交流 - 图文
- 上机实训九 数组的应用(xin)
- 谈判与辩论87分
- 超强回归—菜鸟进阶,c++魔兽争霸全图外挂制作全教程
- 2010年上半年工作汇报
- 2015-2016学年高二上学期期中信息技术试卷
- FLAC3D知识介绍
- 忠义小学红十字周紧急疏散演练活动方案
- 西安三星闪存项目拆迁安置实施方案
- 开题报告
- 2017临沂中考满分作文:借我一双慧眼吧
- Cadence-skill语言简介
- 电动卷扬机传动装置设计 - 图文
- 长春海绵城市设计说明专篇(施工图设计格式)
- 宏观练习题
- 瓦斯监控、检测方案