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

📄 rrecorder.asm

📁 基于TPC-H通用微机接口实验系统的数字录音机源码.具有无限时录放音和波形显示的功能.
💻 ASM
字号:
;====================================栈段==============================================
       STACK  SEGMENT
              DW        64 DUP(?)
       STACK  ENDS
;======================================================================================


;====================================数据段============================================
        DATA  SEGMENT
       SFILE  DB        'SDATA.DAT','$';
      BUFFER  DB        60000 DUP(?);对应为12s的录音数据
        MESS  DB        'PLEASE ENTER CHOICE BY LETTER TO INPUT',0DH,0AH,0AH	
;------------------------------------菜单内容------------------------------------------
              DB        20 DUP(' '),'S-START 12s RECORDING',0DH,0AH
              DB        20 DUP(' '),'P-PLAY THE 12s RECORD',0DH,0AH
              DB        20 DUP(' '),'B-BEGIN NO TIME LIMIT RECORDING',0DH,0AH
              DB        20 DUP(' '),'R-READ NO TIME LIMIT RECORD',0DH,0AH
              DB        20 DUP(' '),'I-INTRODUCTION',0DH,0AH
              DB        20 DUP(' '),'E-EXIT',0DH,0AH,'$'
;------------------------------------提示信息------------------------------------------
       NAMEC  DB        'Press Any Key To Start Recording$'
     ADDRESS  DB        'Press Any Key To Start Playing$'
       INTRO  DB        '2006 All Right Reserved @ By Roger Wong$'
         LED  DB        3FH,06H,5BH,4FH,66H,6DH,7DH,07H
              DB        7FH,67H,77H,7CH,39H,5EH,79H,71H
        FILE  DB        'DATA.DAT','$';不限时录音所存入的文件名
        DATA  ENDS
;======================================================================================


;=================================== 代码段 ===========================================
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA,SS:STACK
      START:
	     ;**********************屏幕初始化************************
              MOV       AX,DATA
              MOV       DS,AX
              MOV       ES,AX
              MOV       AX,0012H;640*480 16色图形(EGA)
              INT       10H
	     ;**********************设置中断向量**********************
              MOV       AX,CS
              MOV       DS,AX
              MOV       DX,OFFSET INT7;中断向量
              MOV       AX,250FH;设置中断向量,中断类型号为0F
              INT       21H
              MOV       AX,DATA
              MOV       DS,AX
              IN        AL,21H
	     ;**********************实现菜单**************************
     FOLLOW:  CALL      LCREEN
              MOV       DH,08;光标所在行
              MOV       DL,20;光标所在列
              CALL      POCREEN
              MOV       DX,OFFSET MESS;显示菜单
              MOV       AH,9
              INT       21H
              MOV       DH,08;光标所在行
              MOV       DL,59;光标所在列
              CALL      POCREEN
      INPUT:  MOV       AH,7;键盘输入(无回显)
              INT       21H
              CMP       AL,'S';限时录音
              JNE       NOTS
              MOV       DX,OFFSET NAMEC
              CALL      DISPLA
              CALL  	RECOR
              JMP       FOLLOW
       NOTS:  CMP       AL,'P'
              JNE       NOTP
              MOV       DX,OFFSET ADDRESS
              CALL      DISPLA
	      MOV 	CX,60000;限时放音
	      CALL	PLAY
              JMP       FOLLOW
       NOTP:  CMP       AL,'I'
              JNE       NOTI
              MOV       DX,OFFSET INTRO;显示说明
              CALL      DISPLA
              JMP       FOLLOW
       NOTI:  CMP       AL,'B'
              JNE       NOTW
              MOV       DX,OFFSET NAMEC
              CALL      DISPLA
	      ;**********建立输出文件,将数据循环输出到文件***********
              MOV       DX,OFFSET FILE          ;文件名
              MOV       AH,3CH
              MOV       CX,0        ;文件属性
              INT       21H
              PUSH      AX          ;文件代号
          X:  CALL      RECOR
              MOV       BX,CX
              MOV       CX,60000
              SUB       CX,BX
	      ;*********************输出数据**************************
              MOV       DX,OFFSET BUFFER
              POP       BX          ;文件代号
              PUSH      BX
              MOV       AH,40H;写文件
              INT       21H
              CMP       CX,60000
              JZ        X
              POP       BX
              MOV       AH,3EH;关闭文件
              INT       21H
       BACK:  JMP       FOLLOW
    TOINPUT:  JMP       INPUT
       NOTW:  CMP       AL,'R'
              JNE       NOTR
              MOV       DX,OFFSET ADDRESS
              CALL      DISPLA
	      ;**************打开输入文件,并循环播放*****************
              MOV       DX,OFFSET FILE          ;文件名
              MOV       AL,0        ;AL=0表示读
              MOV       AH,3DH      ;打开文件
              INT       21H
              PUSH      AX
          Y:  POP       BX;BX中为文件代号
              MOV       DX,OFFSET BUFFER;数据缓冲区地址
              MOV       CX,60000;读取的字节数
              MOV       AH,3FH;读文件
              INT       21H
              PUSH      BX
              MOV       CX,AX
              PUSH      AX
              CALL      PLAY
              POP       AX
              CMP       AX,60000
              JZ        Y
              POP       BX
              MOV       AH,3EH;关闭文件
              INT       21H
              JMP       BACK
       NOTR:  CMP       AL,'E'
              JNE       TOINPUT
              CALL      LCREEN
              MOV       DX,0
              CALL      POCREEN
              MOV       AX,0003H;80*25彩色方式
              INT       10H
              MOV       AH,4CH
              INT       21H
;-------------------------------中断服务程序-------------------------------
       INT7:  PUSH      AX
              CMP       CX,5000
              JB        NSUB
              SUB       CX,5000;快进
	      ADD 	SI,5000
       NSUB:  MOV       AL,20H
              OUT       20H,AL
              POP       AX
              IRET
;--------------------------------------------------------------------------


;------------------------------显示信息子程序------------------------------
      DISPLA  PROC
              PUSH      DX
              CALL      DELAY
              CALL      LCREEN
              MOV       DH,12
              MOV       DL,20
              CALL      POCREEN;设置光标位置
              POP       DX
              MOV       AH,9
              INT       21H
              MOV       AH,7
              INT       21H
              RET
      DISPLA  ENDP
;--------------------------------------------------------------------------


;-----------------------------屏幕初始化程序-------------------------------
      LCREEN  PROC
              MOV       AH,06H;屏幕初始化
              MOV       AL,00H;整个窗口空白
              MOV       CX,0;左上角行列号均为0
              MOV       DH,29;右下角行号为29
              MOV       DL,79;右下角列号为79
              MOV       BH,00H;卷入行属性
              INT       10H
              RET
      LCREEN  ENDP
;--------------------------------------------------------------------------


;-----------------------------置光标程序-----------------------------------
     POCREEN  PROC
              MOV       AH,02H;置光标位置
              MOV       BH,00;BH=页号
              INT       10H
              RET
     POCREEN  ENDP
;--------------------------------------------------------------------------


;-----------------------------软件延时子程序-------------------------------
       DELAY  PROC
              PUSH      CX
              MOV       CX,0
     DELAY1:  LOOP      DELAY1
              POP       CX
              RET
       DELAY  ENDP
;--------------------------------------------------------------------------


;-----------------------------录音程序-------------------------------------
	;
       RECOR  PROC      NEAR
              CALL      LCREEN
              MOV       CX,0
              MOV       AL,10
              MOV       AH,0CH;写像素
	     ;***************在屏幕中间一行画出一条线**********************
              MOV       DX,240;行
      PAINT:  INT       10H
              INC       CX
              CMP       CX,640
              JNZ       PAINT
	     ;*********************采集数据********************************
              MOV       DI,OFFSET BUFFER
              MOV       CX,60000
              CLD
              MOV       BX,0
        REC:  MOV       DX,2B2H;将采集的模拟量转为数字量
              OUT       DX,AL
              CALL      DLAY
              IN        AL,DX
              STOSB
	     ;显示数据波形
              CALL      DRAWLINE
              CALL      DISPLED;在LED管上显示剩余时间
              MOV       AH,1
              INT       16H
              JNZ       R
              LOOP      REC
          R:  RET
       RECOR  ENDP
