PIC 单片机 C 语言编程简介(3)
PICC 会自动加入代码实现中断现场的保护,并在中断结束时自动恢复现场,所以编程
员无需象编写汇编程序那样加入中断现场保护和恢复的额外指令语句。但如果在中断服务程
序中需要修改某些全局变量时,是否需要保护这些变量的初值将由编程员自己决定和实施。
用 C 语言编写中断服务程序必须遵循高效的原则:
&O1540;
&O1540;
递归调用的问题,此函数必须为中断服务独家专用。既如此,不妨把原本要写在其
它函数内的代码直接写在中断服务程序中。
&O1540;
算不出现递归调用的问题,光在中断入口和出口处为了保护和恢复这些中间临时变
量就需要大量的开销,严重影响中断服务的效率。
中档系列 PIC 单片机的中断入口只有一个,因此整个程序中只能有一个中断服务函数。
11.6.5
PICC 提供了较完整的 C 标准库函数支持,其中包括数学运算函数和字符串操作函数。
在程序中使用这些现成的库函数时需要注意的是入口参数必须在 bank0 中。
如果需要用到数学函数,则应在程序前
用字符串操作函数,就需要包含“#include ”头文件。在这些头文件中提供了函数
类型的声明。通过直接查看这些头文件就可以知道 PICC 提供了哪些标准库函数。
C
printf/sprintf 是一个非常大的函数,一旦使用,你的程序代码长度就会增加很多。除非是在
编写试验性质的代码,可以考虑使用格式化打印函数以简化测试程序;一般的最终产品设计
都是自己编写最精简的代码实现特定格式的数据显示和输出。本来,在单片机应用中输出的
数据格式都相对简单而且固定,实现起来应该很容易。
对于标准 C 语言的控制台输入(scanf)/输出(printf)函数,PICC 需要用户自己编写
其底层函数 getch()和 putch()。在单片机系统中实现 scanf/printf 本来就没什么太多意义,如
果一定要实现,只要编写好特定的
出格式化的数据。
11.7
PICC 定义特殊区域值
PICC 提供了相关的预处理指令以实现在原程序中定义单片机的配置字和标记单元。
11.7.1
在原程序中定义 PIC 单片机工作配置字的重要性在前面章节中已经阐述。在用 PICC 写
程序时同样可以在 C 原程序中定义,具体方式如下:
__CONFIG (HS & UNPROTECT & PWRTEN & BORDIS & WDTEN);
上面的关键词“__CONFIG”(注意前面有两个下划线符)专门用于是芯片配置字的设
定,后面括号中的各项配置位符号在特定型号单片机的头文件中已经定义(注意不是
头文件),相互之间用逻辑“与”操作符组合在一起。这样定义的配置字信息最后将和程序
代码一起放入同一个 HEX 文件。
在这里列出了适用于
配置字定义方式类似,使用前查阅一下对应的头文件即可。
#define RC
#define HS
0x3FFF // RC 振荡
0x3FFE // HS 模式
#define XT
#define LP
0x3FFD // XT 模式
0x3FFC // LP 模式
#define WDTEN
#define WDTDIS
#define PWRTEN
0x3FFB //
0x3FF7 //
#define PWRTDIS
#define BOREN
#define BORDIS
0x3FBF //
#define UNPROTECT
#define PROTECT
例 11-6 头文件预定义的配置信息符号
11.7.2
PIC 单片机中的标记单元定义可以用下面的__IDLOC(注意前面有两个下划线符)预处
理指令实现,方法如下:
__IDLOC (1234);
其特殊之处是括号内的值全部为 16 进制数,不需要用“0x”引导。这样上面的定义就设定
了标记单元内容为 01020304。
11.8
MPLAB-IDE 中实现 PICC 的编译选项设置
在 11.3 节中已经介绍了如何实现 PICC 和 MPLAB-IDE 开发平台的挂接。一旦项目建立
成功、程序编写完成后即可以通过 MPLAB 环境下的项目管理工具实现程序的编译、连接和
调试。它们的含义分别
是:
-项目维护(Make):MPLAB 检查项目中的原程序文件,只编译那些在上次编
译后又被修改过的原程序,最
PIC单片机C语言编 相关文章:
- PIC单片机C语言编程教程(1)(11-22)
- PIC 单片机 C 语言编程简介(2)(11-22)
- PIC 单片机 C 语言编程简介(4)(11-22)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)