项目2 灯光闪烁

上传人:kms****20 文档编号:41453774 上传时间:2018-05-29 格式:DOCX 页数:8 大小:121.36KB
返回 下载 相关 举报
项目2   灯光闪烁_第1页
第1页 / 共8页
项目2   灯光闪烁_第2页
第2页 / 共8页
项目2   灯光闪烁_第3页
第3页 / 共8页
项目2   灯光闪烁_第4页
第4页 / 共8页
项目2   灯光闪烁_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《项目2 灯光闪烁》由会员分享,可在线阅读,更多相关《项目2 灯光闪烁(8页珍藏版)》请在金锄头文库上搜索。

1、项目 2 灯光闪烁学习目标及要求1学用程序方框图;2重点掌握 MOV、LCALL、LJMP、DJNZ、RET 等指令(12 条) ;3了解 ORG、END 伪指令的用法;4初步理解单片机内部结构资源:工作寄存器(R0R7) ; 5掌握软件延时程序的编程方法;(难点)6理解机器周期的相关概念。示范与模仿 “灯光闪烁”操作任务 如图 2-5 所示:在 P1.0 端口上接一个发光管 L1,使 L1 在不停地一亮一灭;一亮一灭的时间间隔为 0.2 秒。图 2-5“灯光闪烁”硬件电路操作步骤实验箱的使用与 Keil 软件的基本使用同前,不在重复。统板上硬件连线:把“单片机系统”区域中的 P1.0 端口用

2、导线连接到“八路发光二极管指示模块”区域中的 L1 端口上。编写汇编源程序:;“灯光闪烁”汇编源程序-dgss.asmORG 00 ;新涉及的伪指令START:SETB P1.0LCALL DELAY ;新涉及的指令CLR P1.0LCALL DELAY LJMP START ;新涉及的指令DELAY:MOV R5,#20;新涉及的指令D1:MOV R6,#20D2:MOV R7,#248 DJNZ R7,$ ;新涉及的指令DJNZ R6,D2DJNZ R5,D1 RET ;新涉及的指令END ;新涉及的伪指令编译、连接、调试与运行,并观察实际结果。项目 2-2相关知识与技能点1、程序中所涉及

3、的新指令(参照“MCS-51 汇编指令简表” )新指令指令格式:LCALL addr16功能:控制转移类指令;是长调用子程序指令,可表示为 addr16PC;字节数为 3,周期数为 2。说明:addr16 为子程序起始地址(又叫入口地址) 。PC 是单片机中的一个 16 位程序计数器,里面存放的是将要执行指令的地址,又叫程序指针。LCALL addr16 执行过程见图 2-6。图 2-6 调用子程序示意图 该指令为程序存储器 64KB 地址范围内的调用子程序指令,子程序可在64KB 地址空间的任一处。堆栈:实际上就是数据存储器(RAM)里的一块,只不过存取数据时有个特点,即“先进去的数据后出来

4、,后进去的数据先出来” ,数据是一个压着一个堆起来的。上面的数据不取出,下面的数据也出不来。类似的指令有:ACALL。指令格式:ACALL addr11功能:控制转移类指令;是短调用子程序指令,可表示为 addr11PC;字节数为 2,周期数为 2。说明:基本作用同 LCALL addr16,只是该指令为 2KB 地址范围内的调用子程序指令,子程序入口地址距当前 PC 不得超过 2KB 地址范围。注:在使用调用子程序指令时,如不清楚地址范围,可以全用 LCALL 指令,功能是一样的,地址范围是最大的,只是多用一个字节的程序存储空间。而在实际编程时,其子程序的入口地址往往是用一个标号来实现,如本

5、程序中的DELAY 标号,而不用管它的具体地址值是多少。指令格式:RET功能:控制转移类指令;是子程序返回指令;字节数为 1,周期数为 2。说明:每个子程序必须以 RET 指令结束。其作用是从堆栈中自动取出断点的地址值送到 PC,从子程序返回到主程序。指令格式:Ljmp addr16功能:控制转移类指令;是一个长转移指令,可表示为 addr16PC;字节数为 3,周期数 2。说明:该指令被执行后,其后的 addr16 地址值送到 PC,然后,程序跳转到 addr16 处去执行。跳转范围为 64KB 程序存储器的全部地址。类似的指令还有:AJMP、SJMP。指令格式:Ajmp addr11功能:

6、控制转移类指令;是一个短转移指令,可表示为 addr11PC;字节数为 2,周期数 2。说明:功能同 LJMP,只是用于 2KB 地址范围内的转移。指令格式:Sjmp rel功能:控制转移类指令;是一个无条件相对转移指令,可表示为PC+relPC;字节数为 2,周期数 2。说明:rel 为相对当前地址的用一个有符号字节数表示的偏移量,其偏移范围为-127+127,转移可以向前转移(目的地址小于当前地址) ,也可向后转移(目的地址大于当前地址) 。注:在使用转移指令时,如不清楚地址范围,可以全用 LJMP 指令,功能是一样的,地址范围是最大的,只是多占用一个字节的程序存储空间。而在实际编程时,其

7、目的地址(不论是 16 位地址,还是 11 位地址或是 rel)往往是用一个标号来实现,如本程序中的 START 标号,而不用管它的具体地址值是多少。指令格式:Djnz Rn,rel功能:控制转移类指令;是一个条件转移指令,可表示为 Rn-1Rn,Rn0 时,则 PC+relPC;字节数为 2,周期数 2。说明:该指令是寄存器自动减 1 不为零转移的指令;Rn 为单片机中的工作寄存器(R0R7)。该指令的作用是先对 Rn 中的值自动减 1,然后判断 Rn 中的值是否为零?如果为零,程序则顺序往下执行;如果不为零,程序则转移到目标地址处执行。类似的指令有:指令格式:Djnz direct,rel

8、功能:控制转移类指令;是一个条件转移指令,可表示为(direct)-1(direct) , (direct)0 时,则 PC+relPC;字节数为 3,周期数 2。说明:direct 是一个 8 位直接地址, (direct)是表示这个地址中的字节内容(数值) ;该指令的作用是直接寻址单元内容减 1 不为零转移,功能同上一条指令类似。指令格式:MOV Rn,#data功能:数据传送类指令;为立即数送寄存器指令,其功能可表示为dataRn,字节数为 2,周期数为 1。说明:该指令是将立即数 data 送寄存器 Rn。指令中的操作数我们给出了三种方式:#data(立即数) 、direct(直接地址

9、)和 Rn(工作寄存器)。与这三种操作数有关的 MOV 指令还有:MOV direct,Rn;MOV Rn,direct;MOV direct2,direct1。分述如下:指令格式:MOV direct,Rn功能:数据传送类指令;为寄存器送直接寻址单元指令,其功能表示为Rn(direct);字节数为 2,周期数为 2。说明:该指令是将工作寄存器里的数送直接寻址单元。指令格式:MOV Rn,direct功能:数据传送类指令;为直接寻址单元送寄存器指令,其功能表示为(direct)Rn;字节数为 2,周期数为 2。说明:该指令是将直接寻址单元里的数送工作寄存器。指令格式:MOV direct2,d

10、irect1功能:数据传送类指令;为直接寻址单元 1 送直接寻址单元 2 指令,其功能表示为(direct1)(direct2);字节数为 3,周期数为 2。说明:该指令是将直接寻址单元 1 里的数送直接寻址单元 2。注:由于 MOV 在这些指令中最大只能传送一个字节的数,所以传送的最大数不能大于 255(十进制)。伪指令起始指令:ORG nn功能:为机器汇编时,指示此语句后面的程序或数据块以 nn 为起始地址连续存放在程序存储器中。说明:nn 为起始地址值。如在本程序例中:ORG 00START:SETB P1.0 指示 START 标号的指令地址从程序存储器的 00 地址开始连续存放。汇编

11、结束指令:END功能:指示源程序段结束。说明:通常程序都是以 END 伪指令作结束指令。如本程序例:.END 伪指令不是控制单片机操作的指令,因此不是可执行指令。它只是在机器自动把源程序翻译成机器语言时,必须为汇编程序提供辅助信息的一些指令。2、程序的编程思路与解读程序方框图:编程时,首先要养成理清编程思路的好习惯,就是在具体编写程序前,要根据任务的要求,构画出程序的主架构及关系,即程序方框图(由一些方框、菱形和箭头线组成) 。解读程序也是这样。本程序方框图见图2-7。图 2-7 “灯光闪烁”程序方框图 程序解读:整个程序分为两大部分:主程序段和延时子程序段。主程序段:ORG 00 ;伪指令,

12、指示后面的程序段起始地址从 00 开始START:SETB P1.0 ;P1.0 输出”1”,L1 灯灭LCALL DELAY ;调用标号为 DELAY 的延时子程序, 延时0.2 秒CLR P1.0 ;P1.0 输出”0”,L1 灯亮LCALL DELAY ;调用标号为 DELAY 的延时子程序, 延时 0.2秒LJMP START ;跳转到标号为 START 处的指令循环执行延时子程序段:延时 0.2 秒DELAY:MOV R5,#20;将十进制的立即数 20 送到 R5 工作寄存器D1:MOV R6,#20 ;将十进制的立即数 20 送到 R6 工作寄存器D2:MOV R7,#248 ;

13、将十进制的立即数 248 送到 R7 工作寄存器DJNZ R7,$ ;R7 减 1 不为零转移到本指令地址(用$表示)DJNZ R6,D2 ;R6 减 1 不为零转移到标号 D2 处DJNZ R5,D1 ;R5 减 1 不为零转移到标号 D1 处RET ;子程序结束,返回到主程序整个程序运行的结果,实现了 L1 灯不停地亮和灭,其间隔为 0.2 秒。3、延时程序的设计方法延时程序是如何设计的呢?下面具体介绍其原理:如图 2-5 所示的石英晶体为 12MHz,因此,1 个时钟振荡周期为1/f=1/12MHz 秒=1/(12106)秒。一个机器周期=12 个时钟周期=121/12M=1/10000

14、00 秒=1 微秒。则延时子程序:;机器周期数 所用时间DELAY: MOV R5,#20 ; 2 2usD1:MOV R6,#20 ; 2 2usD2:MOV R7,#248 ; 2 2usDJNZ R7,$ ; 2 2us 重复执行 248 次DJNZ R6,D2 ; 2 2us 重复执行 20 次DJNZ R5,D1 ; 2 2us 重复执行 20 次执行完后,所用的时间为:第 4 条指令执行完所用的时间为:2248=496(微秒)=0.496ms;第 3 条至第 5 条指令重复执行 20 次所用时间为:20(2+496+2)=10000微秒=10ms;第 2 条至第 6 条指令重复执行

15、 20 次所用时间为:20(2+10000+2)=200080(微秒)=200.08ms;再加上第 1 条指令所用的时间,因此,上面的延时程序总时间为 200.082 ms,近似为 0.2 秒。套用上述编程格式,当 R7248 时,其延时公式为:t=0.5msR6R5。根据不同的延时要求,适当调整 R5 与 R6 的值的乘积即可。如本程序要求延时 0.2 秒200ms,即 0.5msR6R5=200ms,则R5R6=400。R5=10,R6=40 可以实现;R5=4,R6=100 也可以实现。在实际延时编程时,如需要的延时时间较大,可增加工作寄存器;如需要的延时时间较小,也可减少工作寄存器,灵

16、活应用。注:MOV 传送的最大数不能超过 255。4、工作寄存器(R0R7)工作寄存器在内部数据存储器中,见 MCS-51 内部 RAM 存储器结构及寄存器和 RAM 地址对照表。数据缓冲区地址范围 30H7FH位寻址区(007F)地址范围 20H2FH工作寄存器区 3(R0R7)地址范围18H1FH工作寄存器区 2(R0R7)地址范围10H17H工作寄存器区 1(R0R7)地址范围08H0FH工作寄存器区 0(R0R7)地址范围00H07HMCS-51 内部 RAM 存储器结构0 区1 区2 区3 区00HR008HR010HR018HR001HR109HR111HR119HR102HR20AHR212HR21AHR

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号