本文共 2508 字,大约阅读时间需要 8 分钟。
本文讲的是PIC微控制器项目设计:C语言一3.3.2 XC8语言的特性,在本节中,我们将介绍XC8 C语言的一些特性。不熟悉C语言的读者在继续阅读本章之前应阅读第4章。这里将在适当的时候将给出mikroC Pro for PIC和XC8之间的差异。
有关XC8语言的详细信息可以参阅MPLAB XC8编译器用户指南,该指南可从Microchip公司网站上获取。当创建一个新的XC8程序时,编译器生成图3.22所示的模板。在程序中,我们将修改此模板,并使用图3.23所示的模板来代替它。
XC8程序具有以下结构:必须在程序开始处声明单个头文件,以声明所有编译器和器件特定类型及SFR。XC8支持表3.1中的变量类型。请注意,字符型变量本身与无符号字符型变量相同。
此外,XC8编译器支持24位或32位浮点变量,可以使用关键字double和float进行声明。常量对象是只读的,它们存储在微控制器的程序存储器中。在程序中不改变值的对象应存储为常量,以节省有限的随机存取存储器空间。
常量声明的示例如下所示:在最后一个例子中,从程序存储单元0x100处开始存储常量表。持久性限定符可指示变量不能被运行时启动代码所清除。下面给出一个例子:
可以通过指定端口名称,后跟字位,然后是句点和端口引脚名称来访问单个I/O引脚。下面给出一个例子:
可以使用以下的宏定义设置或复位变量的各个位:
下面的代码设置了变量Count的第2位:pragma config指令用于为微控制器编程配置位。下面给出一个例子:
使用asm语句可以将汇编语言指令插入C程序中。下面给出一个例子:
中断服务程序通过关键字interrupt来识别,然后是程序的名字。下面给出一个例子:
中断优先级可以在关键字interrupt后指定。例如,如果要在主程序和中断服务程序之间访问变量,那么建议将这些变量声明为volatile。语句ei( )和di( )分别启用和禁用全局中断。Main()函数是复位后执行的第一个函数。然而,在复位之后,由编译器提供的附加代码,(也称为启动代码)首先被执行。启动代码将控制传递给main()函数,在启动代码期间,带有指定值的全局变量将加载这些值,没有指定值的全局变量被清除为零。跳转到地址0(复位)位于函数main()的结尾处,因此,如果在main()中最后一条指令之后包含返回语句,或者代码执行到达main()结束处的最后一个终止括号,则程序执行软复位。建议在程序结束时添加一个循环,以便程序在结束时不再执行软复位。
MPLAB XC8编译器包含大量的软件库,它们在程序开发过程中非常有用。在本节中,我们将讨论一些常用的库函数。
__delay_ms, __delay_us _delay, _delay3函数__delay_ms和__delay_us可在程序中创建毫秒和微秒级别的延迟。在使用这些函数之前,应先使用定义_XTAL_FREQ声明时钟频率。假设时钟频率为8MHz,以下代码可以生成20ms延迟:函数_delay可以根据参数中指定的指令周期创建延迟。在下面的示例中,延迟为20个指令周期:函数_delay3可以基于3倍指令周期创建延迟。在下面的示例中,延迟为60个指令周期:__EEPROM_DATA此函数将数据存储在EEPROM存储器中,这些数据必须以8字节的数据块指定。下面给出一个例子:ab, labs它们分别返回整数(abs)或长整数(labs)的绝对值。头文件必须在程序开始处声明。下面给出一个例子:cos, sin, tan这些函数返回三角函数的结果,参数必须以弧度来表示。头文件必须在程序的开头声明。下面给出一个例子来计算30°的正弦值,并将结果存储在变量s中:cosh, sinh, tanh这些函数实现了双曲线函数cosh、sinh和tanh。头文件必须在程序的开头处声明。下面给出一个例子来计算3.2的双曲正弦函数值:acos, asin, atan, atan2这些函数返回以弧度表示的三角函数的倒数。头文件必须在程序的开头声明。itoa此函数将数字转换为带有指定基数的字符串。头文件必须在程序的开头声明。在下面的例子中,数字25被转换为字符串并保存到具有十六进制基数的变量bufr中:log, log10函数log返回浮点数的自然对数。函数log10返回以10为底的对数。头文件必须包含在程序的开头。memcmp此函数是用指定的字节填充n个字节的内存。头文件必须在程序的开头声明。在下面的例子中,表示了用10个字符‘x’填充bufr:rand这是一个随机数生成函数,它返回一个0~32?767之间的整数,每次调用该函数时生成的数都会发生改变。头文件必须在程序的开头声明。起始点使用函数srand进行设置。下面给出一个例子:round此函数将参数四舍五入为浮点格式最接近的整数值。头文件必须在程序的开头声明。下面给出一个例子:SLEEP使用此函数可以将微控制器置于睡眠模式。sqrt此函数可以计算浮点数的平方根。头文件必须在程序的开头声明。String Functions提供的一些字符串函数如下所示:tolower, toupper, toascii它们的作用分别是将小写字符转换为大写字符,将大写字符转换为小写字符,以及将字符转换为ASCII码。trunc此函数将参数四舍五入为最接近的整数。头文件必须在程序的开头处声明。除了这些有用的函数之外,XC8编译器还提供了许多外设库,在使用外围设备开发复杂项目时它们是非常有用的。这些库可用在LCD、SD卡、USB端口、CAN总线、I2C总线、SPI总线等处。
原文标题:PIC微控制器项目设计:C语言一3.3.2 XC8语言的特性
转载地址:http://ofuix.baihongyu.com/