北邮微机原理硬件实验报告完整版 下载本文

内容发布更新时间 : 2024/12/22 22:46:16星期一 下面是文章的全部内容请认真阅读。

一、 实验目的

学习掌握8253用作定时器的编程原理;

二、 实验原理和内容

1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。

2.扩展部分:利用小键盘实现弹琴功能,并显示弹奏的乐谱。 注意:8253输入频率应小于2MHz。

三 硬件接线图及软件程序流程图

1 硬件接线图

2 软件程序流程图

开始 初始化8254 8255,A口接数码管显示,B口位选数码管,C口接小键盘输入 扫描键盘 判断输入 输入为0 输入1~8 输入为9 播放音乐,数码管显示相应的音符 发出对应的音,数码管显示音符 熄灭数码管,返回dos 否 是否播放结束 按键是否弹起 是 是 停止发音,初始化8254 结束

四 源程序

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,1,2,3,1,1,2,3,1,0,3,4,5,0,3,4,5,0,5,6,5,4,3,1,0,5,6,5,4,3,1,0,1,5,1,0,1,5,1,0 ;存放播放的乐曲音符

NUM DB 00H,070H,0B0H,0D0H,0E0H ;检测键盘输入 DATA ENDS

STACK SEGMENT STACK 'STACK'

DB 100 DUP(?) STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

;延时子程序

DELAY PROC NEAR PUSH CX

MOV CX,100H WAIT0: LOOP WAIT0 POP CX RET DELAY ENDP

;延时子程序2

DELAY1 PROC NEAR PUSH CX

MOV CX,0FFFFH WAIT1: LOOP WAIT1 POP CX RET DELAY1 ENDP

;获取键盘输入值的子程序 KEY PROC NEAR

PUSH AX ;保护现场 PUSH CX PUSH DX MOV CX,01H

CHECK: MOV DX,28AH ;C口地址给DX MOV BX,OFFSET NUM ADD BX,CX MOV AL,[BX] OUT DX,AL ;防抖

IN AL,DX ;判断是否有键盘按下 MOV AH,AL CALL DELAY IN AL,DX CMP AL,AH

JNZ CHECK ;不相等说明为抖动,重新检测 ;判断按下的列

AND AL,0FH

CMP AL,0FH JZ NEXT CMP AL,0EH JZ NEXT1 CMP AL,0DH JZ NEXT2 CMP AL,0BH JZ NEXT3 MOV BX,01H JMP GOT

NEXT: INC CX ;修改变量扫描下一行 CMP CX,05H JNZ JUMP1 MOV CX,01H JUMP1: JMP CHECK NEXT1: MOV BX,04H JMP GOT NEXT2: MOV BX,03H JMP GOT NEXT3: MOV BX,02H ;计算按下键盘的数值 GOT: SUB CX,01H MOV AL,CL MOV DL,04H MUL DL ADD BL,AL

SUB BL,01H ;此时BX中所存即为对应的偏移量 POP DX ;恢复现场 POP CX POP AX RET KEY ENDP ;主程序

START: MOV AX,DATA MOV DS,AX ;8253初始化 MOV DX,283H MOV AL,36H OUT DX,AL ;8255初始化

MOV DX,28BH

MOV AL,81H ;C口输入 OUT DX,AL

MOV DX,289H ;B口位选数码管

MOV AL,01H OUT DX,AL ;扫描键盘

LOOP1: CALL KEY

CMP BX,0 ;按0播放音乐 JZ PLAY0

CMP BX,9 ;按9退出 JZ EXIT

;按1~8发出对应音

MOV CX,BX

MOV BX,OFFSET DIGITAL ;数码管显示音符 ADD BX,CX MOV AL,[BX]

MOV DX,288H ;A口输出 OUT DX,AL ;播放该音符

MOV BX,OFFSET FENPIN MOV AX,CX ADD AX,AX ADD BX,AX

;计数,先低八位后高八位 MOV AX,[BX] MOV DX,280H OUT DX,AL MOV AL,AH OUT DX,AL CALL DELAY1 CALL DELAY1

MOV DX,28AH ;C口输入 IN AL,DX ;检测键盘是否弹起

MOV AH,AL LOOP2: CALL DELAY IN AL,DX CMP AL,AH JZ LOOP2

;初始化8253,停止播放音乐 MOV AX,0H MOV DX,283H MOV AL,36H

OUT DX,AL

JMP LOOP1