📄 recorder beta.asm
字号:
DATA SEGMENT
ioport equ 0dd80h-280h
io8253a equ ioport+280h;8253的A口
io8253b equ ioport+283h;8253的控制字
io8255a equ ioport+288h;8255的A口
io8255b equ ioport+28bh;8255的控制字
io0832a equ ioport+290h;DAC0832
io0809a equ ioport+29ah;ADC0809IN2
TIP1 DB 0dh,0ah,"播放开始……",0dh,0ah,'$'
BUF DB 60000 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AH,6;判断是否有键按下
MOV DL,0FFH
INT 21H
JE AD;无键按下则转AD进行录音
AD:
MOV SI,OFFSET BUF
MOV CX,60000
CONAD:
MOV DX,io0809a;ADC0809IN2
OUT DX,AL;启动AD转换
CALL DELAY;调用延时
IN AL,DX
MOV [SI],AL
INC SI
LOOP CONAD
MOV DX,OFFSET TIP1;显示录音完毕提示"播放开始……"
MOV AH,09H
INT 21H
MOV AX,0
MOV DX,0
MOV AH,6
MOV DL,0FFH
INT 21H
JE DA
DA:
MOV SI,OFFSET BUF
MOV CX,60000
CONDA:
MOV DX,io0832a;DAC0832的A口
MOV AL,[SI]
OUT DX,AL
CALL DELAY
INC SI
LOOP CONDA
DELAY PROC NEAR;延时子程序
PUSH DX
MOV DX,io8253b;8253的控制字
MOV AL,00010000B;计数器0以方式0工作
OUT DX,AL
MOV DX,io8253a;8253的A口
MOV AL,200
OUT DX,AL
MOV DX,io8255b;8255的控制字
MOV AL,10010000B;8255A方式0,A口输入
OUT DX,AL
MOV DX,io8255a;8255的A口地址
CHKPA0:
IN AL,DX
TEST AL,00000001B;检查PA0的状态
JZ CHKPA0
POP DX
RET
DELAY ENDP
EXIT:
MOV AH,4CH
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -