零基础学习51单片机
Posted _默_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了零基础学习51单片机相关的知识,希望对你有一定的参考价值。
零基础学习51单片机
前言
51单片机是一款非常经典的8位单片机,广泛应用于各种嵌入式系统和电子产品中。本文将从零开始,以简明易懂的方式介绍51单片机的基本原理、基本语法和应用。
什么是单片机
单片机是一种集成电路芯片,具有集成处理器、存储器、输入输出端口和外设接口等功能,可编程控制各种系统和设备。它与计算机相似,但是比计算机更小、更简单,更经济。
什么是51单片机
51单片机是一种经典的8位单片机,它由Intel公司研制,从1981年开始推广,至今已有四十年的历史,因为它的简单易学、易扩展、成本低廉等优点,被广泛应用于各种嵌入式系统和电子产品中。
51单片机的基本构成
51单片机的基本构成如下图所示:
其中,CPU
是中央处理器,负责执行指令和控制系统;RAM
是随机存储器,用于存储临时数据;ROM
是只读存储器,用于存储程序和常量数据;I/O
是输入输出端口,用于与外部设备交互;Timer
是计时器,用于产生定时信号;Serial
是串行口,用于与其他设备通信。
51单片机的基本特点
-
8位数据宽度,支持8位整数运算,适用于各种控制任务。
-
结构简单,易于学习和理解,可以快速开发出各种应用。
-
宽电压工作范围,能够适应各种电源环境和应用场景。
-
内置各种外设和接口,可以直接控制各种设备和信号。
-
支持多种编程方式,易于开发和测试。
51单片机的编程语言
51单片机支持多种编程语言,如汇编语言、C语言、BASIC语言等。其中,汇编语言是最基础也是最常用的编程语言,因此本文主要介绍汇编语言的相关知识。
汇编语言的基本原理
汇编语言(Assembly Language)是一种相对较低层次的编程语言,它直接使用机器指令进行编程,具有高效、灵活的特点。汇编语言的基本原理如下:
-
汇编语言是对机器指令的直接描述,每个指令对应一个特定的操作码。
-
汇编语言的程序需要进行编译,生成对应的机器指令,才能在单片机上运行。
-
汇编语言的程序通常具有较高的效率和灵活性,但是也需要较高的技能水平和编程难度。
汇编语言的基本语法
汇编语言的语法相对简单,它主要由三部分组成:指令、数据和注释。指令是汇编语言的核心部分,它包含操作码和操作数。
操作码(operation code,简称opcode)是指令的操作类型,它通常由若干个二进制代码组成,例如MOV表示将数据从一个地方移动到另一个地方。操作数(operand)是指令的操作对象,包含寄存器、内存、立即数等。例如MOV A,R0表示将寄存器R0中的数据移动到寄存器A中。
数据(data)是指程序中使用的变量、常量和数组等。数据可以直接定义在程序中,也可以从外部读入。例如:
BYTE1 DB 0
BYTE2 DB 1,2,3,4,5
其中,DB
表示定义字节类型数据,0
和1,2,3,4,5
分别是数据的初值。
注释(comment)是指程序中的备注,用于说明程序的功能和设计思路。注释通常以;
开头,可以单独占据一行,也可以紧跟在指令或数据后面。
例如:
MOV A,#0 ; 将立即数0移动到寄存器A中
51单片机的基本指令
51单片机支持多种指令集,包括基本指令集、扩展指令集、专用指令集等。其中,基本指令集是最为广泛使用的指令集。本章主要介绍基本指令集。
基本指令集可以分为以下几类:
数据传送指令
数据传送指令用于将数据从一个地方传送到另一个地方,包括寄存器之间、内存之间、立即数之间等。常用的数据传送指令有:
-
MOV:将数据从一个地方移动到另一个地方,例如
MOV A,R0
表示将寄存器R0中的数据移动到寄存器A中。 -
MOVX:将数据从外部存储器中读取到寄存器中,例如
MOVX A,@DPTR
表示将外部存储器中的数据读取到寄存器A中。 -
MOVC:将程序存储器中的数据读取到寄存器中,例如
MOVC A,@A+DPTR
表示将程序存储器中由A+DPTR指定的地址处的数据读取到寄存器A中。
算术指令
算术指令用于进行算术运算,包括加、减、乘、除、比较等。常用的算术指令有:
-
ADD:将两个寄存器中的数据相加,例如
ADD A,R0
表示将寄存器A和寄存器R0中的数据相加并更新寄存器A中的值。 -
SUBB:将一个寄存器中的数据减去另一个寄存器中的数据并将结果存储在第一个寄存器中,例如
SUBB A,R1
表示将寄存器A中的数据减去寄存器R1中的数据,并将结果存储在寄存器A中。 -
MUL:将一个寄存器中的数据乘以另一个寄存器中的数据,并将16位的结果存储在两个寄存器中,例如
MUL AB
表示将寄存器A和寄存器B中的数据相乘,并将16位的结果存储在寄存器B和寄存器A中。
逻辑指令
逻辑指令用于进行逻辑运算,包括与、或、异或、取反、移位等。常用的逻辑指令有:
-
ANL:将两个寄存器中的数据进行逻辑与运算,例如
ANL A,R0
表示将寄存器A和寄存器R0中的数据进行逻辑与运算,并将结果存储在寄存器A中。 -
ORL:将两个寄存器中的数据进行逻辑或运算,例如
ORL A,R0
表示将寄存器A和寄存器R0中的数据进行逻辑或运算,并将结果存储在寄存器A中。 -
XRL:将两个寄存器中的数据进行逻辑异或运算,例如
XRL A,R0
表示将寄存器A和寄存器R0中的数据进行逻辑异或运算,并将结果存储在寄存器A中。
分支指令
分支指令用于实现程序的分支和跳转,包括无条件跳转、有条件跳转、循环等。常用的分支指令有:
-
JMP:无条件跳转到指定地址,例如
JMP 8000H
表示跳转到8000H地址处。 -
JZ、JNZ:根据寄存器或内存中的数据是否为零,判断是否跳转,并跳转到指定地址,例如
JZ 8000H
表示如果寄存器A中的数据为零,则跳转到8000H地址处。 -
DJNZ:将一个寄存器中的数据减去1,并根据结果是否为零来判断是否跳转,并跳转到指定地址,例如
DJNZ R0,8000H
表示将寄存器R0中的数据减去1,如果结果不为零,则跳转到8000H地址处。
中断指令
中断指令用于实现中断服务程序的调用和处理,包括开启中断、关闭中断、保存现场等。常用的中断指令有:
-
EI、DI:分别用于开启和关闭中断,例如
EI
表示开启中断,DI
表示关闭中断。 -
RETI:中断服务程序返回指令,包括恢复现场和跳转,例如
RETI
表示中断服务程序执行完毕,返回到主程序。
51单片机的开发环境
51单片机的开发环境包括硬件和软件两个方面。
硬件环境
51单片机的硬件环境主要包括单片机开发板、调试器和外部器件等。
单片机开发板是用于搭建系统的硬件平台,一般包含单片机芯片、电源、调试接口、I/O口、外设接口等。
调试器是用于烧录程序、调试程序和监控程序运行状态的硬件设备,包括仿真器、调试头、下载器等。
外部器件根据实际应用需要来选择,例如LED、LCD、按键、传感器等。
软件环境
51单片机的软件环境主要包括开发工具和编程语言两个方面。
开发工具是用于编辑、编译、调试和烧录程序的软件,常用的开发工具包括Keil、IAR、C51等。
编程语言是用于编写程序的语言,常用的编程语言包括汇编语言、C语言等。
51单片机的应用案例
51单片机广泛应用于各种嵌入式系统和电子产品中,例如智能家居、智能交通、家电控制、安防监控等。
以下是一个简单的LED闪烁程序的例子,使用汇编语言编写:
ORG 0000H
MAIN:
MOV P1,#00H ; 将端口P1输出口设为输出
CLR A ; 清空累加器A
LOOP:
INC A ; 累加器A自增
MOV P1,A ; 将累加器A的值送到端口P1输出口
ACALL DELAY ; 延时
SJMP LOOP ; 跳转到LOOP处,无限循环
DELAY:
MOV R2,#0FFH
MOVC A,@A+DPTR
AGAIN:
NOP
DJNZ R2,AGAIN
DJNZ A,DELAY
RET
该程序通过不断循环,将累加器A中的数据送到端口P1输出口,实现LED灯的闪烁效果。
总结
本文从51单片机的基本构成、特点、编程语言、基本指令和开发环境等方面进行了介绍,并以一个简单的LED闪烁程序为例,展示了单片机的应用。希望能为初学者提供一些帮助,更好地理解和掌握51单片机的知识和技能。
总体来说,51单片机是一种简单易学、功能强大、应用广泛的微控制器,被广泛应用于各种嵌入式系统和电子产品中,包括工控系统、通讯设备、汽车电子、家电控制、安防监控等领域。对于电子爱好者、学生和工程师来说,学习并掌握51单片机的技能,不仅有助于扩展知识面和技能,也能为今后的工作和创新提供有力支持。
未来,随着物联网和智能化的发展,嵌入式系统和单片机的应用前景将继续广阔,希望更多的人能够加入到这个领域中,发挥自己的才华和创造力,为社会的进步和发展做出贡献。
零基础学习单片机切记这四点要求,少走弯路
单片机个人觉得先掌握其中一种,其它的都可以触类旁通,快速上手了。如果你这些条件都没有,我建议你学习51 单片机。
为什么要学习51单片机:
虽然现在单片机种类和型号非常多,每个型号都有一定的市场份额,但是哪个型号也没有早期 51单片机那般风光和火爆,虽然现在地位不是那么高了,但是因为 51 单片机积累的资料非常多,大家学起来就会拥有众多的参考资料,所以上手肯定比其他型号的要快一些。如果你学习稍微偏门的单片机,可能一个简单的软件问题就 要折腾你好长时间,不仅仅浪费了你的学习时间,更重要的是打击了学习单片机的信心。
那么是不是每种单片机我们都要学一遍呢?答案当然是否定的。大家跟着我来学习 51单片机,必须得跟着学会举一反三和融会贯通的能力。单片机型号那么多,挨个学下来估计头发白了也学不完,所以大家跟着我学 51 单片机,不能仅仅当做 51 来学习,更重要的是要当做“单片机”来学,要通过我们的这个教程,把所有的单片机的内部资源都搞清楚弄明白,每个内部模块的用法理解透彻,这样当你遇到一 个从没有用过的单片机,也就知道如何下手去使用它进行开发了。
如何学习单片机:
前边提到过,单片机是一门实用技术,我们学习它已经不是为了应付考试了,我给大家总结了单片机的学习方法是:一个要领,四个步骤。
学习单片机的要领就是:在实践中成长。
可为什么那么多人学单片机的时候,总是只抱着一本书看呢。第一, 我们小学中学甚至大学的学习模式都是如此,学什么东西主要都是靠看书,应付书面考试;第二,很多人想实践却不太清楚该怎么去实践。
遇到问题查下书比直接看书的效果要好过百倍。不是不让大家看书,而是看了一点以后,要马上去实践验证,然后再回头结合实践的结果,理解书上的内容。从这个 地方,大家要得出一个结论来,就是在学实际技术的过程中,和应付考试不同,书上的内容不需要你去硬性记忆,书是用来查的,不是用来背的。
下面是学习单片机的四个步骤。
1)鹦鹉学舌
大家刚开始接触单片机的时候,属于单片机行业的新生儿。单片机的样子,单片机外围的各种器件,单片机内部的各种结构,单片机使用C语言的编程方法,初学者可能都没有见过,脑子里全无概念。没关系,有些概念和方法你不理解也没有关系,甚至不需要你去理解,你只需要跟着我去鹦鹉学舌似的学习。对于程序,大家就可以完全跟着抄下来,甚至抄两三遍,过一段你会发现,好多东西你也认识了,好多概念你也慢慢的理解清 楚了,你也能大概看懂别人的小程序了,切忌觉得自己看会了,而简单复制粘贴。
2)照葫芦画瓢
很多同学学习的时候喜欢看别人做的视频,看别人的程序,都能看懂,觉得自己就会了,等到自己写程序的时候,不知道从哪里下手了,这是初学者很容易犯的“眼高手低”的毛病。
每一位同学,在学完了当前课的内容,然后关掉视频教程,关掉源代码,自己通过看电路图和查找非源代码的其他任何资料,把当节课原程序代码重新默写出来,边写边多少理解那么一点点,不是纯粹的背诵,应该说是背诵加理解的结合体。甚至学过几节课以后,可以回头把前边曾经 这样实现过的课程,再按照这种方法做一遍。千万不要认为这一步没必要,这一步是你能否真正学会单片机的一个关键,在学完本教程之前,每一课内容都要这样做,如果每一个程序你都能够完美的完成,那么可以说,这节课的内容,百分之七八十你已经掌握了。
3)他山之石,可以攻玉
单片机技术的最大特点就是可以通过修改程序来实现不同的功能,因此举一反三的能力就必不可少了。每一节课的例程后边,最好自己布置几个作业,在完成这个作业的过程中,都可以参考原程序思路,在这个基础上通过动脑思考去构建你自己的程序框架,最终将程序完成。
在我们工程师实际产品研发的时候,很多种情况下也是如此。比如一个产品,我们如果从零起步的话,可能会走很多弯路,遭遇很多前人已曾遭遇过的挫折,所以我们通常的做法是寻找购买几款同类产品,然后先研究他们的各自优缺点,学习他们的长处,然后在同类产品基础上再来设计我们自己的产品,这就是“他山之石,可以攻玉”。
初学者在学习的时候,往往遇到的问题很多,你应该想到,你遇到的问题,可能前辈们早就遇到过了,所以遇到问题后,不要慌张,首先利用谷歌或者百度这些搜索引擎在网上搜一下。不管是编程还是硬件设计,多多参考别人的东西,只要把别人的东西分析明白了,自己用起来了,也就成为自己的知识了。
4)理论实践结合,温故知新
当大家把所有的课程都按照前边三步完成后,这个时候不妨再把书打开,再看看书,经过了自己的实战经历,对很多知识点会有一种恍然大悟的感觉。甚至视频教程、书籍都可以反复看几遍,可能有的知识点当时学习的时候不明白,过了一段时间,回过头来再学习的时候,一下就明白了。
最后分享一个单片机方面的资料便于后期的学习参考
概念这么多,我该如何学
http://www.makeru.com.cn/live/4034_1461.html?s=45051
如何做好精准职业规划
http://www.makeru.com.cn/live/4006_1429.html?s=45051
释放潜能:学习效率提升、编程能力提升
http://www.makeru.com.cn/live/3507_1276.html?s=45051
C语言
http://www.makeru.com.cn/course/details/2233?s=45051
以上是关于零基础学习51单片机的主要内容,如果未能解决你的问题,请参考以下文章