实验四
四、 源程序(仅实验三代码)
DATA SEGMENT DATA ENDS
STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK;基本框架
START: MOV AX,DATA MOV DS,AX MOV DX,283H ;8255控制寄存器端口地址283H MOV AL,10000000B ;工作方式为0
OUT DX,AL ;初始化8255
DIGITAL:MOV DX,28AH ;熄灭数码管
MOV AL,00H OUT DX,AL MOV DX,288H ;A口显示0 MOV AL,3FH OUT DX,AL MOV DX,28AH ;C口00000001(位码) MOV AL,01H OUT DX,AL MOV DX,28AH ; MOV AL,00H OUT DX,AL MOV DX,288H ;A MOV AL,06H OUT DX,AL MOV DX,28AH ;C MOV AL,02H OUT DX,AL MOV DX,28AH ; MOV AL,00H OUT DX,AL MOV DX,288H ;A MOV AL,5BH OUT DX,AL MOV DX,28AH MOV AL,04H ;C OUT DX,AL MOV DX,28AH ; MOV AL,00H OUT DX,AL MOV DX,288H ;A MOV AL,3FH OUT DX,AL MOV DX,28AH MOV AL,08H ;C OUT DX,AL MOV DX,28AH ; MOV AL,00H
熄灭数码管 口显示2 口00000010(位码)熄灭数码管 口显示1 口00000100(位码)熄灭数码管 口显示0 口00001000(位码) 熄灭数码管 OUT DX,AL
MOV AH,01H INT 16H
JNZ EXIT ;有键盘输入,退出 JMP DIGITAL
EXIT: MOV AX,4C00H INT 21H
CODE ENDS END START
五、 实验结果
数码管显示了学号的后四位“0210”如图所示。当键盘有按键输入时退出,数码管灭。
六、 实验总结
本次实验中控制数码管显示的主要有两个端口,A口和C口,C口控制哪一路数码管亮,A口控制一路数码管亮什么数字;工作方式的选择如下图所示,D7=1表示控制寄存器中存放的是工作方式选择字,工作在方式0,A、C均为输出,B口不使用,故AL为10000000B或10000010B均可。
七、 实验收获与心得体会
初步了解可编程并行接口8255的简单应用;在实验三中8255的工作方式选择字非常重要,要弄清A、C口为输入还是输出,其次在代码中设计按键退出模块,可以使得运行更加可靠。 学习了控制数码管显示的方法,即通过两路控制,一路负责扫描决定哪一路显示,一路负责决定显示什么数字。这种思路与数电实验中VHDL语言控制数码管有异曲同工之处,让我体会到了编程思想的相同之处。
【三.可编程定时器/计数8253实验】
实验八可编程定时器/计数器(8253/8254) 一、 实验目的
学习掌握8253用作定时器的编程原理;
二、 实验原理和内容
1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。
2.扩展部分:利用小键盘实现弹琴功能,并显示弹奏的乐谱。 注意:8253输入频率应小于2MHz。
三、 硬件接线图及软件程序流程图
1. 硬件接线图
2. 软件程序流程图
四、 源程序
DATA SEGMENT
FENPIN DW 0001H,3906,3472,3125,2932,2604,2344,2083,1953;分频比
DIGITAL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH;数码管 MUSIC DB 0,3,2,1,2,3,3,3,0,2,2,2,0,3,5,5,0,3,2,1,2,3,3,3,1,2,2,3,2,1,0,5,0,1,0 ;存放播放的乐曲音符
NUM DB 00H,070H,0B0H,0D0H,0E0H ;检测键盘输入(00h=00000000;070h=01110000;0b0h=10110000;0d0h=11010000;0e0h=11100000)
DATA ENDS
STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK
;延时子程序1