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

发布者:HarmoniousDream最新更新时间:2023-06-15 来源: elecfans关键字:51单片机  模块化编程  指令系统 手机看文章 扫描二维码
随时随地手机看文章

本文主要是关于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”


关键字:51单片机  模块化编程  指令系统 引用地址:51单片机如何进行模块化编程

上一篇:at89s52最小系统图 单片机最小系统介绍与设计
下一篇:80C51单片机内部定时器和计数器的结构及原理解析

推荐阅读最新更新时间:2024-11-16 22:52

如何模拟实现应用在数据采集系统中的89C51单片机I/O口串行通信?
目前普遍采用的MCS51 和PIC 系列单片机通常只有一个(或没有)UART异步串行通信接口,在应用系统中若需要多个串行接口(例如在多机通信系统中,主机既要和从机通信又要和终端通信)的情况下,通常的方法是扩展一片8251 或 8250 通用同步/异步接收发送芯片(USART),需额外占用单片机I/O 资源。 MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS
[单片机]
如何模拟实现应用在数据采集系统中的89C<font color='red'>51单片机</font>I/O口串行通信?
51单片机入门之1602液晶显示
本部分主要介绍1602液晶显示,显示内容为“Hello,Welcome to my site,my friends.”。 原理图如下: 程序如下: #include #define uchar unsigned char #define uint unsigned int sbit RS=P3^0; //数据/命令选择端(H/L) sbit EN=P3^2; //使能端 sbit RW=P3^1; //读/写选择端(H/L),本文章只写,所以该端口供低电平 sbit wela=P3^3;//锁存器位选信号 uchar table1 = Hello,Welcome to my ;//字符表1 uchar table2 =
[单片机]
<font color='red'>51单片机</font>入门之1602液晶显示
51单片机】矩阵键盘线反转法实验仿真
前言 在上篇文章【51单片机】〈C语言+Keil5+Proteus仿真〉矩阵键盘逐行扫描法-20210414中,提到了矩阵键盘的线反转法,但是在仿真上出现了一些问题,导致没能做出来。当时都已经开始怀疑自己,课本上的虽然是汇编写的代码段,但是我用C来实现居然会出错,不禁让我陷入沉思……后来经过不断地控制变量反复实验,终于我发现,这是仿真软件的问题,与我无瓜。 主要体现在逐行扫描法可以完美运行,一换到线反转法就出错。所以这篇文章主要用于记录矩阵键盘线反转法的仿真实现。 一、实验环境 由于目前学校的实验课程尚未开始,即使实验课程开始我也不会用实验室的器材来记录,所以CSDN上的学习记录必将长期或绝大部分用软件仿真来实现。其实不论是仿
[单片机]
51单片机(三)——定时器/计数器
一、定时器/计数器 1.1 定时器/计数器概述 51单片机有两个内置定时器/计数器。 当记数脉冲来自于外部输入时,为计算器。而来自于系统时钟时,为定时器。 定时器0有四种模式。定时器1支持三种模式,可以被用来产生波特率。 PCON寄存器里的SMOD0位表示每12时钟或者每6时钟产生一次计数脉冲。 1.2 TCON寄存器 bit B7 B6 B5 B4 B3 B2 B1 B0 name TF1 TR1 TR0 TF0 TR0 IE1 IT1 IE0 TF0和TF1为定时器溢出位、TR0和TR1为运行控制位、其他位用于外部中断。 TR0和TR1: 分别控制定时器0和1的运行,该位置1时才允许定时器计数,清0时
[单片机]
51单片机之printf
我先在知道想要在51单片机使用printf有两种办法,一种是用库自己的printf,一种是写自己的printf,不过都很简单,我先介绍一下库的printf吧。 1、首先添加头文件#include 2、配置一下串口,但是在串口初始化的时候TI必须为1,否则无法发送。 3、也可以使用中断接收,但是不要再中断里有TI=0;这条语句,否则也发送不成功。 就这么简单,你就可以使用printf( ,x,x,x)了,嘎嘎! #include #include #define FOSC 11059200L//系统时钟频率 #define BAUD 9600 //串口波特率 void US
[单片机]
C51单片机学习笔记之矩阵键盘
简介 矩阵键盘一般为4×4或4×3的。矩阵键盘的判断方式分按行扫描和按列扫描。 简单说就是给全体一个高电平,然后给一个按键的一端附上低电平,再判断另一端是否为低电平。 原理图 代码部分 #include void delay()//延时函数 { unsigned int i; for(i=0;i 30000;i++); } unsigned char MatrixKey() { unsigned char KeyNumber;//定义一个返回值 P1=0xFF;//全体给高电平 P1_0=0;//一端给低电平 if(P1_4==0)//判断另一端是否为低电平 { delay(); while(P1
[单片机]
C<font color='red'>51单片机</font>学习笔记之矩阵键盘
单片机怎么实现模块化编程?思维+实例+系统教程
在刚开始从事研发工作的那几年,我主要做单片机软件开发的工作,虽然功能吧都能实现,但是总觉得缺了点什么。 总是感觉自己写的程序不够完美,移植性不够好,功能也不好扩展,每次写完程序最怕的就是客户要改功能。 如果程序架构写的不好,一改会影响到很多功能,哪怕原来是灯每秒闪1次,改成每秒闪3次这种看起来很简单的功能。 对于程序提升这块,如果没有人一个厉害的人带你,真的很难提升。 主要难在两个方面: 1.你的认知 有时候不是你做了越久,写的代码就越好,因为你一直在自己的认知水平内写代码。 如果不提升你的认知,代码自然也不会提升,所以想要提升代码水平,首先要提升的是你的认知。 2.找不到好的教程或实例 终有一天你要做中大型项目的时候就会
[单片机]
基于51单片机的音乐播放器的仿真与制作
0 引言 播放音乐最简单的方法就是采用专用音乐芯片,该方法的缺点是音乐芯片只能一次性烧录,播放的内容不可变。而采用单片机播放音乐则能克服这一缺点,其播放的内容以及歌曲的数量都可以随时修改。同时,使用软件Proteus在产品开发的初期对设计进行仿真无疑是一种提高效率和降低成本的好办法,但是仿真毕竟有一定的局限性,要实践起来可能会碰到一些问题。为此,本文通过Proteus软件对用AT89S52单片机播放音乐进行了仿真,指出了实际制作过程中需要注意的地方。 1 硬件电路设计 1.1 仿真软件Proteus简介 Proteus的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,它支持单片机且元件库齐全
[单片机]
基于<font color='red'>51单片机</font>的音乐播放器的仿真与制作
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved