项目二 单片机点亮LED.docx
- 文档编号:28077645
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:36
- 大小:8.87MB
项目二 单片机点亮LED.docx
《项目二 单片机点亮LED.docx》由会员分享,可在线阅读,更多相关《项目二 单片机点亮LED.docx(36页珍藏版)》请在冰豆网上搜索。
项目二单片机点亮LED
《单片机原理与应用》教材
项目二 单片机点亮LED
学习单片机重要的一步,是熟练掌握使用仿真器、编程器及相关软件;让我们从点亮“一盏灯"(一个LED)开始进入单片机世界,包括指令编写方法、指令运行过程及单片机数据存储器、程序存储器、特殊功能存储器等。
跑马灯是一个较为简单的程序,但在日常生活、工业控制中却常常见到它的身影,基于跑马灯原理的产品也随处可见,尤其在消费类电子产品上,如作为装饰用的霓虹灯。
故实用的技术不一定是高深的,创新最重要。
【知识目标】
•初步形成给单片机“下命令”的编写程序概念。
•熟练掌握数据传送指令。
•知道单片机程序的存储器、数据存储器的概念及地址分布。
【技能目标】
•认识仿真与编程工具。
•学会MedWin编译软件、EasyPR0编程软件的使用方法。
•初步体验编写程序一编译一编程(烧录)的单片机“开发”过程。
任务一 仿真器与编程器
【任务目标】
•认识仿真器及其功能。
•认识编程器,学会至少一种编程器的使用方法。
•学会安装、使用相关软件(编译软件、编程软件)。
【读一读】
知识1 仿真器
仿真器是用来模拟单片机运行并可以进行在线调试的工具,需配合相应的仿真软件(编译软件)。
仿真器通过仿真头与目标板(如单片机实验板)直接相连接,代替单片机在目标板上演示出电路运行效果,具有直观、实时性强、排错效率高、易发现程序和硬件电路错误等优点。
图2-1所示为各类仿真器。
(a)PIC仿真器(b)万利仿真器(51单片机)(c)台湾合泰仿真器
图2-1各类仿真器
图2-2为51单片机仿真器接线图,该系统由电脑、仿真器、软件、目标板共同完成单片机程序的调试。
(a-)仿真器接线图(b)仿真头连接图
图2-251仿真器接线图
各单片机芯片生产厂家为方便用户开发程序,均推出了各自的仿真器,故仿真器与单片机厂家是一一对应的,不同单片机厂家的仿真器一般不通用,有时同一单片机厂家针对不同系列单片机也有各自的仿真器。
仿真器大多价格较高,售价在千元到数千元不等,除非商业开发必需,并不是人人学单片机都是必需的。
在没有专业仿真器的情况下可以通过软件仿真的形式进行程序调试与学习。
本书以后的学习均采用软件仿真一一烧录芯片进行调试的方法。
可见,仿真器可以提高程序开发的效率、有效帮助学习,但并不是学习单片机的必备工具。
没有仿真器时可用软件仿真的方法进行程序开发。
知识2 编程器
程序编写完成并进行编译无误后,可在仿真器上运行调试(或软件仿真);最后须将程序代码烧录入单片机,以便在目标板(实验板)上观察运行结果。
将单片机程序(实际上是十六进制或二进制机器码)烧录入单片机(编程)的设备称为编程器。
图2-3所示为几种编程器的外形。
(a)台湾合泰HT编程器(b)EasyPR080B编程器
Cc)T0P编程器Cd)自制仿真器
图2-3几种编程器外形
与仿真器类似,不同的单片机厂家均有相应的编程器推出,通常也是与单片机芯片相对应的:
通过单片机厂家授权,第三方厂家也会推出各类编程器,尤其是51内核的单片机,生产编程器的厂家较多,故在编程器的选用方面较仿真器要灵活得多。
图2-3中(b)、(c)、(d)三种编程器均可对51系列单片机编程。
编程器在工作时需相应的软件支持,本书以编译软件MedWin、编程软件EasyPR0为例,选用图2-3(b)所示EasyPR0-80B编程器。
【做一做】
实训 MedWin编译软件的安装与使用
1.实训目的
1)学会MedWin编译软件的下载与安装。
2)学会MedWin编译软件的基本使用方法。
2.实训器材
计算机一台,安装光盘(或从网上下载)。
3.实训内容
1)MedWin集成开发环境的安装。
2)学习编译方法。
3)查看数据寄存器、特殊功能寄存器的方法。
4)MedWin软件常用指令功能。
4.实训步骤
(1)下载(或准备安装光盘)
MedWin集成开发环境系统默认使用万利电子有限公司的汇编器A51.EXE和连接器L51.EXE,支持汇编语言编写的程序开发,可在万利电子官方网站下载(http:
//lchinese/index.asp),目前己推出V3.0版本。
(2)安装步骤
1)打开下载后的MedWin文件夹,如图2-4所示。
图2-4MedWin文件
2)双击安装文件SETUP.EXE,出现如图2-5所示界面。
图2-5开始安装
3)单击Next按钮,进入下一步安装,所有设置均采用默认。
4)安装完毕后会在计算机“开始’F→“程序”菜单中出现manley→MedWin命令,单击此命令即可打开,或双击桌面上MedWin的快捷方式图标
,以上两种方法均可打开MedWin仿真软件。
(3)MedWin仿真软件基本使用步骤
1)打开软件,如图2-6所示。
没有连接仿真器时单击“模拟仿真”按钮。
2)弹出如图2-7所示对话框,系统默认的工作目录不用理会,单击“取消”按钮即可(第一次使用以尽量简单的方式进行)。
图2-6打开软件
(1)
图2-7打开软件
(2)
3)进入工作界面,如图2-8所示。
软件可以通过工程项目的方式进行软件开发,也可直接输入程序指令编译。
后者步骤简单,适合初次学习。
图2-8MedWin工作界面
4)单击菜单中“文件”→“新建”命令,出现如图2-9所示对话框,输入程序名后单击“打开”按钮,注意程序名必须以.asm为后缀。
图2-9输入文件名
5)进入MedWin编辑环境后,就可以输入程序指令了,如图2-10所示(这里提供一个例子,暂且不用去理会程序,内容)。
图2-10MedWin编辑环境
6)程序输入后,进入编译状态:
选择菜单“项目管理”→“编译/汇编”命令,如果程序编写没有指令格式的错误,则出现如图2-11(a)所示“汇编过程中发现:
警告(0)川错误:
(0)。
汇编结束1"的提示。
如出现如图2-11(b)所示错误提示,则表明有语法格式错误,并且光标会指向第一个错误指令行。
须逐条修改错误后重新选择“编译/汇编”命令,直到不再发现错误。
(a)编译正确(b)编译发现错误
图2-11编译结果示意图
7)调试运行。
程序经编译排除语法错误后可进入调试运行状态:
选择菜单“调试”→“开始调试”命令,即进入如图2-12所示调试界面,此时可边“全速运行”或“单步”运行,单步运行便于发现程序逻辑错误。
8)软件仿真。
由于没有连接仿真器,当程序“全速运行”或“单步运行”时不能看到目标板的硬件电路效果,此时可通过查看单片机片内也咄4或特殊功能寄存器中的数据来判断指令执行情况,如图2-13所示。
图2-12调试界面图2-13查看菜单
选择菜单“查看”→’“数据区"(或“特殊功能寄存器")可查看相应的数据变化。
图2-14中分别为数据RAM区、特殊功能寄存器中的数据变化。
(a)数据RAM区中(b)特殊功能寄存器中
图2-14仿真时的数据变化
【议一议】
1)充分利用网络资源是学习的一种重要途径,对于单片机学习也是如此,单片机厂家官方网站上的资料(或专业论坛)更新较快,有利于开阔视野,取得学习的第一手资料,常去浏览定会受益匪浅。
2)单片机编译软件种类繁多,针对51系列的还有如Kei1编译软件、南京伟福E6000编译软件等,不同的软件的具体操作方法有所区别。
MedWin集成开发环境同时推出中英文版,更容易学习。
3)程序员输入的程序通过编译后,只能说明程序指令格式正确,并不意味着程序逻辑、算法等正确。
要使程序调试无误,必须使单片机脱机运行或利用仿真器在目标板上仿真调试。
4)本次实训步骤y内容必须熟练掌握,是今后学习单片机的重要基础。
实训中没有涉及的内容如断点设置、返回监控等命令请参考网站或其他资料学习。
【评一评】
填写表2-1中的内容。
表2-1MedWin编译软件实训测评
任务二 使用单片机点亮一个LED
【任务目标】
•初步掌握单片机指令格式,会用并记忆单片机数据传送指令。
•能编写一个跑马灯小程序并将程序“烧录"(编程)进入单片机运行。
•熟练使用编程软件EasyPR0。
【做一做】
实训1 给单片机下命令
1.实训目的
1)巩固MedWin集成开发环境的使用。
2)学会编程软件EasyPR0的使用方法。
3)初步掌握使用单片机点亮一个LED的步骤。
4)体验单片机“程序开发”的过程。
2.实训器材
己安装编译、编程软件的计算机、单片机实验板、EasyPR080B编程器。
3.实训内容
1)编写一个单片机点亮LED发光管的程序。
2)单片机在实验板上脱机运行。
4.实训步骤
1)按照图2-15所示步骤开始本任务的实训,实训电路如图2-16所示。
图2-15单片机点亮LED步骤
参考程序如下。
【说明】①给单片机下命令,用汇编语言实现,单片机执行:
M0VP2,#0FffH;相当于M0VP2;#11111111B
指令执行结果:
将数据(ll1Ulll最)送到P2口,于是P2I/O口线上均输出高电平“1",由图2-16电路可知,此时LED1-LED8均不亮。
②单片机接着执行第二条命令:
CLRP2.0
“CLR"表示清零,也即让单片机P2.0口输出低电平“0”,由图2-16可知,LED1将被点亮。
2)打开MedWin仿真软件,写λ程序如图2-17所示。
3)程序汇编,选择工具栏菜单“项目管理”→“编译/汇编”命令,编译结果如图2-18所示。
图2-16点亮一个LED电路图
图2-17打开MedWin仿真软件并输入程序
图2-18程序编译
4)产生并输出程序目标代码,如图2-19所示。
图2-19输出十六进制目标代码
5)打开EasyPR0编程软件,将程序目标优码烧入单片机。
步骤如下。
①连接好编程器,接通电源,打开EasyPR0编程软件,出现如图2-20所示操作界面。
②选择菜单“芯片”→“选择芯片”命令,弹出如图2-21所示选择单片机芯片型号对话框,选择“AT89C51"或相对应的芯片。
图2-20编程软件操作界面
图2-21选择芯片
③选择菜单“打开”,找到如图2-19所示输出的十六进制目标代码“点LED.asm"并打开,如图2-22所示。
图2-22打开“点LED.asm"文件
④编程:
按要求将芯片放置在编程器上并锁紧,单击左边工具栏“编程”选项并确认,进入芯片编程过程,如图2-23所示,编程结束即可取下芯片。
图2-23芯片编程
6)上机运行并验证。
将己烧入程序的芯片89C51在实验板上通电运行,观察运行结果。
【议一议】
1)单片机学习的最基本工具是仿真器、编程器及相应软件、实验板(目标板),应通过实训熟练掌握它们的使用方法。
2)实训时的“变式训练”是提高训练、效果、使知识融会贯通、举一反三的有效途径。
以下为本次实训的“变式":
①如要点亮LED2,指令如何修改?
②如要点亮多个LED,指令如何修改?
③如让LEDl点亮后再关闭,程序怎么写?
记录观察效果。
3)本书配套的单片机实验板使用方法参见附录四。
本实训任务是让单片机点亮一个LED发光管,完成了此项任务,就是完成了一个最简单的单片机系统开发过程,虽然是最简单的,但的的确确是在进行“单片机开发”了。
【评一评】
请填写表2-2中的内容。
表2-2使用单片机点亮LED实训测评
【读一读】
知识 单片机数据传送指令
MCS-51指令系统中,各类数据传送指令有29条,位传送指令2条,数据传送指令种类丰富,为程序编写提供了方便。
表2-3中列出了MCS-51系统数据传送类指令。
解释表2-3中各指令意义之前先说明表中一些约定符号,列于表2-4中。
1.指令周期与字节数
MCS-51单片机的振荡频率经过片内二分频后得到的信号周期称为状态周期,由6个状态周期组成机器周期,即单片机CPU完成一次基本操作所用的时间。
若单片机系统采用12阳恒的晶体振荡器,则每个机器周期为
若采用6MHz的晶体振荡器,则每个机器周期为
MCS-51单片机执行一条指令所需的机器周期称为指令周期。
根据指令执行时间的长短,指令周期分别为1个、2个或4个机器周期,如表2-3所示(乘、除法指令为4周期指令,参见后面学习内容)。
根据指令在程序R0M中所占的空间分为单字节指令、双字节指令和三字节指令。
表2-3数据传送类指令表
如单片机系统采用12MHz振荡器时,执行指令“M0VA,#data"需要lμs时间、占用2个字节的程序存储器空间。
表2-4指令格式中约定符号的含义
2.内部RAM传送的相关指令
与内部RAM有关的数据传送指令共有18条,涉及内部队M直接寻址单元、特殊功能寄存器、立即数等,按图2-24理顺传输关系可以帮助指令记忆。
单片机指令格式比较死板,完全符合表2-3中所列格式的是合法指令,否则即为“非法”,指令编译不能通过。
另外,同样的数据传送,可用不同的指令来实现,选用指令有较大的灵活性。
例2-1将累加器A的数据传送给内部RAM30H单元。
方法一:
M0V30H,A;累加器A内容送给30H地址单元
方法二:
M0VR0,30H;
M0V@R0,A;利用间接寻址方式传递
图2-24数据传送示意图
@R0表明R0中的数据是一个地址单元,数据将传递到该地址单元,故方法二的指令执行结果为(30H)=A
又如:
M0VRl-,.#30H;Rl=30H
M0V@R1L#30H;(30H)=30H,地址30H单元中的内容为30H
理解上述两条指令的区别至关重要。
3.外部RAM地址与累加器A间的数据传送
在MCS-51单片机系统中,有时因内部RAM资源不够用而进行外部扩展,外部扩展的RAM读、写数据用指令M0VX完成,并且只能通过累加器A实现。
例2-2
M0VXDPTR,#3FFFH;将外部RAM地址送DPTR数据指针
M0VXA,@DPTR;外部RAM(3FFFH)内容送A
M0VX30H,A;数据存放在内部队M30H单元
4.交换指令
交换指令有字节交换、半字节交换,所有的交换指令均需累加器A参与完成,应特别留意指令的合法性。
例2-3将Rl中数据传送到R2。
方法一:
M0VA,Rl
M0VR2,A
方法二:
M0VA,Rl
XCHA,R2;用字节交换指令完成数据传送
非法的指令格式:
M0VR2,Rl;可参照表2-3判别
例2-4
设A=3AH,Rl=30H,(30H)=8FH,执行
XCHDA,@Rl;30H单元内容与A内容低四位交换
交换示意图如图2-25所示。
图2-25例2-4图解
例2-5己知A=3AH,执行:
SWAPA
执行结果
A=A3H
表2-3仅列出了数据类传送指令,MCS-51系统共有111条指令,数量较多,格式各异,光靠死记硬背显然不可取,多看多写是学习的必要手段,可在MedWin编译软件中多进行练习,电脑会提示出错误的指令,从中可获得帮助。
记住:
实践是“硬”道理。
【做一做】
实训2 实现跑马灯
1.实训目的
1)初步建立编写程序的概念。
2)实现跑马灯。
3)能在参考程序的基础上进行修改,显示出不同效果。
2.实训器材
准备实验板、编程器等。
3.实训内容
1)程序的输入、芯片编程。
2)编译软件、编程软件的使用。
3)各种花色跑马灯的实现。
4.实训步骤
1)硬件原理图参见图2-16。
2)编写跑马灯程序,在MedWin编译软件上输入如下参考程序(文件名:
跑马灯.asm)。
3)编译、修改。
4)生成并输出目标代码HEX(BIN)文件:
跑马灯.hex(跑马灯.bin)。
5)连接好编程器,打开EasyPR0软件,进行单片机芯片编程(烧录芯片)。
6)实验板上电运行,观察效果并记录:
没有出现预期效果时返回第2)步检查、修改程序。
【议一议】
不知不觉己完成了30多条指令的程序编写,是否己感觉“进入”了单片机编程的大门呢?
1)参考程序中DELls为延时子程序,其功能是:
让单片机“等"ls时间再去执行后面的指令,若没看懂可以暂时不去理会其工作原理。
2)在编写程序时必须特别注意指令格式的规范性。
3)变式训练:
试着改变跑马灯的花样,如跑动的“灯”变成2个、3个、4个或更多,应如何实现?
适当修改参考程序即可完成。
4)为便于理解,上述跑马灯程序编写采用最“笨”的方法实现,在实际工程应用中是不具有实用价值的:
下面的程序同样可以实现跑马灯,看不懂没关系,只需明白一个道理:
学习了更多的单片机知识后,程序会变得“聪明”起来。
0RG0000H
LJMPSTART
0RG0030H
START:
M0VA,#11111110B
L00P:
M0VPl,A
LCALLDEL18
RLA
LJMPL00P
END
【评一评】
请填写表2-5中的内容。
表2-5跑马灯实训测评表
任务三 程序存储器与数据存储器
【任务目标】
•知道单片机数据存储器的作用,知道与程序存储器的区别。
•记住89C51重要的特殊功能寄存器的名称与作用。
•学会查阅单片机手册,了解其数据存储器空间大小参数。
•记住具有位寻址功能的数据存储器地址范围。
【读一读】
知识1 程序存储器
1.程序存储器
单片机程序存储器用于存储程序、表格数据等,89C51单片机在物理空间上分为片内程序存储器、片外程序存储器。
所谓的芯片“烧录”就是通过编程器将程序目标代码(二进制机器码或十六制码)“存入”单片机程序存储器。
故单片机程序存储器空间大小对程序员而言是很重要的,也是单片机选型的依据之一。
市场上单片机存储器主流种类有如下几种。
(1)FlashR0M
FlashR0M是比较流行的一种固态内存,具有读写速度快、非易失、轻巧等优点。
89C51单片机片内程序存储器属FlashR0M,可多次重复擦写达上千次,容量为4kB,片内程序存储器地址从0000H~0FFFH。
(2)0TRR0M
0TP(0neTimerPr0gramable)为一次性可编程存储器,最大的优势是价格比FlashR0M低,缺点是不可擦除,即不能重复编程。
0TP单片机适合于批量生产,不适合学习、实验,介于其成本低的优点,0TPR0M己大量应用于单片机,如PIC系列中低端的芯片。
(一)MaskR0M
MaskR0M又称掩膜型只读存储器。
掩膜是一种生产工艺,需将程序交给单片机厂家,厂家在生产过程中将程序通过掩膜写入单片机程序存储器,这种芯片集成度高、保密性强、成本最低,适合于大批量生产。
目前,许多单片机均提供掩膜版本,特别适合于玩具、消费类、语音类的产品,如万年历、计算器、电话机等。
2.单片机指令执行过程
单片机能自动地执行程序员编写的指令,使得’各种控制任务顺利完成,这是因为有一个重要的单片机硬件一一程序计数器PC在起作用。
PC是一个能自动加I的寄存器,存放着当前要执行的指令地址,即指示程序执行的位置。
二条指令执行完毕,CPU通过PC自动取出下一条指令,这样不断重复取指令一译码一执行的过程,如图2-26所示。
图2-26程序执行过程
单片机上电复位后,PC自动清零,PC指向程序存储器地址0000H处。
单片机程序执行是CPU通过PC在无人干预的情况下自动完成的,程序员只需按规范编写程序。
知识2 数据存储器
89C51片内有128B的数据存储器(RAM),其地址为∞H~7FH,如图2-27所示,可分为工作寄存器区、位寻址区、用户RAM区。
1.工作寄存器区
89C51工作主寄存器区共32个单元分为4组,分别为第0组、第l组、第2组、第3组,每组有8个单元,称为R0,R1,R一,…,R7。
工作寄存器可作为一个专用单元在指令中出现,作为数据存储使用。
在某一时刻,CPU只能使用4组寄存器中的一组(称为当前寄存器),单片机复位后默认第0组寄存器,如需换用另外一组寄存器,可通过特殊功能寄存器PSW中RS0、RS1进行选择。
图2-27片内RAM区
2.位寻址区
位寻址区共16个单元,地址为从20H~2FH,这个区的单元既可以进行字节操作,更重要的是可以进行位操作。
其位地址分配如表2-6所示。
表2-6位寻址区的位地址
例2-6将26H单元中第l位清零。
方法一:
CLR26H.1
方法二:
CLR31H;31H为地址26H单元第1位
3.用户RAM区
用户RAM区共有80个单元,地址范围为30H~7FH,这个区可由程序员(用户)自行定义使用,一般把堆枝设置在该区域内。
知识3 特殊功能寄存器
MCS-51系统共有21个特殊功能寄存器(SFR),分布在数据存储器80H-FFH地址范围内,如表2-7所示。
表2-7特殊功能寄存器
1.累加器ACC
累加器A主要参与数据算术、逻辑运算及存放数据工作,许多指令均需累加器参与完成,使用频率极高。
2.B寄存器
B寄存器主要参与乘、除法运算,也可作为通用寄存器使用。
3.程序状态字寄存器PSW
PSW寄存器共有8位,用于存放程序运行的状态信息。
其中有些位是程序执行的结果,是由硬件自动置位的,而有些位是由软件设定的,PSW各位含义如表2-8所示。
表2-8PSW位标志
现对表中各位含义加以说明。
1)Cy-进位标志位。
在加(减)法运算中产生进位(借位),则Cy自动置1,否则Cy为0;有时Cy也作为位操作对象使用,如指令“M0VC,bit"。
2)AC-辅助进位标志。
在加(减)法运算中,若出现数据从低4位向高4位进位(或借位),则AC自动置1,否则AC为0。
3)F0-用户定义标志位,F0可由软件置位、复位。
4)RSl、RS0-当前寄存器组选择位,可通过软件设定当前寄存器组如表2-9所示。
5)0V-溢出标志位。
用于表示有符号数运算的溢出,由硬件置位。
6)P-一奇偶标志位,表示累加器A中1的个数的奇偶性:
若A中l的个数为奇数,则P为1,否则为0。
表2-9RSl、RS0对应寄存器组
4.堆找指针寄存器SP
堆枝在子程序调用或中断处理、时提供现场数据保护,使主程序执行子程序后能顺利返回。
堆枝有进技(数据存入堆顶)、出校(从堆枝中取出数据)两种操作。
进枝、出战遵循“先入后出,后入先出”原则,'一P就是用来指示技顶位置的寄存器。
单片机复位后,SP的值为07H,这样堆核区就会处于片内RAM的工作寄存器区,故在程序设计时应把SP值设置在30H以上,避开工作奇存器区。
例如:
表2-7中其他特殊功能寄存器在以后的内容中再展开讲解。
知识链接 LED旋转屏
网络上很流行一种叫P0VLED的LED旋转屏制作介绍,那些摇晃出的空中图案,漂浮在车轮上的动画,以及形态各异的时钟,一定给你留下深刻的印象。
图2-28示出了几幅旋转屏的图片,是否感到千奇百怪、创意无限呢?
在惊叹之余是否也想了解其中的奥秘及其工作原理?
其实,无论看到的LED旋转屏如何神奇,如何复杂,其工作原理都大同小异,就是一个晃动的LED跑马灯(也称LED流水灯)。
简单吧?
其实就是本项目学过的内容,下面介绍如何在跑马灯的基础上实现旋转屏效果。
1.初步领略旋转屏
首先介绍单片机硬件电路。
电路可参考圈2-16所示原理。
当然可以用单片机中任意一个I/O口来驱动8只LED。
图2-29所示是寸个旋转屏参考电路。
其中M54544AL是一只电机驱动集成电路,使电机正反向不停摆动,产生旋转效果。
程序编写思路:
写一个跑马灯的程序,但数据编码与通常跑马灯有所不同,如表2-10所示,表中阴影呈现“12"字样。
图2-28旋转屏演示图片
图2-29
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 项目二 单片机点亮LED 项目 单片机 点亮 LED