微机原理硬件实验·报告
MOV CX,0FFFFH
L: MOV AX,50
WA: DEC AX
JNZ WA LOOP L POP CX
RET
DELAY ENDP START:
MOV AX,DATA MOV DS,AX MOV AL,80H MOV DX,28BH OUT DX,AL
MOV DX,283H MOV AL,00111110B
OUT DX,AL
;光靠设置CX的值延时还不够长
;嵌套循环,总循环长度为AX*CX
;提取原CX值
;初始化8255
;初始化8254
第页25
微机原理硬件实验·报告
BEGIN:
MOV BX,OFFSET BUF
;载入音谱
MOV CX,LTH
PRO:
MOV AL,[BX] ADD BX,1
CMP AL,31H JZ N1
CMP AL,32H JZ N2 CMP AL,33H JZ N3 CMP AL,34H JZ N4 CMP AL,35H JZ N5
CMP AL,36H
;根据音谱长度设定循环变量
;载入音符
;准备载入下一个音符
;通过比较ASCII码,读取单个音符;跳往DO
第页26
微机原理硬件实验·报告
JZ N6 CMP AL,37H JZ N7 CMP AL,38H
JZ N8
PRO2:
LOOP PRO
JMP FIN
N1: JMP DO
N2: JMP RE N3: JMP MI N4: JMP FA N5: JMP SO N6: JMP LA N7: JMP SII N8: JMP DOI DO:
MOV DX,280H 音乐播完
由于程序过长,此处设置跳转中转处; 设置零号计数器的初始值
第页27
;;
微机原理硬件实验·报告
MOV AL,42H OUT DX,AL
MOV AL,0FH OUT DX,AL
MOV DX,28AH MOV AL,00H OUT DX,AL
MOV DX,288H MOV AL,06H
OUT DX,AL MOV DX,28AH
MOV AL,08H OUT DX,AL CALL DELAY JMP PRO2
RE: MOV DX,280H
; 42H是通过公式算得的初始值低8位
;高8位
;数码管清零
;给数码管送出1的段码
;给数码管送出位码(最高位显示)
;调用延时子程序,以免乐谱播放过快
;准备接收下一个音符
;以下代码解释雷同
第页28
微机原理硬件实验·报告
MOV AL,90H
OUT DX,AL MOV AL,0DH OUT DX,AL
MOV DX,28AH MOV AL,00H OUT DX,AL
MOV DX,288H MOV AL,5BH
OUT DX,AL MOV DX,28AH
MOV AL,08H OUT DX,AL CALL DELAY
JMP PRO2
MI: MOV DX,280H
MOV AL,34H
第页29