51单片机如何进行模块化编程

发布时间:2023-06-15  

本文主要是关于51单片机的相关介绍,并着重对51单片机的原理及其模块化编程进行了详尽的阐述。


51单片机

51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。


功能

·8位CPU·4kbytes程序存储器(ROM) (52为8K)

·128bytes的数据存储器(RAM) (52有256bytes的RAM)

·32条I/O口线·111条指令,大部分为单字节指令

·21个专用寄存器

·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)

·一个全双工串行通信口

·外部数据存储器寻址空间为64kB

·外部程序存储器寻址空间为64kB

·逻辑操作位寻址功能·双列直插40PinDIP封装

·单一+5V电源供电

CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;

RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;

ROM:用以存放程序、一些原始数据和表格;

I/O口:四个8位并行I/O口,既可用作输入,也可用作输出

T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;

五个中断源的中断控制系统;

一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;

片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。

功能

·8位CPU·4kbytes程序存储器(ROM) (52为8K)

·128bytes的数据存储器(RAM) (52有256bytes的RAM)

·32条I/O口线·111条指令,大部分为单字节指令

·21个专用寄存器

·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)

·一个全双工串行通信口区别

同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS,和WINBOND等,我们常说的已经停产的89C51指的是ATMEL公司的 AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取代了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。

不过在市场化方面,89C51受到了PIC单片机阵营的挑战,89C51最致命的缺陷在于不支持ISP(在线更新程序)功能,必须加上ISP功能等新功能才能更好延续MCS-51的传奇。89S51就是在这样的背景下取代89C51的,89S51已经成为了实际应用市场上新的宠儿,作为市场占有率第一的Atmel公司已经停产AT89C51,将用AT89S51代替。89S51在工艺上进行了改进,89S51采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。89SXX可以向下兼容89CXX等51系列芯片。同时,Atmel不再接受89CXX的定单,大家在市场上见到的89C51实际都是Atmel前期生产的巨量库存而以。如果市场需要,Atmel当然也可以再恢复生产AT89C51。

89S51相对于89C51增加的新功能包括:

-- 新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低!

-- ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。

-- 最高工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。

-- 具有双工UART串行通道。

-- 内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。

-- 双数据指示器

-- 电源关闭标识。

-- 全新的加密算法,这使得对于89S51的盗版变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。

-- 兼容性方面:向下完全兼容51全部字系列产品。比如8051、89C51等等早期MCS-51兼容产品。也就是说所有教科书、网络教程上的程序(不论教科书上采用的单片机是8051还是89C51还是MCS-51等等),在89S51上一样可以照常运行,这就是所谓的向下兼容。

比较结果:就如同INTEL的P3向P4升级一样,虽然都可以跑Windows98,不过速度是不同的。从AT89C51升级到AT89S51 ,也是同理。和S51比起来,C51就要逊色一些,实际应用市场方面技术的进步是永远向前的。

·外部数据存储器寻址空间为64kB

·外部程序存储器寻址空间为64kB

·逻辑操作位寻址功能·双列直插40PinDIP封装

·单一+5V电源供电

CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;

RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;

ROM:用以存放程序、一些原始数据和表格;

I/O口:四个8位并行I/O口,既可用作输入,也可用作输出

T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;

五个中断源的中断控制系统;

一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;

片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。

51单片机如何进行模块化编程

分模块的好处

首先,这是我在写万年历和温度传感器的时候,显然这是我经过收缩函数之后的程序

51单片机如何进行模块化编程

由上图可以看出,当我收缩函数的时候,代码已经到达了451行,而当我打开之后,函数就达到了上千行,你们想想,当你看着这一千多行的代码时,你能够方便的从中找出仅仅是一行的错误吗?这显然是不可能的。既然对于自己这个打代码的人都很难看得懂,更别说别人了!

而让我们来看看下面这个同样的程序

51单片机如何进行模块化编程

51单片机如何进行模块化编程

怎么样,是不是看得容易了许多。对于学过51单片机的人来说,他能知道:

第一个模块是主函数模块,第二个模块是液晶显示和数码管显示模块,第三个是时间延时模块,第四个是温度传感器模块。

而对于没学过的人来说呢,看我的模块名称他也能知道第一个是主函数模块,第二个是和显示有关的模块,而第三个是和时间有关的模块,最后一个虽然他不知道,但他可以百度对吧,就可以知道这是和温度传感器有关的模块。

这样一看,整个程序就非常的清晰,每个人都能看懂你的程序在哪定义了些什么。而这对于每个人日后的工作来说是至关重要的。想要让别人能看懂你的代码,就要好好的规划自己程序的模块怎么划分,才能让别人看的简单。对于所有想要从事有关于计算机的职业的人,只要你不是那种万中无一IT大佬,你都不可能独自完成整个软件的程序设计,公司里都会把整个程序分成许多的模块,让每个人完成各自的模块,最后再由专门的人员整合起来。对于现在的我们来说,养成写程序分模块的习惯尤为重要。

接下来讲讲干货

首先你得有主函数的模块,(这个最后整合了之后再讲)然后是其他的模块。

先来讲讲分模块。开始你要建立一个工程,对于单片机来说,只要在工程文件下建立就

51单片机如何进行模块化编程

在自己的工程文件下建立 .c 的文件就可以(名字用小写)。

(对于c语言来说主模块和其它模块是不建到一起的,这个本人用的是VS2017而且学的时间不长,所以就是在这随口提一下。)

(以delay模块为例)

创建好了 .c 文件后,我们把.c文件添加进工程中,之后还需要在创建一个 .h 的文件(假如你的.c文件是delay.c那么你的.h文件必须为delay.h的文件,且这个文件要与.c的文件放在同一个文件夹中)类似以下这样


接下来就先讲讲.c的文件

51单片机如何进行模块化编程

首先要写的就是 #include“delay.h” 记住这个函数必须要有,它所添加的就是我们刚刚建立的那个.h的文件,通过这个函数我们把它们关联起来(其他的学过c语言的应该都知道,添加需要的库,恒定义,创建一些需要使用的函数)

接下来就是重点的.h文件

51单片机如何进行模块化编程

基本的写法就是

#ifndef __(你所定义的.h文件的大写)_H__

#define __(你所定义的.h文件的大写)_H__

这里的东西是你之前在.c文件中定义过的函数(记住不要全部复制,只需复制开头的函数)

#endif

51单片机如何进行模块化编程

大体上就是这样的,只需要复制开头的函数,不过切记,函数后面的分号千万千万千万别忘了

好了这就是一个时间的模块了,其它的模块也一样,接下来就到最重要的一步---整合

51单片机如何进行模块化编程

在main函数也就是主函数当中,当我们需要使用我们之前定义的函数的时候,我们就需要在开头把函数所在的文件添加进去,正如我所写的

#include“display.h” #include“delay.h” #include“de18b20.h”

其余的就是与你的主函数写的程序相关的东西

其它模块的互相关联

其它的模块也可以像主模块那样关联起来的

51单片机如何进行模块化编程

就拿我上面这个ds18b20的.c文件来讲,在它的函数里是需要用到延时的函数的,而延时函数是定义在delay模块里的,因此我们需要添加delay的模块才能使用我们定义延时函数,所以就有了 #include “delay.h”


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>