本实验用单片机实现用八位数码管显示0-7。目的是:1、掌握8051 CPU的子程序调用的相关指令; 2、掌握子程序调用的汇编编程写法; 3、了解数码管动态显示的方法。 1、子程序概述 子程序是指能被主程序或其它程序调用,具有独立完备功能的 程序段。微控制器系统的应用程序通常包含多个子程序。子程序的运用,能够提高编程效率、实现程序模块化,也便于程序的继承。调用子程序的程序称为主程序或调用程序。 断点地址:子程序调用指令的下一条指令地址; 子程序地址:子程序第一条指令的地址。 子程序调用:CALL指令自动将断点地址压入堆栈保护,然后将子程序地址送PC,实现子程序的调用; 子程序返回:子程序的最后一条RET指令,将使堆栈顶部的断点地址弹出到PC,实现子程序的返回。
子程序嵌套:在子程序中,调用其它子程序的情况,称为子程序嵌套调用 2、子程序编写的注意点 (1)子程序的第1条指令必须有标号,表示该子程序的名称,也是子程序的符号地址。要有子程序的功能说明。 (2)要明确子程序的调用条件和出口状态 • 调用条件:调用子程序需要准备的参数(如要处理的数,或存放的寄存器或内存地址等); • 出口状态:调用子程序后的结果(结果形式或存放地址等)。 (3)保护现场和恢复现场 保护现场:子程序前部,将不允许被破坏的内容保护起来; 恢复现场:子程序返回前,将保护的内容恢复到保护前的状况; 要注意堆栈的“先进后出”操作规则,以保证现场保护和恢复的正确。 (4)子程序的正确返回 子程序的最后一条指令必须是RET指令。 子程序中,对堆栈的入栈和出栈操作次数必须相等,以保证返回后堆栈指针SP的值与调用时一致。
3、数码管简介 七段数码管是电子开发过程中常用的输出显示设备。在实验系统中使用的是两个四位一体、共阴极型七段数码管。其单个静态数码管如下图4-1所示。 图4-1 静态七段数码管 由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。反之则不亮。四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- ORG 0000H
- LJMP MAIN
- ORG 0100H
- MAIN:
- MOV R1,#0FEH
- MOV R2,#00H
- MOV R3,#08H
- MOV A,#00H
- LOOP:
- MOV DPTR,#TABLE
- MOV A,R2
- MOVC A,@A+DPTR
- MOV R0,A
- INC R2
- MOV P3,R1
- MOV P2,R0
- LCALL DELAY
- MOV A,R1
- RL A
- MOV R1,A
- DJNZ R3,LOOP
- LJMP MAIN
- DELAY1ms:PUSH 30H
- MOV 30H,#0F8H ;F8
- DD:NOP
- NOP
- DJNZ 30H,DD
- POP 30H
- RET
- DELAY:
- MOV R5,#255
- D1:MOV R6,#255
- D2:NOP
- NOP
- DJNZ R6,D2
- DJNZ R5,D1
- RET
- TABLE:DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH,77H,7cH,39H,5eH,79H,71H
- END
复制代码 仿真代码51hei附件下载:
实验六工程.7z
(52.94 KB, 下载次数: 11)
|