没有合适的资源?快使用搜索试试~ 我知道了~
首页单片机入门教程:实战与基础并重
单片机入门教程:实战与基础并重
需积分: 0 4 下载量 184 浏览量
更新于2024-08-02
收藏 1.35MB PDF 举报
"个人学习51单片机精彩教程" 这篇教程是作者根据自身多年的单片机学习经验编写的,旨在帮助初学者轻松掌握51单片机的基础知识和应用技巧。教程强调实践与理论相结合,避免传统的从理论到理论的教学模式,而是采用了一种名为"IAP"(在应用中编程)的教学法,鼓励学习者在实践中理解和掌握单片机的使用。 51单片机是微控制器的一种,广泛应用于各种电子设备中。对于初学者来说,通常会遇到的一个问题是市面上的教材大多面向已有基础的读者,讲解方式往往从硬件结构、指令集、软件编程、系统扩展和外围设备开始,这样的顺序并不利于零基础的学习者入门。作者指出,这种方法要求学习者先掌握所有知识才能进行实际项目,而在现实的单片机开发中,往往需要逐步积累,边学边用。 作者提出的新教学方法是以单片机的实际应用为出发点,结合基础工业控制系统的概念和具体的工作应用案例,不拘泥于传统的学习顺序,使得学习者能在解决实际问题的过程中理解并运用单片机。这种方式有助于激发学习兴趣,降低学习难度,更符合现代教育提倡的“做中学”理念。 教程中提到,学习单片机不应该只是单纯记忆理论,而应该注重实践操作。因为单片机的设计往往依赖于简单的硬件结构和复杂的软件系统,不同设计者会根据需求选取不同的功能,而不是全盘掌握所有指令。因此,通过实际项目来学习和提升技能,比纯粹的理论学习更有效。 总结起来,这个教程针对51单片机初学者,采用创新的教学方法,强调实践与理论的结合,以实际应用为导向,帮助学习者快速上手,理解单片机的工作原理和编程技巧,是个人自学或教学的好资料。通过跟随教程的指导,学习者可以逐步建立起对单片机的深入认识,并有能力进行实际的产品开发。
资源详情
资源推荐
(MCS-51
)
15
一个名称,专业术语叫标号,既然是一个名称那可不可以用
JIGUO
,
CHINA
等等的其他名字呢?当然可
以,这完全取决于您的需要(
☺
:不过也有一些是不能采用的,我们以后再讲
)
。再来分析第
2
条和第
4 条指令,看看它们是如何实现延时的?LCALL DELAY,LCALL 也是一条指令,这条指令叫做调用子程
序指令,看看
LCALL
后面跟着的是什么
--DELAY
,哪里有
DELAY
,在第
6
条指令的开头,很显然这也是
一个标号,这条指令的作用就是当执行到这条指令时就转去执行 LCALL 后面标号所在处的程序,如果在
执行程序时遇到
RET
指令(
RET
叫返回指令)
,就返回到
LCALL
指令的下面一条(即第
3
条指令)处继
续执行,在第 9 条指令后确实有 RET 指令,那么在执行完第 2 条指令后就应该去执行第 6.7.8.9 条指令,
之后遇到第
10
条指令:
RET
,执行完这条指令后就回去执行第
3
条指令,将
P1.0
清零,也就是让
LED1
亮,然后再去执行第 4 条指令,执行完后又回到 6.7.8.9.10 条指令,最后执行第 5 条指令:LJMP MAIN,
也就是我们刚才说的跳转到第
1
条,将
P1.0
置位,就是让
LED1
灭掉。如此周而复始,
LED1
就不断的
闪烁。好好理解这段文字,务必把它搞清楚!!!
从标号
DELAY
处(即第
6
条)开始到
RET
的这一段指令我们称之为子程序,它是一段延时程序,
至于延时多长时间,我们会在以后的课程中学习。程序的最后一条是 END,它不是指令,它只是告诉编
译软件整个程序到此结束了,它叫
“伪指令”
。在大家以后的编程中,写完程序都要加上这一条。
在上面的程序中我们知道了从标号
DELAY 开始的子程序是一段延时程序,那么它又是如何工作的
呢?在了解它的工作过程之前我们必须先知道其中的一些符号,就从 R7
开始吧,它是单片机内部的一
个重要组成部分,叫工作寄存器,什么是工作寄存器?下面我们就来讲解这个问题:
二.工作寄存器
上一课我们已经讲过,在单片机中有许多的功能寄存器和半导体存储器 RAM
有关,那么工作寄存
器又属于哪一部分呢?它是用来干什么的呢?要搞清楚这个问题,让我们先从日常生活中的一个例子说
起,比如我们要做一道数学题 123+456,您会马上得出答案:
579,接下来再看一道题:
123+456+789,
要你马上得出答案就不那么容易了,
通常我们会怎么做呢?一般总是先把 123+456 的结果
579 写在一张
纸上,然后再算 579+789=1368,这
1368 就是我们想要的最终结果,而
579 只是为了得到最终结果而暂
时记下来的中间结果,单片机中做运算和我们生活中做运算一样,也需要把中间结果放在某个地方,那
么计算机把它放在哪儿呢?前面我们提到的
ROM
(只读存储器)中,不行!因为
ROM
是用来存放程序的,
它只能写进去,不能读出来(再次提醒一下,
这只是相对而已),所以只能放在单片机的另一个区域
—RAM
中(即随机存取存储器)中。R7
就是 RAM 区域中划出的一部分。知道了
R7,接下来让我们来分析一下
这段子程序(延时程序)。
三.LED
灯闪烁程序子程序的分析
首先看第 6 条,MOV R7,#250,这也是一条指令,意思是传递数据。我们知道在日常生活中,要
传递一件东西就必须要有一个传递者,一个接受者和被传递的东西,那么在单片机中是怎么区分它们的
呢?在这条指令中,
R7
是接受者,
250
就是要传递的东西(单片机中要传递的东西当然是数字了)
,这
里传递者被省略了(顺便提一下,并不是每条指令都能省略的,事实上大部分的指令都要有传递者)
,
这样一来,这条指令的意思也很清楚了:就是把
250
这个数传递给
R7
这个工作寄存器(也就是把
250
这个数送入
R7
中)
,这样执行完这条指令后
R7
中的值就应该是
250
,我们可以用
DUBG8051
这个软件来
验证一下,看是不是符合。讲到这里,不知大家注意没有,在
250
这个数的前面有个
#
,它是什么意思
呢?这个
#
就说明
250
是一个被传递的数的本身,而不是传递者。看懂了
MOV R7
,#250
,那 么
MOV R6
,
#250
也应该很清楚了。
接着看第
8
条
DJNZ R6
,
D2
,这又是另一条指令,我们来看一下
DJNZ
后面跟着什么,一个是
R6
,
一个是 D2,R6 我们已经知道了,再找一下 D2,D2 在本行的开头,我们已经学过,它是标号。那么这条
指令是怎么执行的呢?它的执行过程是这样的:它将后面的值(即工作寄存器 R6 中的值)减 1,然后
查一下这个值是否等于“0”,如果等于“0”就往下执行,如果不等于“0”就转移,转移到什么地方去
呢?大家应该明白了,实际上这条指令的执行结果就是在原地转 250 次;当 R6 中的值等于“0”之后,
程序就去执行第 9 条指令,也就是 DJNZ R7,D1,大家自行分析一下这条指令的结果(是不是转去执
行 MOV R6,#250,同时 R7 中的值减 1),这段子程序的最终执行结果就是 DJNZ R6,#250 这条指令被
单片机之友 QQ:280919249
(MCS-51
)
16
执行了
250*250=62500
次,执行这么多次干吗?就是为了延时。
四.本课总结
大家可以改变一下 MOV R6,#250 这条指令中的值(注意☺:不能大于 255,为什么,以后会讲
到)
或者改变一下标号的名称,看是不是符合上面的分析。接下来提一个问题:通过实验我们看到了
LED1
在闪烁,是因为
DJNZ R6
,
#250
这条指令被执行了
250*250=62500
次,执行那么多次究竟需要多
长时间呢?下一课我们就将讨论这个问题。
这里有必要介绍一下 DUBG8051 这个软件,它是一个专为 8051
单片机设计的仿真软件,配合 MON51
仿真机能进行 51 单片机的仿真,拥有这样一套设备在过去可是非常奢侈的,不过现在已经很少有人使
用它了,原因是目前市场出现了许多兼容 KEIL C51 的仿真器,它们的功能更先进,MON51 只能属于被
淘汰产品。不过作为单片机初学者,使用
DUBG8051
还是很有意义的,因为用它可以帮助我们理解单片
机的内部结构和程序的执行结果,在我们实验套件的随机光盘中,有这个软件。
五.第
4 课习题
1
. 什么是主程序?什么是子程序?
2.
标号的含义是什么?
3.
单片机是如何执行程序的?
4
.
工作寄存器属于
ROM
单元还是
RAM
单元?
5
.
在实验中如果没有
RET
指令会出现什么情况?
6. 理解指令 LCALL、LJMP、DJNZ 的意义。
7.
掌握 DUBG8051 软件的使用方法。
单片机之友 QQ:280919249
(MCS-51
)
17
第五课
单片机的内部结构(三)
上一课中,我们提到了
DJNZ R6
,
#250
这条指令被执行了
250*250=62500
次,就产生了延时,
那么这个时间是多少呢?它又是如何计算出来的呢?这一课就来讨论这个问题。
一. 单片机的时序
1
.时序的由来
我们已经知道单片机执行指令的过程就是顺序地从
ROM
(程序存储器)中取出指令一条一条的顺
序执行,然后进行一系列的微操作控制,来完成各种指定的动作。它在协调内部的各种动作时必须要有
一定的顺序,换句话说,就是这一系列微操作控制信号在时间上要有一个严格的先后次序,这种次序就
是单片机的时序。这就好比我们学校上课时用的电铃,为了保证课堂秩序,学校就必须在铃声的统一协
调下安排各个课程和活动。那么单片机的时序是如何规定的呢?接着往下看:
2
.时序的周期
计算机每访问一次存储器的时间,我们把它称为一个机器周期,它是一个时间基准,就象我们日
常生活中使用的秒一样,计算机中一个机器周期包括 12 个振荡周期,什么是振荡周期?一个振荡周期
是多少时间?振荡周期就是振荡源的周期,也就是我们使用的晶振的时间周期,一个 12M 的晶振,它的
时间周期是多少,如果电子技术学得好的朋友应该不难算出(T=1/f
),也就是
1/12(微秒),那么使用
12M
晶振的单片机,它的一个机器周期就应该等于 12*1/12
(微秒),也就是 1
μS。
在
MCS-51 系列单片机中,有些指令只要一个机器周期,而有些指令则需要两个或三个机器周期,
另外还有两条指令需要
4 个机器周期,这也不难理解,你在家擦地板的话总比擦桌子的时间要长,不过
我可是大男子主义,从来不做家务的。开句玩笑!
!!如何衡量指令执行时间的长短?我们就要用到一个
新的概念:指令周期—即执行一条指令所需的机器周期,INTEL 公司规定了每一条指令执行的机器周期,
当然这不需要我们非把它记住,不过在这里
DJNZ
指令我们是要记住的,它是双周期指令,执行一次需
要两个机器周期,即
2μS
。(12M
晶振的话),回到我们上一课的实验,延时的时间就应该算出来了吧,
是 62500*2μS=125000μS,也就是 125mS。这么大的数字也就 0.125S,怪不得 LED1 闪烁的这么快。(这
里给大家出个题目:在上一课的实验中,如何延长闪烁的时间?想想看,
怎么做?当然,不会也没关系)。
二.单片机的时钟电路
大家已经知道,单片机是在一定的时序控制下工作的,那么时序和时钟又有什么关系呢?时钟是
时序的基础,单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方式的实现,电路就要在
唯一的时钟信号控制下按时序进行工作。那么单片机内的时钟是如何产生的呢?
1. 内部时钟电路
单片机之友 QQ:280919249
(MCS-51
)
18
在
MCS-51
单片机的内部有一个高增益的反相放大器,其输入端为引脚
XTL1
(
19
)
,输 出 端 为
XTL2
(
18
)
,我们只要在外部接上两个电容和一个晶振,就能构成一个稳定的自激振荡器,它的内部电路的
工作原理就不介绍了,这里主要讲一下电容和晶振的选择,看上面的图,晶振的大小与单片机的振荡频
率有关,我们到串行接口时再详细讲解,电容的大小影响着振荡器振荡的稳定性和起振的快速性,通常
选择
10-30P
的瓷片电容或校正电容;另外在设计电路时,晶振和电容应尽可能的靠近芯片,以减少
PCB
板的分布电容保证振荡器振荡工作的稳定性,提高系统的抗干扰能力。
2.
外部时钟电路
除了内部时钟方式外,单片机还可以采用外部引入时钟的振荡方式,什么时候需要采用外部时钟
方式呢?当我们的系统由多片单片机组成时,为了保证各单片机之间时钟信号的同步,就应当引入唯一
的公用的外部脉冲信号作为各单片机的振荡脉冲,此时应将
XTAL2
悬空不用,外部脉冲信号由
XTAL1
引入,如上右图所示,外部信号的高低电平持续时间应大于 20mS,这是大虾们的作品,在此就不介绍
了。
三.本课总结
本课的内容比较少,我就罗嗦一下,讲几句题外话。我是一个只有初中毕业,没有读过多少书的
人,从小就爱好无线电,记得很小的时候,当通讯兵的父亲带回来几本电子方面的书籍,从此就迷上了
无线电,那种痴迷程度决不亚于现在的小孩迷恋游戏机,至今仍然清楚的记得,曾经因为装成功一台 6
管收音机而兴奋的几天几夜没睡好觉。那个时候,我国的电子工业还刚刚起步,买一个
3AX31
的三极管
都要特地跑到市区,而且价格奇贵,几乎要用去一个月的零化钱,当时最愿意去的地方就是上海的虬江
路电子旧货市场,因为在那里可以淘到好多旧的电子元件。初中毕业以后,在当地根本就找不到一家电
子企业,只好在镇上开了一家电器修理店,也就是这几年,边干边做地学了不少在今天已根本无法再学
得进去的“电子,空穴,移位,寄存,施密特”等等理论知识,由于身边没有一个可以请教的老师,为
了加深学习的印象,所以只好一边做实验一边学理论,尽管进度很慢,但效果竟然还不错,好在当时搞
家电修理的收入还可以,加上没有家庭负担,也就这么过来了。
随后的几年,做过工人,也当过老师,但更多的时间是在搞技术开发,这些年来,看到很多的昔
日同学靠导腾房地产或者做生意发了财,可自己依然还在这个领域默默无闻的钻研着,但我还是没有后
悔,也从来没有想过改行,因为电子技术那众多迷人而未知的领域常常会使我深深地陷入其中,以至无
法自拔,也感叹自己搞了这么多年,还只是一个入门者。
现在老是听到有些年轻的朋友说我要速成单片机,速成
C
语言,速成什么什么的,每当我看到或
听到这些话的时候,总有一种说不出的滋味。现在的社会,什么都讲究个效率,这本来没有错,但学一
项技术也能速成,实在让人有点不知道说什么好。就单片机而言,即使你现在只有 15,6 岁,也很有天
赋,想把现在的几种主流单片机都搞懂并很好的应用到实践中去,没有个几年恐怕也难,更何况单片机
的技术是在不断发展的,你想跟也来不及。
不过,话又说回来,我不是要打击大家的学习积极性,单片机是一种非常宽泛的技术,它的设计
是为了满足大多数的需要,换言之,即使你并没有把全部的知识都理解得很深透,或者说没有把每种单
片机都搞懂,也没关系,你一样可以在实际的产品开发种应用它,因为几乎没有一个产品会把全部的指
令都用起来。
好了,废话讲了半天,还是言归正传吧,希望大家课后多交流,因为在我看来,技术只有不断的
交流,才会有进步,闭门造车只有“
S
”路一条。
四.第
5
课习题
1. 什么是单片机的机器周期?什么是振荡周期?什么是指令周期?它们之间的关系是怎么样的?
2. 什么是单片机的时序?
3. 单片机有几种振荡方式?
4. 简述单片机内部时钟的产生过程。
单片机之友 QQ:280919249
(MCS-51
)
19
第六课
单片机的内部结构(四)
在前一课中,我们讲述了单片机的时序和时钟,大家是不是又觉得有些头疼了,下面让我们再来
做两个实验放松一下。
一.单片机 I/O 口的输出实验
1.实验程序
程序如下:
LOOP:MOV P1,#0FFH ;
LCALL DELAY ;
MOV P1,#00H ;
LCALL DELAY ;
LJMP LOOP ;
DELAY:MOV R7,#250 ;
D1:MOV R6,#250 ;
D2:DJNZ R6,D2 ;
DJNZ R7,D1 ;
RET ;
END 。
还是老规矩,调试,写入源代码,编译,下载,看到了什么?8 只
LED 灯都在闪烁(注意:前面
的实验是让一个 LED 灯闪烁)
,分析一下程序:
2.程序分析
这段程序和前面的程序比较,有两处不同,第
1 条,原来是
SETB P1.0,现在改为
MOV P1,#0FFH
,
第
3 条,原来是
CLR P1,现在改为 MOV P1
,#00H。为什么这样改了之后就变成了
8 只 LED
灯同时闪
烁了?原来
P1
代表了
P1.7-P1.0
的全部,我们把它当作一个存储器单元(即一个字节)
,不过对一个存
储器单元送数就应该用 MOV 指令了;在这里 P1(P1.7-P1.0)接的是 LED 灯(也就是负载),它起到了
一个输出端的作用。
那如果把
P1
改为
P2
或
P3
或
P4
行不行呢?答案是肯定的,
为什么?我们稍后再谈,
接着看第 2 个实验。
二.单片机 I/O 口的输入实验
1
.实验程序
程序如下:
MAIN:MOV P3,#0FFH ;
LOOP:MOV A,P3 ;
MOV P1,A ;
LJMP LOOP ;
END.
同样的方法把程序下载到单片机,按下第
1
个按钮,第
1
个
LED
灯亮了,按下第
2
个按钮,第
2
个 LED 灯亮了,松开按钮,相应的灯就灭了,是不是有点象工业控制中的点动控制原理。分析一下这个
程序:
2.程序分析
看附图的硬件接线图,有 4 个按钮分别接到了 P3.2,P3.3,P3.4,P3.5,引脚上。再来分析一下
程序,第 1 条,使 P3 口(包括 P3.7-P3.0)全部为高电平(为什么 MOV P3,#0FFH 能使 P3 口全部为高
电平,我们在下一课中讨论);第 2 条 MOV A,P3;MOV 我们已经知道,是送数的意思,这条指令的意
思就是把 P3 口的数送到 A 中去,A 是什么呢?我们也可以把它看成一个中间单元,就象 R7 寄存器一样,
第 3 条指令就是把 A 中的数送到 P1 口去;第 4 条是循环,这些我们都已经见过,当我们按下 P3.2 所连
单片机之友 QQ:280919249
剩余99页未读,继续阅读
yin_rj
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功