博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《PIC微控制器项目设计:C语言》一3.3.2 XC8语言的特性
阅读量:5876 次
发布时间:2019-06-19

本文共 2508 字,大约阅读时间需要 8 分钟。

3.3.2 XC8语言的特性

本文讲的是PIC微控制器项目设计:C语言一3.3.2 XC8语言的特性,在本节中,我们将介绍XC8 C语言的一些特性。不熟悉C语言的读者在继续阅读本章之前应阅读第4章。这里将在适当的时候将给出mikroC Pro for PIC和XC8之间的差异。

有关XC8语言的详细信息可以参阅MPLAB XC8编译器用户指南,该指南可从Microchip公司网站上获取。

程序模板

当创建一个新的XC8程序时,编译器生成图3.22所示的模板。在程序中,我们将修改此模板,并使用图3.23所示的模板来代替它。

screenshot
screenshot
XC8程序具有以下结构:
screenshot
必须在程序开始处声明单个头文件,以声明所有编译器和器件特定类型及SFR。

变量类型

XC8支持表3.1中的变量类型。请注意,字符型变量本身与无符号字符型变量相同。

screenshot
此外,XC8编译器支持24位或32位浮点变量,可以使用关键字double和float进行声明。

常量

常量对象是只读的,它们存储在微控制器的程序存储器中。在程序中不改变值的对象应存储为常量,以节省有限的随机存取存储器空间。

常量声明的示例如下所示:
screenshot
在最后一个例子中,从程序存储单元0x100处开始存储常量表。

持久性限定符

持久性限定符可指示变量不能被运行时启动代码所清除。下面给出一个例子:

screenshot

访问各个I/O引脚

可以通过指定端口名称,后跟字位,然后是句点和端口引脚名称来访问单个I/O引脚。下面给出一个例子:

screenshot

访问变量的各个位

可以使用以下的宏定义设置或复位变量的各个位:

screenshot
下面的代码设置了变量Count的第2位:
screenshot

指定配置位

screenshotpragma config指令用于为微控制器编程配置位。下面给出一个例子:

screenshot

C程序中的汇编语言指令

使用asm语句可以将汇编语言指令插入C程序中。下面给出一个例子:

screenshot

中断服务程序

中断服务程序通过关键字interrupt来识别,然后是程序的名字。下面给出一个例子:

screenshot
中断优先级可以在关键字interrupt后指定。例如,
screenshot
如果要在主程序和中断服务程序之间访问变量,那么建议将这些变量声明为volatile。
语句ei( )和di( )分别启用和禁用全局中断。

程序启动

Main()函数是复位后执行的第一个函数。然而,在复位之后,由编译器提供的附加代码,(也称为启动代码)首先被执行。启动代码将控制传递给main()函数,在启动代码期间,带有指定值的全局变量将加载这些值,没有指定值的全局变量被清除为零。跳转到地址0(复位)位于函数main()的结尾处,因此,如果在main()中最后一条指令之后包含返回语句,或者代码执行到达main()结束处的最后一个终止括号,则程序执行软复位。建议在程序结束时添加一个循环,以便程序在结束时不再执行软复位。

MPLAB XC8软件库函数

MPLAB XC8编译器包含大量的软件库,它们在程序开发过程中非常有用。在本节中,我们将讨论一些常用的库函数。