;--------------------------------------------------------------------------


;--------------------------播放录音程序------------------------------------
        PLAY  PROC      NEAR
              PUSH      CX
	     ;#####开放中断#####
              IN        AL,21H
              AND       AL,7FH
              OUT       21H,AL
              CALL      LCREEN
              MOV       AX,0C0AH;写像素,像素值为0A
	     ;***************在屏幕中间一行画出一条线**********************
              MOV       DX,240;行
       DRAW:  INT       10H
              INC       CX
              CMP       CX,640
              JNZ       DRAW
              POP       CX
	     ;**********************播放录音*******************************
              MOV       SI,OFFSET BUFFER
              CLD
   FANG_YIN:  MOV       DX,2A0H;将数字量转化为模拟量
              LODSB
              SUB       AL,30H
              PUSH      AX
              OUT       DX,AL
              CALL      DLAY
              POP       AX
	     ;显示数据波形
              CALL      DRAWLINE
              CALL      DISPLED;在LED管上显示剩余时间
              MOV       AH,1
              INT       16H
              JZ        LLL
              JMP       RRR
        LLL:  LOOP      FANG_YIN
	     ;#####关闭中断#####
        RRR:  IN        AL,21H
              OR        AL,80H
              OUT       21H,AL
              RET
        PLAY  ENDP
;--------------------------------------------------------------------------


;--------------------------硬件延时子程序----------------------------------
        DLAY  PROC      NEAR
              PUSH      DX
              MOV       AL,10H
              MOV       DX,283H
              OUT       DX,AL
              MOV       AL,200;设置采集频率
              MOV       DX,280H
              OUT       DX,AL
              MOV       DX,28BH
              MOV       AL,9BH
              OUT       DX,AL
              MOV       DX,288H
      DLAY1:  IN        AL,DX
              AND       AL,1
              JZ        DLAY1
              POP       DX
              RET
        DLAY  ENDP
;--------------------------------------------------------------------------


;---------------------------显示一点波形子程序-----------------------------
    DRAWLINE  PROC      NEAR
              PUSH      CX
              AND       AX,0FH
              PUSH      BX
              MOV       BL,13
              MUL       BL
              POP       BX
              MOV       DX,AX
              PUSH      DX
              MOV       DX,0
              MOV       AX,CX
              PUSH      BX
              MOV       BX,94
              DIV       BX
              POP       BX
              MOV       CX,AX
              MOV       AX,640
              SUB       AX,CX
              MOV       CX,AX
              MOV       AX,0C0AH
              POP       DX
              CMP       BX,100
              JNE       NP
              MOV       BX,0
              PUSH      DX
              ADD       DX,241
         PP:  INT       10H
              DEC       DX
              CMP       DX,239
              JNE       PP
              POP       DX
              PUSH      BX
              MOV       BX,230
              SUB       BX,DX
              MOV       DX,BX
              POP       BX
         QQ:  INT       10H
              INC       DX
              CMP       DX,240
              JNE       QQ
         NP:  INC       BX
              POP       CX
              RET
    DRAWLINE  ENDP
;--------------------------------------------------------------------------


;-----------------------------LED管显示剩余时间子程序----------------------
     DISPLED  PROC
              PUSH      DX
              PUSH      CX
              PUSH      BX
              PUSH      AX
              MOV       DX,28BH
              MOV       AL,90H
              OUT       DX,AL
              MOV       BX,5000
              MOV       AX,CX
              MOV       DX,0
              DIV       BX
              AND       AL,0FH
              MOV       BX,OFFSET LED
              XLAT
              MOV       DX,28AH
              OUT       DX,AL
              POP       AX
              POP       BX
              POP       CX
              POP       DX
              RET
     DISPLED  ENDP
        CODE  ENDS
;--------------------------------------------------------------------------
;=======================================================================================
              END       START

⌨️ 快捷键说明

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