《PIC微控制器项目设计:C语言》一3.3.2 XC8语言的特性

简介: 本文讲的是PIC微控制器项目设计:C语言一3.3.2 XC8语言的特性,本节书摘来华章计算机《PIC微控制器项目设计:C语言》一书中的第3章,第3.3.2节, PIC Microcontroller Projects in C: Basic to Advanced, Second Edition〔塞浦路斯〕 多甘·易卜拉欣(Dogan Ibrahim) 著许辉 吕汶译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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语言的特性

相关文章
C4.
|
6月前
|
存储 算法 C语言
关于c语言用计算机语言表示算法
关于c语言用计算机语言表示算法
C4.
76 1
|
安全 C语言 数据安全/隐私保护
【C语言】2023.8.27C语言入学考试复盘总结
【C语言】2023.8.27C语言入学考试复盘总结
56 0
|
C语言
码蹄杯语言基础:选择结构(C语言)
码蹄杯语言基础:选择结构(C语言)
104 0
|
1月前
|
存储 程序员 编译器
初识C语言,计算机语言的基石
初识C语言,计算机语言的基石
|
5月前
|
算法 Java 程序员
面向对象编程(OOP)通过对象组合构建软件,C语言虽是过程式语言,但可通过结构体、函数指针模拟OOP特性
【6月更文挑战第15天】面向对象编程(OOP)通过对象组合构建软件,C语言虽是过程式语言,但可通过结构体、函数指针模拟OOP特性。封装可使用结构体封装数据和方法,如模拟矩形对象。继承则通过结构体嵌套实现静态继承。多态可通过函数指针模拟,但C不支持虚函数表,实现复杂。C语言能体现OOP思想,但不如C++、Java等语言原生支持。
64 7
|
5月前
|
C语言 C++ 编译器
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
|
5月前
|
C语言 C++
【C++语言】冲突-C语言:命名空间
【C++语言】冲突-C语言:命名空间
|
6月前
|
JavaScript 前端开发 Java
开发语言漫谈-C语言
C语言是最伟大的开发语言
|
C语言
C语言--每日五道练习题--Day16C语言--每日五道练习题--Day16
C语言--每日五道练习题--Day16C语言--每日五道练习题--Day16
|
C语言
码蹄杯语言基础:结构体(C语言)
码蹄杯语言基础:结构体(C语言)
120 0
下一篇
无影云桌面