微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC单片机C语言编程教程(1)

PIC单片机C语言编程教程(1)

时间:11-22 来源:互联网 点击:

行文件组“Executable”后,

列出了将被 MPLAB-IDE 后台调用的编译器所用到的所有可执行文件,其中有汇编编译器

“PICC Assembler”、C 原程序编译器“PICC Compiler”和连接定位程序“PICC Linker”。同

时在此列表中还显示了对应的可执行程序名,请注意在这里都是“PICC.EXE”。用鼠标分别

点击选中这三项可执行文件,观察对话框下面“Location”一栏中显示的文件路径,用

“Browse…”按纽,从计算机中已经安装的 PICC 编译器文件夹中选择 PICC.EXE 文件。实

际上 PICC.EXE 只是一个调度管理程序,它会按照所输入的文件扩展名自动调用对应的编译

器和连接器,用户要注意的是 C 语言原程序扩展名用“.c”,汇编原程序用“.as”即可。

工具挂接完成后,在建立项目时可以选择语言工具为“HI-TECH PICC”,具体步骤可以

参阅第三章 3.1.3 节,此处不再重复。项目建立完成后可以加入 C 或汇编原程序,也可以加

入已有的库文件或已经编译的目标文件。最常见的是只加入 C 原程序。用 C 语言编程的好

处是可以实现模块化编程。程序编写者应尽量把相互独立的控制任务用多个独立的 C 原程序文件实

现,如果程序量较大,一般不要把所有的代码写在一个文件内。

图 11-2 列出的是笔者建立的一个项目中所有 C 原程序模块,其中主控、数值计算、I2C 总线

作、命令按键处理和液晶显示驱动等不同的功能分别在不同的独立的原程序模块中实现。

%C3%82%C2%B3%C3%83%C2%8C%C3%82%C2%BD%C3%83%C2%8C%C3%82%C2%B3%C3%83%C2%8C.files/8.jpg" src="file:///F:/data/%C3%83%C2%8F%C3%83%C2%82%C3%83%C2%94%C3%83%C2%98/PIC%C3%82%C2%B5%C3%82%C2%A5%C3%83%C2%86%C3%82%C2%AC%C3%82%C2%BB%C3%83%C2%BAC%C3%83%C2%93%C3%83%C2%AF%C3%83%C2%91%C3%83%C2%94%C3%82%C2%B1%C3%83%C2%A0%3Cwbr%3E%C3%82%C2%B3%C3%83%C2%8C%C3%82%C2%BD%C3%83%C2%8C%C3%82%C2%B3%C3%83%C2%8C.files/8.jpg" />

图 11-2 C 语言多模块编程

11.4 PIC 单片机的 C 语言原程序基本框架

基于 PICC 编译环境编写 PIC 单片机程序的基本方式和标准 C 程序类似,程序一般由以

下几个主要部分组成:

&O1540; 在程序的最前面用#include 预处理指令引用包含头文件,其中必须包含一个编译器

提供的“pic.h”文件,实现单片机内特殊寄存器和其它特殊符号的声明;

&O1540; 用“__CONFIG”预处理指令定义芯片的配置位;

&O1540; 声明本模块内被调用的所有函数的类型,PICC 将对所调用的函数进行严格的类型

匹配检查;

&O1540; 定义全局变量或符号替换;

&O1540; 实现函数(子程序),特别注意 main 函数必须是一个没有返回的死循环。

下面的例 11-1 为一个 C 原程序的范例,供大家参考。

#include //包含单片机内部资源预定义

#include “pc68.h” //包含自定义头文件

//定义芯片工作时的配置位

__CONFIG (HS & PROTECT & PWRTEN & BOREN & WDTDIS);

//声明本模块中所调用的函数类型

void SetSFR(void);

void Clock(void);

void KeyScan(void);

void Measure(void);

void LCD_Test(void);

void LCD_Disp(unsigned char);

//定义变量

unsigned char second, minute, hour;

bit flag1,flag2;

//函数和子程序

void main(void)

{

SetSFR();

PORTC = 0x00;

TMR1H += TMR1H_CONST;

LED1 = LED_OFF;

LCD_Test();

//程序工作主循环

while(1) {

asm(“clrwdt”);

Clock();

KeyScan();

Measure();

SetSFR();

}

}

//清看门狗

//更新时钟

//扫描键盘

//数据测量

//刷新特殊功能寄存器

11.5

PICC 中的变量定义


例 11-1 C 语言原程序框架举例

11.5.1 PICC 中的基本变量类型


PICC 遵循 Little-endian 标准,多字节变量的低字节放在存储空间的低地址,高字节放

在高地址。

11.5.2 PICC 中的高级变量

基于表 11-1 的基本变量,除了 bit 型位变量外,PICC 完全支持数组、结构和联合等复

合型高级变量,这和标准的 C 语言所支持的高级变量类型没有什么区别。例如:

数组:unsigned int data[10];

结构:struct commInData {

unsigned char inBuff[8];

unsigned char getPtr, putPtr;

};

联合:union int_Byte {

unsigned char c[2];

unsigned int i;

};

例 11-2 C 语言高级变量举例

11.5.3 PICC 对数据寄存器 bank 的管理

为了使编译器产生最高效的机器码,PICC 把单片机中数据寄存器的 bank 问题交由编程

员自己管理,因此在定义用户变量时你必须自己决定这些变量具体

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top