⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recorder final.asm

📁 本来是不想传此代码的
💻 ASM
字号:
;DIGITAL RECORDER DESIGN
;Use nested procedure to program
;Press 'r' to record.
;Press 'p' to play.
;Press ESC to quit.
;72H is an ASCII of 'r'
;70H is an ASCII of 'p'
;1BH is an ASCII of ESC key
;Set flag BL.When BL=1,it means you can play it which you had recorded before,
;otherwise it'll display a message of WARNING
;11*******************************************************************************
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;ADC0809的IN2通道的地址

      RECMSG1 DB "Press 'r' to record.",0dh,0ah,'$'
      RECMSG2 DB 0dh,0ah,"Record complete!Congratulation!",0dh,0ah,0dh,0ah,'$'
      PLYMSG1 DB "Press 'p' to play.",0dh,0ah,'$'
      PLYMSG2 DB 0dh,0ah,"Play complete!Congratulation!",0dh,0ah,0dh,0ah,'$'
      EXITMSG DB "Press ESC to quit.",0dh,0ah,'$'
      WARNMSG DB 0dh,0ah,"Haven't record anything yet!",0dh,0ah,"Or wrong input character!",0dh,0ah,0dh,0ah,'$'

      BUF DB 60000 DUP(?)
DATA ENDS
;30*******************************************************************************
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
;-------------------------------------------------------------------------------
MAIN PROC FAR
START:
      PUSH DS
      SUB AX,AX
      PUSH AX
      SUB BX,BX
      PUSH BX
;41
      MOV AX,DATA
      MOV DS,AX
NOTICE:
      MOV DX,OFFSET RECMSG1;显示录音提示"Press 'r' to record."
      MOV AH,09H
      INT 21H
      MOV DX,OFFSET PLYMSG1;显示放音提示"Press 'p' to quit."
      MOV AH,09H
      INT 21H
      MOV DX,OFFSET EXITMSG;显示退出提示"Press ESC to quit."
      MOV AH,09H
      INT 21H
CONTROL:
      MOV AH,1;键盘输入并回显
      INT 21H
      CMP AL,72H;小写'r'的ASCII码
      JE REC;若是'r'则转AD
      CMP AL,70H;小写'p'的ASCII码
      JE  FLAG
      CMP AL,1BH;ESC键的ASCII码
      JE EXIT;若是ESC键,则退出
      JNE WARNING
REC:
      CALL RECORDING;调用录音子程序
      MOV DX,OFFSET RECMSG2;显示录音完毕提示Record complete!Congratulation!
      MOV AH,09H
      INT 21H
      MOV BL,1;BL=1表明程序已经进行了录音,可以执行放音,否则显示WARNING信息
      ;MOV AL,0;AL清零
      JMP NOTICE
FLAG:
      CMP BL,1;判断BL是否为1
      JE PLY;若是1,则转PLAY
      JNE WARNING
PLY:
      CALL PLAY;调用放音子程序
      MOV DX,OFFSET PLYMSG2;显示放音完毕提示Play complete!Congratulation!
      MOV AH,09H
      INT 21H
      JMP NOTICE
WARNING:
      MOV DX,OFFSET WARNMSG
      MOV AH,09H
      INT 21H
      ;显示警告信息Haven't record anything yet!Or wrong input character!
      JMP NOTICE
EXIT:
      MOV AH,4CH
      INT 21H
      RET
MAIN ENDP
;94-------------------------------------------------------------------------------
RECORDING PROC NEAR;录音子程序
      PUSH SI
      PUSH AX
      PUSH CX
      PUSH DX

      MOV SI,OFFSET BUF
      MOV CX,60000
AD:
      MOV DX,io0809a;ADC0809IN2通道地址29ah
      OUT DX,AL;启动一次AD转换
      CALL DELAY;调用延时子程序
      IN AL,DX
      MOV [SI],AL
      INC SI
      LOOP AD

      POP DX
      POP CX
      POP AX
      POP SI
      RET
RECORDING ENDP
;118-------------------------------------------------------------------------------
PLAY PROC NEAR;放音子程序
      PUSH DI
      PUSH AX
      PUSH CX
      PUSH DX

      MOV DI,OFFSET BUF
      MOV CX,60000
      MOV DX,io0832a;DAC0832的入口地址
DA:
      MOV AL,[DI]
      OUT DX,AL
      CALL DELAY
      INC DI
      LOOP DA

      POP DX
      POP CX
      POP AX
      POP DI
      RET
PLAY ENDP
;141-------------------------------------------------------------------------------
DELAY PROC NEAR;延时子程序
      PUSH AX
      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
      POP AX
      RET
DELAY ENDP
;166-------------------------------------------------------------------------------
CODE ENDS
;*******************************************************************************
      END START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -