PIC单片机C语言非常入门与视频演练
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 PIC单片机实验过程演示

下面通过DD-900mini实验板,演示一个8位LED流水灯的实验,对于从未接触过PIC单片机的初学者,只要按照下面所述内容进行学习和操作,即可很快编写出自己的第一个PIC单片机程序,并通过“PIC核心板+DD-900mini实验板”看到程序的实际运行结果,从而熟悉PIC单片机实验的全过程。

2.3.1 硬件电路

流水灯的硬件电路比较简单,如图2-16所示。可以看出,8位流水灯电路由单片机最小系统(核心电路,包括PIC16F877A、5V电源VCC、复位电路、晶振电路)、8个LED二极管D00~D07、8个限流电阻R00~R07等组成。

需要说明的是,DD-900mini实验板已集成了以上8位流水灯电路(接在DD-900mini的P0口),再配合“PIC核心板”,即可进行流水灯的实验。

图2-16 8位流水灯电路

2.3.2 编写和编译程序

下面,我们就开始启动MPLAB IDE,用C语言编写8位流水灯程序。

1.建立一个新工程

下面采用向导的方式新建一个工程。

① 运行MPLAB IDE,选择菜单“Project→Project Wizard”项,打开“Project Wizard”对话框,如图2-17所示。

图2-17 “Project Wizard”对话框

② 单击“下一步”按钮,选择项目所用器件,单击“Device”右侧的下拉列表按钮可以查看各种型号的器件名称,这里选择“PICl6F877A”芯片,如图2-18所示。

图2-18 选择项目所用器件

③ 单击“下一步”按钮,选择编译语言工具,这里既可使用Microchip公司的汇编语言,也可以使用其他第3方工具。单击“Active Toolsuit”右侧的下拉列表按钮,可以查看当前可用的工具列表,一旦选中某种工具后,在“Toolsuit Contents”列表框中会显示出该工具的细节,如编译器程序、链接器程序、库管理器程序等。如果发现细节与实际情况不符,可以单击细节中的某一行,该行内容即出现在“Location”文本框中。可以手动修改,以符合该软件的要求;也可以单击“Browse”按钮,以查找符合要求的可执行程序名。在本项目中选择HI-TECH的C编译器,细节部分不需要任何修改,如图2-19所示。

图2-19 编译语言工具选择

④ 单击“下一步”按钮,进入“创建工程名”对话框,如图2-20所示。

图2-20 “创建工程名”对话框

⑤ 单击“Browse”按钮,打开“Save Project As”对话框,要求选择工程名及保存位置,这里,将所有的工程文件建立在D:\Program Files\CD_RW\ch4\ch4_1文件夹中,起名myled,如图2-21所示。

图2-21 选择工程名及保存位置

⑥ 单击“保存”按钮,回到“创建工程名”对话框,所起工程名及路径即显示在“Create New Project File”文本框中,如图2-22所示。

图2-22 回到“创建工程名”对话框

需要说明的是,工程文件所在文件夹不能包含中文名,工程文件也不能起中文名字,否则MPLAB不能正常工作。

⑦ 单击“下一步”按钮,进入“工程文件管理”对话框,如图2-23所示。

图2-23 “工程文件管理”对话框

如果在建立该工程前已在相关文件夹中放入了一些需要加入该工程的文件,那么,可以在这里将相关文件加入工程中。方法是单击左侧列表框中需要加入该工程的文件名,再单击“Add”按钮,即可将其加入到右侧的列表框中。单击右侧列表框中的文件名,再单击“Remove”按钮可以将该文件从工程中移除。

⑧ 这里,不在此加入文件,直接单击“下一步”按钮,进入“显示摘要”对话框,如图2-24所示,这里会显示这一工程的摘要情况,包括所选择的器件、选用的语言工具及工程文件名等。如果确认没有问题,则可单击“完成”按钮建立工程,否则可以单击“上一步”按钮一步一步退回并更改相应内容。

图2-24 “显示摘要”对话框

⑨ 建立好工程后,回到MPLAB主界面,如图2-25所示。

图2-25 建立好工程的主界面

⑩ 这里是一个空白的工程,并没有包含任何文件在内。选择菜单“File→New”项,可以打开一个空白编辑窗口,并在此窗口输入流水灯程序(与本书第1章介绍的相同)。

