《我和PIC单片机:基于PIC18》——2.4 我的第一个PIC程序

简介: 本节书摘来自华章计算机《我和PIC单片机:基于PIC18》一书中的第2章,第2.4节,作者 高显生,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.4 我的第一个PIC程序

在MPLAB IDE 软件中,PIC的开发是以项目为单位进行的。你选择的芯片类型、程序源代码、生成的文件都包含在项目中。因此,我们要从建立一个新项目开始,直至完成所有的开发工作。

2.4.1 建立开发项目

MPLAB IDE软件安装完成后,桌面上会出现软件的快捷方式图标。由于PICC18编译器是挂接在MPLAB IDE软件内部的,所以PICC18软件安装完成后其图标不会出现在桌面上。MPLAB IDE软件快捷方式图标如图2-31所示。

image

1)双击桌面上MPLAB IDE软件快捷方式图标,打开MPLAB IDE软件。软件运行后,会出现两个窗口:一个是工作区窗口(Untitled),另一个是输出窗口(Output),如图2-32所示。

image

2)点击菜单栏上的“Project”选项,单击“Set Language Tool Locations”选项,查看PICC18编译器与MALAB IDE软件的挂接情况,如图2-33所示。

3)在弹出的对话框中展开“HI-TECH Universal ToolSuite”菜单,再展开“Executables”菜单,单击“HI-TECH ANSI C Compiler”选项, 在下面的“Location”一栏里查看语言工具的挂接情况,如图2-34所示。

image

image

从上面的步骤里我们不难发现,PICC18编译器已经和MPLAB IDE 软件挂接在了一起,成为集成开发环境的一部分。接下来,我们要用它写一个小程序,并将其下载到最小系统板中,从而点亮一个流水灯。使用MPLAB IDE软件里的项目向导可以帮助我们快速方便地建立PIC项目,具体方法如下:

1)在菜单栏的“Project”选项里,选择项目向导“Project Wizard...”,如图2-35所示。

image

2)启动新建项目向导,在出现的对话框里点击“下一步”按钮,如图2-36所示。

image

3)在“Step One:Select a device”对话框里选择单片机的型号。这里我们选择的是“PIC18F4520”,如图2-37所示。

image

4)在“Step Two:Select a language toolsuite”对话框里选择语言工具套件。首先在“Active Toolsuite” 下拉列表中选择“HI-TECH Universal Toolsuite”,在下面的“ToolSuite Contents”窗口中会出现“HI-TECH ANSI C Compiler”,即HI-TECH标准C编译器,其下方的“Location”栏里会出现“C:Program FilesHI-TECH SoftwarePICC-189.80binpicc18.exe”路径。这说明我们前面安装的PICC18编译器已经与MPLAB IDE软件挂接成功,如图2-38所示。

image

如果我们只安装了PICC编译器,这里的路径会显示为C:Program FilesHI-TECH SoftwarePICC9.80binpicc.exe。语言工具选好后,点击“下一步”按钮。

5)在“Step Three:Create a new project,or reconfigure the active project? ”对话框里创建一个新的项目。首先在“Create New Project File ”文本框旁边点击 “Browse”按钮,如图2-39所示。

image

6)在出现的窗口中定义存放项目的文件夹和项目名称。在“保存在”下拉列表中选择项目存放的路径,在“文件名”中输入项目名称:LESSON2,并点击“保存”按钮,如图2-40所示。

image

7)项目路径和名称定义完成后,会再次回到“Step Three: Create a new project,or reconfigure the active project?”窗口,点击“下一步”按钮,如图2-41所示。

image

8)在“Step Four:Add existing files to your project”对话框中,你可以添加已存在的文件到你的项目中,这里我们不做选择,直接点击“下一步”按钮,这样我们就建好一个PIC的项目了,如图2-42所示。

image

9)点击“完成”按钮,结束项目向导,如图2-43所示。

image

建立好项目后,MPLAB IDE软件工作区如图2-44所示。这时的项目还只是一个大概的框架,我们还需要给项目添加一个C的源文件。

image

2.4.2 新建源文件并添加到项目中

