理论教育 PIC单片机C语言程序实例

PIC单片机C语言程序实例

时间:2023-10-19 理论教育 版权反馈
【摘要】:为了便于读者能够边学边练,本节先通过一个简单的例子详细介绍C语言程序的编写和运行过程。新建一个最简单的单片机C语言项目,并通过Proteus仿真查看其运行效果。设计过程1)打开MPLAB新建一个C语言项目,并保存在“C:\S041”文件夹下。图4-5 Proteus VSM MPLABViewer窗口图4-6 S041项目电路图代码分析下面研究这个最简单的单片机C语言源程序。此外,C语言中有一个重要的概念称为函数。一种最极端的情况是,一个“;”符号就被C语言当做一条语句。

PIC单片机C语言程序实例

为了便于读者能够边学边练,本节先通过一个简单的例子详细介绍C语言程序的编写和运行过程。

【例4-1】新建一个最简单的单片机C语言项目,并通过Proteus仿真查看其运行效果。所用硬件电路如图4-1所示。

978-7-111-33274-9-Chapter04-1.jpg

图4-1 单片机控制8个LED电路图

电路图在光盘中位置:“\Example\Chapter4\S041\sch\led8h.DSN”。

设计过程

1)打开MPLAB新建一个C语言项目,并保存在“C:\S041”文件夹下。

2)在MPLAB主菜单上依次选择“File”→“New”,会新建一个空白文件,请输入以下程序代码(均为半角英文字母和半角英文标点符号)。

978-7-111-33274-9-Chapter04-2.jpg

3)输入完毕后,选择主菜单“File”→“SaveAs”,把它保存在“C:\S041”文件夹,并起名为“main.c”,如图4-2所示。

978-7-111-33274-9-Chapter04-3.jpg

图4-2 保存新建的C源程序并加入当前项目对话框

4)把图4-2中最下方的“Add File To Project”打勾,单击978-7-111-33274-9-Chapter04-4.jpg按钮。这样一个最简单的C源程序就建立完成了。

5)源程序是不能够在单片机上执行的,要想执行就必须将其编译为目标文件。在当前状态下,单击MPLAB主菜单的“Project”→“Build”(快捷键F10),即可对当前项目中的源程序进行编译,编译过程的输出内容会在一个叫做“Output”的窗口中显示出来。如果编译成功的话,会在“Output”窗口的最底部出现蓝色的存储器占用列表,如图4-3所示。

978-7-111-33274-9-Chapter04-5.jpg

图4-3 项目编译成功的界面

如果编译没有成功的话,请仔细核对输入的内容与本书的内容是否一致,还是找不到问题的话,请删除当前源程序文件中的所有内容,打开光盘中“\Example\Chapter4\S041\main.c”文件,将其中的文本内容全部复制到C源程序中再编译一次。

6)编译的结果是得到了目标文件“C:\S041\S041.cof”。为了能看到在硬件上的执行效果,这里使用调试工具Proteus VSM来模拟硬件电路,查看程序在硬件电路中的运行效果。在MPLAB中,选择“Debuger”→“Select Tool”→“Proteus VSM”,如图4-4所示。

978-7-111-33274-9-Chapter04-6.jpg

图4-4 选择Proteus VSM调试工具窗口

7)选择完毕后会出现Proteus VSM窗口,如图4-5所示。若没有,请依次单击MPLAB主菜单“View”→“Proteus VSM MPLABViewer”即可出现。(www.daowen.com)

8)在图4-5中,单击文件打开图标978-7-111-33274-9-Chapter04-7.jpg(将来打开其他的电路图也是用此图标),选择光盘中的“\Example\Chapter4\S041\sch\led8h.dsn”文件并打开,其电路图如图4-1所示。在本章中,此电路图会频繁用到,请记住此图的打开方法。此电路图为一个简单的用单片机控制8个LED的原理图。PORTD口的RD0~RD7分别通过一个限流电阻连接到每个LED的阳极,8个LED的阴极共同接地。当阳极出现高电平时会使LED导通发光,否则LED不亮。

9)在MPLAB的主工具栏上找到Proteus VSM工具栏978-7-111-33274-9-Chapter04-8.jpg,单击左侧的绿圆点进入调试状态(要停止调试,请在进入调试状态后单击其右侧的红色圆点),然后按快捷键F9来运行程序。程序运行后查看8只LED的状态,如果一切正常的话,应该是VT0~VT3亮,VT4~VT7灭,电路如图4-6所示。

978-7-111-33274-9-Chapter04-9.jpg

图4-5 Proteus VSM MPLABViewer窗口

978-7-111-33274-9-Chapter04-10.jpg

图4-6 S041项目电路图

代码分析

下面研究这个最简单的单片机C语言源程序。为了直观了解每一行的作用和叙述方便,以下程序在每行语句前加入行号(实际程序中无行号和冒号),并在每行语句后加入注释便于理解。

978-7-111-33274-9-Chapter04-11.jpg

978-7-111-33274-9-Chapter04-12.jpg

这里的TRISD和PORTD都代表相应的硬件寄存器。读者可以简单理解为在PICC中特殊寄存器名可以直接使用。具体用法请参考后文专门章节介绍。

“//”和“/**/”在C语言中被编译器当做注释符号。“//”用来表示从此到本行结尾的内容都是注释;“/*”和“*/”表示两者之间的内容(可以是多行)都是注释。编译器碰到注释后会直接忽略注释中的内容,就当其不存在一样。

在代码中,写注释唯一的目的就是为了提高程序的可读性。这样便于理解程序,有利于将来程序的改进。强烈建议养成良好的写注释的习惯。尤其是在书写工程或产品中的源程序时必须加入注释。

从第4行和第5行的分析可知,在C语言中用“=”可以把等号右侧的内容赋值给等号左侧的内容,说准确些,在C语言中,“=”称为赋值号。

在C语言中,一段程序的开始用“{”表示,结束用“}”表示,用二者包围起来的部分会被C语言编译器看成一个整体。此外,C语言中有一个重要的概念称为函数。C语言在结构上是由多个函数构成的,并且要求每个C语言项目中必须有且只有一个名字叫“main”的函数。函数之间可以互相调用来完成复杂的功能,具体有关函数的使用在本章后继内容中会详细介绍。

在C语言中,“;”符号代表一条语句的结尾,例如,上例中第4行和第5行都是以“;”结尾的,所以第4行和第5行都是单独的一条语句。一种最极端的情况是,一个“;”符号就被C语言当做一条语句。当然除“;”之外,在流程控制语句中还可以用“{”、“}”符号配套使用表示语句结束。

牢记:在C语言中有两种情况代表一条语句。

1)以“;”结尾的表达式是一条语句。

2)用“{”和“}”框起来的多条语句也是一条语句(这样的语句称为复合语句)。

本章后继的大多数例子都以此为基础,希望读者熟练掌握此例题的设计和运行过程。对于很多例子,读者只需按要求修改main.c文件内容即可做相关实验。图4-1也不用关闭,后几节的例子还需要这个电路图来做实验观察程序功能。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