中远电工网

 找回密码
 立刻注册

单片机模块化编程的原则

>2019-05-15 18:13| 发布者: admin| 检查: 1951| 评论: 0

摘要: 目前咱咱咱们在学习和开拓单片机时普遍采纳 c 语言停止编程,当咱咱咱们开拓的单片机项目较小时,或许咱咱咱们所写的练习程序很小时,咱咱咱们老是习惯于将统统代码编写在同一个 c 文件下,因为程序代码量较少,通常为几十行或许上百 ...
目前咱咱咱们在学习和开拓单片机时普遍采纳 c 语言停止编程,当咱咱咱们开拓的单片机项目较小时,或许咱咱咱们所写的练习程序很小时,咱咱咱们老是习惯于将统统代码编写在同一个 c 文件下,因为程序代码量较少,通常为几十行或许上百行, 此时这种操纵是可行便利的, 也没有什么成就。但如果要开拓的项目较大,代码量上千行或许上万行甚至更大,如果你还持续将统统代码全体编写在仅有的一个 c 文件下, 这种办法的弊病会凸显进去, 它会给代码调试、更改及后期掩护都邑带来极大的不便。试想一下,当你尝试着从几千几万行代码中定位到某一名置或许去寻找某一错误点,高低拉动巨长的滚动条慢慢地、一点点地浏览全体 c 文件, 是件何等令人眼花缭乱,头昏脑胀的事。 模块化编程可解决这个成就,咱咱咱们只要根据实际必要应用模块化编程的思维将具有分歧功效的程序封装在分歧模块中,将各个分歧模块存放在分歧的 c 文件中。 模块化编程后的程序不但使全体的程序功效布局清楚明了,同时也提高程序代码的利用率,有些模块代码咱咱咱们可以或许或许间接停止移植或许经简略修改就可另作他用,好比封装好的函数。
那么什么是模块化呢?首先咱咱咱们来简略来聊聊模块概念,咱咱咱们可能听说过电源模块,通讯模块,这些是硬件模块,它咱咱们都供给一些接口,譬如电源模块会有输入额定电压电流的接口,通讯模块可能供给了RS232、 USB等接口。那么对软件来说模块是怎样的呢?软件里的模块跟硬件模块类似,形象地说就像一个黑盒子,盒子内部细节咱咱咱们可以或许或许不予理会,咱咱咱们只关怀盒子给咱咱咱们供给什么东西,即供给了什么接口,利用这些接口咱咱咱们能实现什么功效。
咱咱咱们把相对自力,具有自力功效用代码编写在一个 c 文件下,把必要对外的函数或变量停止声明供内部应用, 把不必要的细节尽量对内部屏蔽起来,这便是软件模块化编程的思维。
如许分歧的模块占用分歧 c 文件,一个个 c 文件将全体项目串接起来实现统统的功效。 


