PIC单片机C语言使用手册.docx

上传人:b****4 文档编号:3662347 上传时间:2022-11-24 格式:DOCX 页数:10 大小:21.31KB
下载 相关 举报
PIC单片机C语言使用手册.docx_第1页
第1页 / 共10页
PIC单片机C语言使用手册.docx_第2页
第2页 / 共10页
PIC单片机C语言使用手册.docx_第3页
第3页 / 共10页
PIC单片机C语言使用手册.docx_第4页
第4页 / 共10页
PIC单片机C语言使用手册.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

PIC单片机C语言使用手册.docx

《PIC单片机C语言使用手册.docx》由会员分享,可在线阅读,更多相关《PIC单片机C语言使用手册.docx(10页珍藏版)》请在冰豆网上搜索。

PIC单片机C语言使用手册.docx

PIC单片机C语言使用手册

本手册分两部分:

第一部分HI-TECHPICCC的使用说明.这里我们只讲述了PICCC与标准C的不同,

它不是一本C语言的教程,并且我们假定你有C语言的基础.

第二部分在伟福集成环境下使用PICC.

讲述在伟福集成环境如可设置PICC,简单的调试步骤.更详细的说明请参阅

伟福仿真器使用手册.

关于如何在MPLAB下使用PICCC语言,请参阅Microchip相应的手册.

 

南京伟福实业有限公司

电话:

0253193973网址:

电子信箱:

wave-

PICCC编译器请向Microchip上海分公司购买,售价:

RMB599.

电话:

网址:

Hi-tech公司网址:

 

第一部分

为了对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-3PICC包含一些标准库

1-4PICC编译器可以输出一些格式的目标文件,缺省设置为输出Bytecraft的'COD'

格式和Intel的'HEX'格式。

你可以用表1-1中的命令来指定输出格式。

表1-1

格式名称

描述

PICC命令

文件类型

MotorolaHEX

S1/S9typehexfile

-MOT

.HEX

IntelHEX

Intelstylehexrecords(缺省)

-INTEL

.HEX

Binary

Simplebinaryimage

-BIN

.BIN

UBROF

UniversalBinaryImageRelocatableFormat

-UBROF

.UBR

TektronixHEX

Tektronixstylehexrecords

-TEK

.HEX

American

HexformatwithsymbolsforAmerican

-AAHEX

.HEX

AutomationHEX

Automationemulators

Bytecraft.COD

Bytecraftcodeformat(缺省)

n/a(缺省)

.COD

Library

HI-TECHlibraryfile

n/a

.LIB

1-5符号文件

PICC-G命令用于生成符号文件,有了符号文件,你就可以进行源程序调试.

命令格式为:

PICC-16F877-Gtest.c

在使用仿真器时必须使用-G命令。

1-6配置字

PIC单片机的配置字可以用__CONFIG命令来定义:

#include

__CONFIG(x)

其中x是配置字,头文件中定义了相应的配置说明符,如:

__CONFIG(WDTDIS&XT&UNPROTECT);

这将关闭看门狗,设置XT振方式,程序不加密。

注意:

不同的

配置符间用'&'相联,未定义的部分保留未编程状态。

详细的情况请参考

头文件及PIC数据手册。

1-7ID位置

有些PIC单片机在程序空间外还有ID空间,可用下面的方法来定义:

#include

__IDLOC(x)

其中x是ID标示,如:

__IDLOC(15F0);

将ID的四个单元定义为:

1,5,15,0.ID的具体位置由所指定的PIC

芯片自动设定。

1-8EEPROM数据

有些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总是采用位指令。

如:

intfoo;

foo|=0x40;

的编译结果为:

bsf_foo,6

为了方便可以定义如下宏:

#definebitset(var,bitno)((var)|=(1<<(bitno)))

#defienbitclr(var,bitno)((var)&=(1<<(bitno)))

上一条语句可写为:

bitset(foo,6);

1-10支持的数据类型

PICC支持1,2,4字节的基本类型。

所有的多字节类型都采用低有效位在前的格式,

表1-2列出了所有数据类型及它们所占空间大小。

 

 

                        表1-2

类型

大小(位)

数字类型

bit

1

逻辑类型

0或1

signedchar

8

有符号字符

-128..+127

unsignedchar

8

无符号字符

0..255

signedshort

16

有符号整数

-32768..+32767

unsignedshort

16

无符号整数

0..65535

signedint

16

有符号整数

-32768..+32767

unsignedint

16

无符号整数

0..65535

signedlong

32

有符号整数

-2147483648..+2147483647

unsignedlong

32

无符号整数

0..4294967295

float

24

浮点

double

24or32

浮点

由-D24,-D32决定

 

1-10-1常量及进制表示

PICC支持标准C的进制表示方法。

l或L后缀表明常量为long类型,u或U后缀表示常量为unsinged类型。

浮点数为double类型,可以用f或F指定浮点数为float类型。

字符型由单引号括起,如'a'.

字符串由双引号括起,如"Helloworld".

1-10-2位数据类型

PICC支持一位的变量,用bit来定义。

如:

staticbitinit_flag;

变量必须是全局的或静态的,它不能是自动变量或一个函数的参数,但可以作为

一个函数的返回类型。

位变量很象unsignedchar,但它只有0或1两个值,位变量占用空间少,且运算

速度快.所有的位变量在startup是被清0,请在程序开始处初始化它们。

如果将一个整型数赋给位变量,只是将最低位赋给位变量,如果你是想要将一个整型

变量是否为0赋值给一个位变量,请用:

bitvar=other_var!

=0;

如要你使用了PICC的-STRICT命令,bit将被视为非法命令。

1-10-2-1使用可位寻址的寄存器

位变量的定义可以与绝对地址的定义结合起来使用。

如:

为了访问STATUS中PowerDown位,先定义STATUS的绝对地址为3,然后再

定义一位变量绝对地址为27

staticunsignedcharSTATUS@0x03;

staticbitPD@(unsigned)&STATUS*8+3;

注意:

头文件中已定义所有的特殊功能寄存器及相应的位寄存器.

1-10-3

PICC浮点数使用IEEE75432位格式和IEEE754(截断)24位格式.

float类型使用24位格式,double使用24位或32位格式,由PICC命令控制,

-D24使用24位格式,-D32使用32位格式.

1-11绝对地址变量

一个全局的或静态的变量可以定位绝对地址,使用如下格式:

unsignedcharPortvar@0x06;

 这里定义了一个名为'Portvar'的变量,地址为06h,注意,编译器并不保留任何

   单元,仅仅是将一个变量分配在06h单元.它等价于汇编语言:

_PortvarEQU06h

 编译器及连接器都不作任何检查,完全由程序员保证分配不会发生冲突.

1-12结构与联合

PICC支持struct及union,它们可以作为函数的参数及返回值,也可以作为指针

指向的目标.

1-12-1结构限定

PICC支持在结构上使用限定符,如果在一个结构上使用限定符,那么,这个结构的

所有成员都被限定. 如:

bank1struct{

intnumber;

int*ptr;

}

在这个结构里,number,ptr都被放在bank1寄存器内.

1-12-2结构中定义位成员

  PICC支持在结构中定义位成员.

位成员按最低有效位在前的方式存储,位成员总是按8位字节方式存放,当当前

字节放满后再放下一个字节,位成员不会跨字节存放.如:

struct{

unsignedhi:

1;

unsigneddummy:

6;

unsignedlo:

1;

}foo@0x10;

结构foo占用10h单元,hi为10h单元的第0位,lo为10h单元的第7位,dummy为10h

单元的2-6位,(第6位为最高有效位)

 

  不使用的位可用未命名的位成员来定义,如果我们不使用dummy,就可定义为:

struct{

unsignedhi:

1;

unsigned:

6;

unsignedlo:

1;

}foo@0x10;

1-13在ROM及RAM存放字符串.

一个未说明的字符串总是存放在ROM中,并且只能通过常量指针为访问.

#defineHELLO"Helloword"

SendBuff(HELLO);

一个非常量的数组被一个字符串初始化,如:

charfred[]='Helloworld";

将在RAM中保留一个数组,在startup时,用存放在ROM中的"Helloworld"来初始化.

如果要将一个常数字符串作为函数参数或将它赋给一个指针,必须定义一个常数指针.

    如:

voidSendBuff(constchar*ptr)

1-14const,volatile类型限定符.

PICC支持标准C的const,volatile类型限定符

const类型限定符通知编译器一个目标含有的常量并且不会改变.一个常量被放

在ROM中,显然一个常量是不能被赋值的.如:

constintversion=3;

volatile类型限定符通知编译器,一个目标不能保证在连续的访问中不被改变.

这将禁止编译器对该目标的优化.所有的I/O口及在中断中使用的变量必须

有volatile类型限定符.如:

volatileunsignedcharP_A@0x05;

对volatile目标的访问与对non-volatile的访问是不同的,如对volatile目标置1是

先将该目标清0后加1,而对non-volatile目标置1是先将1放在W中后再将W

赋值到目标中.

1-14特别的类型限定符.

 PICC支持一些特别的类型限定符:

persistent,bank1,bank2及bank3,

   这些限定符不可用于自动变量.

1-14-1persistent

按C的标准,所有的C变量在startup时被清为0.但是在有些情况下,我们希望在

复位后仍保持一些变量的值.persistent类型限定符使被其限定的变量在

startup时不被清0,而保留原有的值.

1-14-2bank1,bank2及bank3类型限定符.

bank1,bank2及bank3类型限定符用于指定变量所在的寄存器页.如:

staticbank3unsignedcharfred;

bank3unsignedchar*ptrfred;

缺省页是bank0

1-15C语言中的中断处理

在PICCC语言中可以用"interrupt"限定符来编写中断服务程序.

一个中断服务函数必须用interruptvoid来定义,不能有参数,并且不能被C

 语言直接调用.如:

longtick_count;

voidinterrupttc_int(void)

{

++tick_count;

}

1-15-1在中断中保存环境

 PIC单片机硬件只保存PC,PICC编译器自动地保存其它可能用到的变量.但是

  编译器无法确定inline中的汇编语言段使用变量的情况,你必须自已保护它们.

1-15-2开启中断

在PIC.H中定义了所有的中断位,di()关闭所有中断,ei()打开所有中断.如:

ADIE=1;//A/Dinterruptwillbeused

PEIE=1;//allperipheralinterruptsareenabled

ei(); //enableallinterrupts

di(); //disableallinterrupts

1-16在C中使用汇编语言#asm,#endasm,asm()

 可以在C语言中直接使用汇编语言.#asm,#endasm用来加入一段汇编语言,

   而asm()用来加入一条汇编语言.如:

#include

unsingedcharvar;

voidmain(void)

{

var=1;

#asm

rlf_var,1

rlf_var,1

#endasm

asm("rlf_var,1");

}

1-17函数调用变换

由于PIC5X只有两级堆栈,PICC编译器使用转移指令来调用函数,这样被套调用

层次增加,但调用速度下降,请在需要快速调用的函数前加fastcall来指定编译器

直接使用调用指令调用函数.

对于14位的PIC单片机,将永远使用调用指令调用.

1-18MPLAB使用的调试控制项

-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目录下有一个PICC语言的例子程序:

PIC_C.PRJ.

1.打开PIC_C项目.

2.编译该项目(F9)

3.用F7,F8单步调试例子程序

4.打开观察窗口观察变量

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1