1)PIC项目建立好后,依次单击“File→New”选项建立一个新文件,在源文件的头一行写上如下代码:

#include<PIC18.H> 

第一行代码写好后的状态如图2-45所示。这里要注意的是,PIC10/12/16系列的C语言程序包含的头文件是PIC.H,而PIC18系列的单片机包含的头文件则是PIC18.H。

image

2)点击工具栏上的“保存”按钮,保存这个源文件。源文件保存的路径要和我们前面建立的项目文件保存的路径一致。前面我们已经为新建的项目命名,接下来将这个源文件命名为Lesson2.c。注意源文件名称要写成文件名加扩展名的形式,扩展名一定是“.c”。另外,要在对话框中勾选“Add File To Project”选项,将源文件添加到项目中,点击“保存”按钮,源文件即可保存并自动添加到项目中,如图2-46所示。

image

这时我们会发现源文件里面的#include 会显示为蓝色,说明其已经加入到项目中,而且C语言的关键词#include已经被识别了。

3)如果需要,你还可以设定文本的字体和大小,右击我们输入的文本,在弹出的菜单中选择 “Properties”选项,如图2-47所示。

image

4)在出现的对话框中选择“Text”选项卡,点击“Select Font”按钮,如图2-48所示。

image

5)在出现的字体对话框中选择字体、字形和大小,点击“确定”保存设置,如图2-49所示。

6)完成字体设定后,源文件内的文字已经按我们的要求重新设定并显示了,如图2-50所示。

image

我们还注意到,在工作区的左侧,有窗口如图2-51所示。

image

在工作区“LESSON2.mcw”窗口中,有以下几项内容:

1)Source Files:源程序列表,列出了本项目用到的所有源程序文件。
2)Header Files:头文件列表,可以在此添加源程序中用到的头文件。
3)Object Files:目标文件列表,可以在此添加已经编译成目标代码的文件。
4)Library Files:库文件列表,可以在此添加已有的库文件。
5)Other Files:其他文件列表。

2.4.3 源代码的编写

PIC驱动流水灯的电路如图2-52所示,如果觉得连接8个发光二极管有些复杂的话,你也可以对电路进行稍许简化,像本书附录C所示最小系统板电路那样,只连接RD0和RD1端口的两个流水灯即可。

image

有了以上的准备,接下来我们就可以专心编写C程序了。程序要实现的目的就是点亮由PORTD端口最低位(RD0)驱动的一个流水灯。打开MPLAB IDE软件,使用新建项目向导,新建一个项目命名为LESSON2,并为这个项目添加名为lesson2.c的源文件,详细代码见代码清单2-1。

代码清单2-1 点亮一个流水灯

#include<PIC18.H>
__PROG_CONFIG(1,0xC100);        //PIC的配置字1
__PROG_CONFIG(2,0x0A16);        //PIC的配置字2
__PROG_CONFIG(3,0x8100);        //PIC的配置字3
__PROG_CONFIG(4,0x0081);        //PIC的配置字4
__PROG_CONFIG(5,0xC00F);        //PIC的配置字5
__PROG_CONFIG(6,0xE00F);        //PIC的配置字6
__PROG_CONFIG(7,0x400F);        //PIC的配置字7

void  main(void)            //主函数
{
    TRISD=0x00;        //0000  0000, 将PORTD端口设为输出
    TRISE=0xfe;        //1111  1110, 将PORTE最低位设为输出
    PORTD=0x01;        //0000  0001, PORTD最低位输出1,点亮最低位流水灯
    PORTE=0x01;        //0000  0001, PORTE最低位输出1,驱动流水灯公共端
    while(1);        //主循环,让程序在此等候
}

接下来,我们要对代码进行分析。程序的第1行是一条预处理命令,作用是把另外一个文件的内容包含复制到本包含指令所在的位置。在程序的第一行写入“#include”目的就是将“PIC18.H”这个头文件引入到本程序中来。

头文件的作用是对单片机的各个寄存器进行规范化的定义,从而方便大家使用。“PIC18.H”是专门针对PIC18系列单片机而设计的,位于PICC18编译器的安装目录下,其默认的位置为 C:Program FilesHI-TECH SoftwarePICC-189.80includePIC18.H关于头文件,在此先不作过多的叙述,后面会用专门的章节来进行解读。