这个源程序的功能就是让RD口的8个LED灯按流水灯的形式进行显示,每个灯显示时间约0.5s,循环往复。

⑪ 输入完成后单击“保存”按钮,给这个源程序起名myled.c并保存,如图2-26所示。

图2-26 保存源程序

起名时必须要根据编写的源程序性质确定其扩展名,这里编写的是一个C语言源程序,因此,要用(.c)为其扩展名,另外,给该文件起名时,一定不要使用中文作为文件名。

⑫ 保存完源程序后,必须将该源程序加入工程中,右击工程窗口中的“Source Files”,将出现快捷菜单,如图2-27所示。

图2-27 右击工程窗口中的“Source Files”

⑬ 选择其中的“Add Files”,即出现如图2-28所示的对话框,选择“myled.c”后,单击“打开”按钮,即可将该文件加入到工程中。

图2-28 “增加源文件”对话框

2.编译程序

以上编写的8位流水灯程序在学完C语言后,我们完全可以看懂,但是,单片机看不懂,它只认识由0和1组成的机器码。因此,这个程序还必须进行编译,将程序“翻译”成单片机可以“看懂”的机器码。

用MPLAB IDE对8位流水灯程序进行编译非常简单,只需单击工具栏中的“”按钮即可。编译完成后,会在输出窗口显示有关信息,如图2-29所示。

图2-29 输出窗口显示的有关信息

同时,打开ch4_1文件夹,会发现多出许多文件。其中,比较重要的是“myled.hex”文件(下载时所需的目标文件)。

如果源程序有语法错误,会有错误报告出现,用户应根据提示信息,更正程序中出现的错误,重新编译,直至正确为止。

2.3.3 程序的仿真

程序编译通过后,只是说明源程序没有语法错误,至于源程序中存在的其他错误,还需要通过反复的仿真调试才能发现。仿真是对目标样机进行排错、调试和检查,一般分为硬件仿真和软件仿真两种,仿真调试完成后,如果无误,就可以将程序下载到单片机中进行实际运行。

1.硬件仿真

硬件仿真是通过PICKIT2编程调试器与用户目标板进行实时在线仿真。该PIC核心板上,由于设置了RJ12接口,因此,硬件仿真十分方便。

① 仿真时,将PIC核心板RD0~RD7、VDD、GND通过10根杜邦线连接到DD-900mini实验板P00~P07、VCC、GND上,将PICkit2连接到PIC核心板的RJ12接口,同时,用5V电源适配器为PIC核心板供电,将其PICkit2插接在PC的USB口上,DD-900mini实验板不用单独供电(由PIC核心板为其供电),如图2-30所示。另外,还要将DD-900mini实验板上JP1中的VCC、LED用短接帽短接,使8只LED灯接入到电路中。

② 双击“ch4_1”文件夹中的“myled.mcp”工程文件,启动刚才建立的流水灯文件,单击菜单“Debugger→Select Tool”,选择其中的“PICkit2”,如图2-31所示。

图2-30 硬件仿真时的连接

图2-31 选择PICkit2

③ 单击菜单“Debugger→Connect”,使PC与PICkit2建立连接,连接好后,在输出窗口中会出现相应的提示信息,如图2-32所示。

图2-32 建立连接

④ 编译源程序,单击菜单“Debugger→Program”后,将程序下载到内存中,如果图下载正常,输出窗口会显示如图2-33所示的信息。

图2-33 输出窗口显示下载正常信息

⑤ 接下来,就可以调试程序了,在主窗口工具栏中,有一个用于调试的调试工具条,如图2-34所示。

图2-34 调试工具条

图2-34中,从左到右的按钮为:运行、暂停、激励、单步执行、逐过程、跳出、复位、设置/清除断点。

调试工具条可以控制程序的执行状态,所有的调试控制都可以由菜单、快捷键和调试工具栏实现。

下面介绍几个常用按钮的作用:

① 运行(Run)

调试菜单中的运行命令将启动(重启动)程序。程序将一直运行,直到被用户停止或遇到一个断点为止。只有当程序处于停止运行状态时才能执行此命令。

② 暂停(Halt)

调试菜单中的暂停命令将停止程序运行。当程序停止时,所有窗口中的信息都将被更新。只有当程序处在运行状态时才能执行此命令。

③ 单步执行(Step Into)

调试菜单中的单步执行命令将控制程序只执行一条指令。

④ 逐过程(Step Over)

调试菜单中的逐过程命令只执行一条指令。如果此条指令包含一个函数调用/子程序调用,该函数/子程序也会同时执行。如果在逐过程命令中遇到用户设置的断点,程序运行将被挂起。

⑤ 复位(Reset)

此命令可以让目标程序复位。当程序正在运行时,如果执行此命令,程序将停止运行。复位命令执行后,所有窗口中的信息都将被更新。

⑥ 设置/清除断点(Set/Clear Breakpoint)

此命令用来设置或清除断点。程序调试时,一些程序行必须满足一定的条件才能被执行到(如程序中某变量达到一定的值、按键被按下、串口接收到数据、有中断产生等),这些条件往往难以预先设定,此类问题使用单步执行的方法是很难调试的,这时就要使用到程序调试中的另一种非常重要的方法——断点设置。断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即停下,可在此时观察有关变量值,以确定问题所在。

读者可根据上面的介绍,按压不同的调试按钮,观察仿真的效果。

2.软件仿真

在MPLAB IDE软件中,还可以进行软件仿真,软件仿真不需要硬件,简单易行。不过,软件仿真毕竟只是模拟,与真实的硬件执行程序还是有区别的,其中最明显的就是时序。软件仿真是不可能和真实的硬件具有相同时序的,具体的表现是程序执行的速度和各人使用的计算机有关,计算机性能越好,运行速度越快。

下面介绍如何利用软件仿真计算延时时间,这在以后编程中具有非常重要的意义。

① 单击菜单“Debugger”→“Select Tool”,选择其中的“MPLAB SIM”,如图2-35所示。

图2-35 进入软件仿真

② 执行“Debugger→Settings”,出现“设置”对话框,先设定好要选用晶振的振荡频率,这里设置为4M(与PIC核心板上的晶振保持一致),如图2-36所示,如要跟踪运行,则将“TraceAll”打勾,并在“Buffer Size”中输入跟踪的缓冲区大小。

图2-36 “设置”对话框

③ 执行“Debugger→Stop Watch”,弹出如图2-37所示的观察窗口。单击窗口中的“Zero”,可将计时结果清零。

图2-37 观察窗口

④ 要计算“Delay_ms(500);”延时语句实际运行的时间,可以在这段程序的头、尾处设置断点,如图2-38所示。

图2-38 设置断点

⑤ 不断单击工具栏中的逐过程按钮,程序运行,当运行到第一个断点时,单击观察窗口中的“Zero”,当程序运行到第二个断点时,观察窗口中显示的就是“Delay_ms(500);”延时语句实际运行的时间,如图2-39所示,可以看出,运行时间显示的是这段时间花费503.764000ms,约0.5s。这里的时间指的是单片机实际运行的时间,而不是计算机运行的时间。

图2-39 延时语句运行的时间

2.3.4 程序的下载

PICkit2除了能作为在线仿真器使用外,它还可以当做编程器来使用。当做为编程器使用时,程序的下载方法如下:

① 双击“ch4_1”文件夹中的“myled.mcp”工程文件,启动流水灯文件,单击菜单“Programmer→Select Programmer”,选择其中的PICKIT2,如图2-40所示。

图2-40 选择PICKIT2

② 单击菜单“Programmer→Connect”,使PC与PICkit2建立连接,连接好后,在输出窗口中会出现相应的提示信息。

③ 编译源程序,单击菜单“Debugger→Program”,程序开始下载,如果下载正常,输出窗口会显示如图2-41所示的信息。

注意:这里的下载与前面硬件仿真下载是不同的,仿真下载是下载到内存中,断电后会自动消除,这里的下载是烧写到Flash芯片中,是真正的烧写芯片,即使断电,程序也会驻留在Flash芯片中。

图2-41 输出窗口显示下载正常信息

④ 断电将编程调试头从PIC核心板RJ12接口断开,再给PIC核心板上电,此时,就可以看到流水灯流动的效果了。