一、实验目的
*
初步学习和掌握
MCS-51
的体系结构和指令系统;
*
学习使用
Proteus
软件进行开发和仿真调试的过程;
*
学习使用汇编语言开发程序
二、实验设备
*
Proteus
仿真软件
三、实验内容
*
学习
MCS51
的基本体系结构
*
学习
Proteus
软件的基本使用
四、实验内容
开关量输入和数码管显示
*
在原理图中绘制四路开关输入、一个LED
和一个7
段数码管
*
开关可以选择“
SW-SPDT
”(单刀双掷)或者“SW-SPST
”(单刀单掷)。
*
7
段数码管可以选择“
7SEG-COM-*
”,
*
表示共阴极或者共阳极(以及颜色)。
*
开关和数码管需要连接到合适的
CPU
引脚上
将上面原理图看作是一个投币机的雏形,编写汇编程序,完成以下功能:
*
每个开关看作是一个投币口,取值为高,表示投入了对应数值的硬币。四个开关的取值分别
为
1
、
1
、
2
、
5
*
在数码管上显示已投币值总数
*
如果已投币值总数超过给定值(在程序中设定 ),则LED
发光管闪烁,否则不亮
五、实验步骤
仿真电路连接
![](https://img-blog.csdnimg.cn/direct/0aa804e7c6cc4beba7c7563a698d1d78.jpeg)
参考代码
$NOMOD51
$INCLUDE (8051.MCU)
; Reset Vector
org 0000h
jmp Start
org 0100h
Start:
MOV DPTR, #TABLE;将TABLE的首地址送到DPTR寄存器
begin:
MOV A, #0
MOV C, P1.0
JNC LABEL1;若C为0则跳转到判断下一个开关
ADD A, #1;开关SW1对应取值为1
LABEL1:
MOV C, P1.1
JNC LABEL2
ADD A, #1;开关SW2对应取值为1
LABEL2:
MOV C, P1.2
JNC LABEL3
ADD A, #2;开关SW3对应取值为2
LABEL3:
MOV C, P1.3
JNC LABEL4
ADD A, #5;开关SW4对应取值为5
LABEL4:
MOV R1, A;先将总数保存到R1
CLR CY
SUBB A, #6
JC NEXT5;若总数小于6(发生借位)则跳转到NEXT5
CPL P1.7;取反,达到闪烁的效果
NEXT5:
MOV A, R1
MOVC A, @A+DPTR;查表
MOV P0, A;输出到P0口
CALL DELAY
jmp BEGIN
DELAY:
MOV R6, #0FFH
DELAY_1:
MOV R7, #0FFH
DJNZ R7, $;R7减一,若不为零则继续执行该指令
DJNZ R6, DELAY_1
RET
TABLE:
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
;====================================================================
END