程序的第2行至第8行是PIC18单片机的配置字。PIC单片机在应用时要对芯片的功能进行基本的设定,这种设定方式是可以通过配置字来完成的。为了不让你在刚接触到PIC时被搞得一头雾水,我们对配置字的解读也放到后面的章节来进行,你现在要做的就是按照代码清单的内容把程序行写到你的源文件中。书写配置字文本时需要注意的是,每个配置字的最前面是由两个连续的下杠“_ _”组成的,而且中间不能有空格。

“……main(?)”是主函数。我们知道,C语言是一个模块化的语言,程序的内容是由若干个具有特定功能的函数构成的。主函数和其他函数在结构上是一样的,只不过它的函数名称是“main”,意为主函数。在一个源程序中有且仅有一个主函数,而且无论主函数位于源程序的什么位置,程序都是从这里开始执行。

“void”的意思是空,在这里表示该函数的返回值为空,也就是说,函数执行后是不输出结果的。函数名“main”后面有一对圆括号“(?)”,括号里面是书写函数的输入(入口)参数的。圆括号内是空的或写着“void”,表示该函数无输入参数。

“main”函数的第2行由花括号“{?}”开始,两个花括号括起来的部分是函数体,它是函数的主体部分,由若干个C语句构成。程序的每一行都以分号“;”结束。

代码写完后,你是不是迫不及待地想看看它执行后的效果。好,接下来要做的就是编译和烧写。

2.4.4 代码的编译和烧写

我们将鼠标悬停在工具栏中唯一一个红色的按钮上,下面会有该按钮功能的提示:“Rebuild with Compiler for PIC18 MCUs(Lite Mode)V9.80”,意思是:重新用PICC18编译器编译(编译器工作在Lite Mode,版本为9.80),点击这个红色的按钮,开始编译代码,如图2-53所示。

image

经过几秒钟的时间,代码编译即可完成,Output窗口中Build选项卡里面会有单片机存储器的占用情况以及编译成功的提示,如图2-54所示。

image

如果在编译后出现以下提示信息“Build failed!”如图2-55所示,即表示编译失败,你需要重新检查程序行的内容并再次进行编译,直到通过为止。

image

接下来,我们要把编译成功的文件烧写到单片机中看一下程序运行的效果。首先将PICkit2编程器连接至电脑USB接口,用ICSP数据线连接PICkit 2编程器和最小系统板,编程器与PC及目标板的连接方法如图2-56所示。

image

依次点击菜单栏上的“Programmer→ Select Programmer→PICkit 2”,将编程器设定为PICkit 2,如图2-57所示。

image

编程器设定好后,Output窗口中的PICkit 2选项卡里会出现PICkit 2编程器准备好的提示,如图2-58所示。此时,如果编程器没有连接到电脑,则会有错误信息在这个窗口中出现。

image

PICkit 2成功连接后,你会发现在工具栏上,多了一组有趣的按钮,如图2-59所示。

image

下面分别介绍这些按钮的功能。

image

点击编程目标器件(Program the target device)按钮,即可将编译生成的HEX文件烧写到我们的最小系统板中,如图2-60所示。

image

Output窗口中的PICkit 2选项卡里会有PICkit 2编程器的擦除、烧写、重新准备好等一系列的动作提示,如图2-61所示。

image

image

我们需要人为干预MCLR引脚,将其置为高电平,使单片机解除复位状态,这可以通过将目标器件的MCLR引脚电平置高(Bring target MCLR to Vdd)按钮来完成,即图2-62中箭头所指按钮。

image

点击按钮,解除目标单片机的复位状态,这个动作在Output窗口中同样会有提示,如图2-63所示。

image

激动人心的时刻终于到了,这时我们会发现最小系统板上与RD0相连接的LED灯已经点亮了,具体状态如图2-64所示。看到你亲手点亮的这个流水灯,你是不是很有成就感呢?对,控制PIC就像控制家里的电灯一样简单,而且从你点亮这个流水灯开始,你已经入门了,继续努力,你会成为一个优秀的单片机工程师,加油!

image

2.4.5 PIC入门编程实例

接下来我们要让RD0和RD1端口驱动的流水灯交替闪烁,间隔大约1秒钟的时间。为了方便起见,我们直接对lesson2.c的源文件内容进行修改,在程序中加入了延时函数,具体代码见代码清单2-2。

代码清单2-2 交替闪烁的流水灯

#include<PIC18.H>
__PROG_CONFIG(1,0xC100);        //PIC的配置字1
__PROG_CONFIG(2,0x0A16);        //PIC的配置字2
__PROG_CONFIG(3,0x8100);        //PIC的配置字3
__PROG_CONFIG(4,0x0081);        //PIC的配置字4
__PROG_CONFIG(5,0xC00F);        //PIC的配置字5
__PROG_CONFIG(6,0xE00F);        //PIC的配置字6
__PROG_CONFIG(7,0x400F);        //PIC的配置字7

void  delay(unsigned int t);    //延时函数声明
void  main(void)            //主函数
{
    TRISD=0x00;    //0000  0000, 将PORTD端口设为输出
    TRISE=0xfe;    //1111  1110, 将PORTE最低位设为输出
    PORTE=0x01;    //0000  0001, PORTE最低位输出1,驱动流水灯公共端
    while(1)    //主循环
    {
        PORTD=0x01; //0000  0001, PORTD最低位输出1,点亮最低位流水灯
        delay(500);
         PORTD=0x02; //0000  0010, PORTD次低位输出1,点亮次低位流水灯
        delay(500);
    }
}

void  delay(unsigned int  t)    //延时函数
{
    unsigned int x,y;
    for(x=t;x>0;x--)
    {
        for(y=100;y>0;y--)
        {
        }
    }
}

程序经再次编译后烧写到单片机中,运行后即可发现两个LED灯交替闪烁。通过写上面的两个小程序,你是不是对学习PIC已经有信心了。是的,单片机并不难学,关键在于方法,现在你已经有了非常好的开始,后面的学习也会同样轻松。

相关文章
|
1月前
|
存储 算法 编译器
如何优化单片机程序里面的C代码方法
如何优化单片机程序里面的C代码方法
20 0
|
7月前
|
数据处理 C语言
侃侃单片机的裸奔程序的框架
侃侃单片机的裸奔程序的框架
81 0
|
3月前
|
缓存 编译器 程序员
嵌入式开发环境Vscode开发STM32单片机程序
嵌入式开发环境Vscode开发STM32单片机程序
55 0
|
8月前
【单片机期中测试】9.定时器实现简单的秒表程序
【单片机期中测试】9.定时器实现简单的秒表程序
123 0
|
8月前
【单片机期中测试】1.简单的流水灯程序
【单片机期中测试】1.简单的流水灯程序
62 0
|
10月前
|
消息中间件 Windows
单片机程序构架
单片机程序构架
|
11月前
PIC单片机定时器的使用(16F877)
PIC单片机定时器的使用(16F877)
|
11月前
|
芯片
【STC15单片机】初始化程序原理
【STC15单片机】初始化程序原理
187 0
|
传感器 数据采集 监控
资料转发分享【毕业设计】单片机和stm32设计选题,proteues仿真、程序完整资料
资料转发分享【毕业设计】单片机和stm32设计选题,proteues仿真、程序完整资料 基于单片机寻迹巡线避障智能小车系统设计 基于单片机体温心率脉搏检测仪系统设计 基于单片机温湿度光照自动窗帘系统设计 基于单片机环境监测温湿度PM2.5系统设计 基于51单片机的波形发生器(四种波形) 基于单片机SO2 NO2 PM温湿度空气质量检测仪 基于51单片机冰箱温度控制器设计
1197 1
资料转发分享【毕业设计】单片机和stm32设计选题,proteues仿真、程序完整资料
蓝桥杯之单片机学习(二十三)——对于官方驱动的函数调用,包装程序
蓝桥杯之单片机学习(二十三)——对于官方驱动的函数调用,包装程序
蓝桥杯之单片机学习(二十三)——对于官方驱动的函数调用,包装程序