__delay_ms, __delay_us _delay, _delay3
函数__delay_ms和__delay_us可在程序中创建毫秒和微秒级别的延迟。在使用这些函数之前,应先使用定义_XTAL_FREQ声明时钟频率。假设时钟频率为8MHz,以下代码可以生成20ms延迟:
screenshot
函数_delay可以根据参数中指定的指令周期创建延迟。在下面的示例中,延迟为20个指令周期:
screenshot
函数_delay3可以基于3倍指令周期创建延迟。在下面的示例中,延迟为60个指令周期:
screenshot
__EEPROM_DATA
此函数将数据存储在EEPROM存储器中,这些数据必须以8字节的数据块指定。下面给出一个例子:
screenshot
ab, labs
它们分别返回整数(abs)或长整数(labs)的绝对值。头文件必须在程序开始处声明。下面给出一个例子:
screenshot
cos, sin, tan
这些函数返回三角函数的结果,参数必须以弧度来表示。头文件必须在程序的开头声明。下面给出一个例子来计算30°的正弦值,并将结果存储在变量s中:
screenshot
cosh, sinh, tanh
这些函数实现了双曲线函数cosh、sinh和tanh。头文件必须在程序的开头处声明。下面给出一个例子来计算3.2的双曲正弦函数值:
screenshot
acos, asin, atan, atan2
这些函数返回以弧度表示的三角函数的倒数。头文件必须在程序的开头声明。
itoa
此函数将数字转换为带有指定基数的字符串。头文件必须在程序的开头声明。在下面的例子中,数字25被转换为字符串并保存到具有十六进制基数的变量bufr中:
screenshot
log, log10
函数log返回浮点数的自然对数。函数log10返回以10为底的对数。头文件必须包含在程序的开头。
memcmp
此函数是用指定的字节填充n个字节的内存。头文件必须在程序的开头声明。在下面的例子中,表示了用10个字符‘x’填充bufr:
screenshot
rand
这是一个随机数生成函数,它返回一个0~32?767之间的整数,每次调用该函数时生成的数都会发生改变。头文件必须在程序的开头声明。起始点使用函数srand进行设置。下面给出一个例子:
screenshot
round
此函数将参数四舍五入为浮点格式最接近的整数值。头文件必须在程序的开头声明。下面给出一个例子:
screenshot
SLEEP
使用此函数可以将微控制器置于睡眠模式。
sqrt
此函数可以计算浮点数的平方根。头文件必须在程序的开头声明。
String Functions
提供的一些字符串函数如下所示:
screenshot
tolower, toupper, toascii
它们的作用分别是将小写字符转换为大写字符,将大写字符转换为小写字符,以及将字符转换为ASCII码。
trunc
此函数将参数四舍五入为最接近的整数。头文件必须在程序的开头处声明。

MPLAB XC8外设库

除了这些有用的函数之外,XC8编译器还提供了许多外设库,在使用外围设备开发复杂项目时它们是非常有用的。这些库可用在LCD、SD卡、USB端口、CAN总线、I2C总线、SPI总线等处。

原文标题:PIC微控制器项目设计:C语言一3.3.2 XC8语言的特性

转载地址:http://ofuix.baihongyu.com/

你可能感兴趣的文章
LeetCode--206--反转链表
查看>>
ios推送通知相关开源项目
查看>>
软件工程第三次作业(2019)
查看>>
hibernate的组成部分
查看>>
4.1 Vivado使用技巧(2):使用Vivado DocNav
查看>>
适配器模式(Adapter pattern)
查看>>
Jmeter建立JDBC链接以及扩展
查看>>
php加入多维数组中,在PHP中添加到多维数组
查看>>
recurdyn matlab版本,基于Matlab与RecurDyn的电传动履带车辆的联合仿真
查看>>
mysql 存储过程无效,mysql导入存储过程无法使用
查看>>
matlab list函数参数,Matlab 函数参数汇总
查看>>
云im php,网易云IM
查看>>
测试linux vsftpd,vsftpd配置、测试
查看>>
河南农业大学c语言平时作业答案,河南农业大学2004-2005学年第二学期《C语言程序设计》期末考试试卷(2份,有答案)...
查看>>
c语言打开alist文件,C语言 文件的打开与关闭详解及示例代码
查看>>
c语言 中的共用体和结构体如何联合定义,结构体(Struct)、联合体(Union)和位域
查看>>
iPad pro能运行c语言吗,关于iPad Pro的五大槽点 你必须知道
查看>>
wordcount源代码c语言,Word Count程序(C语言实现)
查看>>
android平板电脑浏览器,Android 平板电脑的 Firefox 浏览器入门
查看>>
an tu tu html5 test,2016年中考英语试题感叹句专项练习题
查看>>