1. ?化编程的原则:
?化编程通常要遵照如录个原则: 
每个 c 文件对应一个同名的 h 头文件
一个 h 文件伴随相应 c 文件存在, 头文件是为了声明对外公开的接口。如果一个 c 文件不必要对外颁布任何接口,则其就不应当存在,除非它是程序的入口,如 main 函数地点的文件,同时 main 函数地点文件可以或许或许没有对应的头文件。 如有一个 LED.c,那应该同时制作一个 led.h 头文件。 ? 头文件中得当放置接口的声明,不得当放置实现
头文件是?的对外的接口,供内部程序调用。头文件中应放置对内部的声明,如对外供给的函数声明、宏定义、变量范例声明等。 函数的实现、变量的赋值、语句的操纵等决不能放在头文件中。因为头文件的功效是向外供给接口,譬如函数,变量,详细如何实现是在 c 文件中停止,头文件仅是停止了描述声明。 
任意一个 c 文件只要应用了其余 c 文件供给的接口, 都要同时包含其对应的头文件,每个 c 文件应该头文件自包含
任意一个 c 文件只要应用了其余 c 文件供给的接口, 都要将其对应的头文件包含到该 c文件中,没有应用到其余 c 文件的接口就不应该将其匹配的头文件包含,而且每个 c 文件都应该包含自己的头文件。 
防止头文件被重复包含
防止一个头文件被重复包含,通常应用条件编译命令#ifndef--#endif,如下示例:
示例 1:
#ifndefTIME_H#defineTIME_H……#endif
示例 2:
#ifndefLED_H#defineLED_H……#endif
此中#define FILENAME_H 为基本格式, FILENAME_H 为头文件名称,但要全体应么笮辞槭,应用单下划线后紧跟一个 H 表明是头文件。 不要在宏名最前面加上“ _“或“ __” ,即应用 FILENAME_H 代替_FILENAME_H_, 因为一样平常以”_“和” __”开头的标识符为体当A艋许模范库应用。
2. ?化编程实例
咱咱咱们应用 AT89C52 单片机,在编程软件 keil 环境下履行一个工程,此明?化编程详细操纵的办法和步骤。例子要实现的功效:和 P1 相连的 8 个 LED 灯每 500ms 亮灭交替烁,颠末过程串口将数字>2019-05-15 发送给单片机并显示在一个数码管上。 LED 烁的光阴应用定时器 0 中断办法来节制, T0 每 50ms 溢动身生中断,定义一个计数器,每次 T0 中断就计数一次,累计计数 10 次,那么时长为 500ms,作为 LED 烁光阴间隔。 单片机的时钟为11.0592MHz。那么应用?化编程的办法, 全体项目将会有如下表中的文件。
表 1 工程文件清单
C 文件H 头文件描述main.c无Main 文件可以或许或许没有对应的头文件TImer0.cTImer0.h定时器 0 定时 50ms 中断led.cled.hLed 烁实现uart.cuart.h串口通讯设置设备摆设实现digitron.cdigitron.h数码管显示
2.1创建工程步骤
2.1.1新建工程文件目录
新建工程文件目录(如 test),在工程目录下创建 Project、 Source、 Output、 LisTIng 和Readme 这 5 个文件夹,并在文件夹 Readme 下创建 Readme.txt 文件。 如许做的偏向是为
了增强工程文件的可读性及布局化,便于掩护和办理。
? Project 存放工程文件
? Source 存放用户编写的 c 文件及 h 头文件
? Output 存放各种输入文件,如 hex 文件
? Listing 存放编译过程中发生的各种中央文件
? Readme 存放工程项偏向说明文件
2.1.2创建keil工程
( 1) 启动软件 Keil μVision, 点击对象老喔赡 Project,抉择 NewμVision Project,新建 test工程到目录 Project 下。
( 2) 抉择偏向器件,点击“ OK”确认。
( 3) 出现是否添加启动文件到工程中对话框,抉择否。
( 4) 偏向选项设置, 点击 target option 对象进被选项设置设备摆设界面。
( 5) 选中 Target 项,根据实际环境设置晶振频率。本例子频率为 11.0592MHz。
( 6) 选中 output 选项,点击“ Select Folder for Objects…”抉择工程目录下的 Output 文件夹, 将“ Create HEX File”勾选中。
( 7) 选中 Listing 选项,点击“ Select Folder for Listings…”抉择工程目录下的 Listing 文件夹。
( 8) 末了点击“ OK”保留各选项的设置,至此实现 Target Option 的设置设备摆设。
( 9)新建 5 个文件,以 c 为后缀名保留到工程目录的 Source 文件下,并分离定名为 main.c、led.c、 uart.c、 timer0.c 和 digitron.c。击“ Source Group1”抉择“ Add Existing Flies to Group‘Source Group1’”,将以上新建的 5 个文件添加到工程中。
(10) 至此,就实现全体 keil 工程的创建。

看过《单片机模块化编程的原则》的人还看了如下文章:

最新评论

热门文章

|中远电工网 ( )

GMT+8,>2019-05-15 15:28

Powered by © 2011-2019 www.wjzydg.com 版权统统 免责声明 不良信息举报

技术驱动未来! 中远电工网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

返回顶部
友情链接:三戟企业品牌设计网  鼎昱建材网  中加信息资讯网  五厘米文化资讯网  砂浆生产线网  大河报旅游网  北京儿童医院网  宏发学校教育网  缪斯文胸网  开磷百花人才网