📄 isd4004语音.asm
字号:
SS EQU P2.6 ;
MOSI EQU P2.5 ;
MISO EQU P2.4 ;
SCLK EQU P2.7 ;
INT EQU P2.3 ;
RAC EQU P2.2 ;
LED1 EQU P1.1 ;录音指示灯
LED2 EQU P1.0 ;放音指示灯
PLY EQU P3.3 ;播放
REA EQU P3.4 ;录音
CMD DATA 23H ;命令字节存储空间
WPL DATA 22H ;
WPH DATA 20H ;
RAD1 DATA 0200h ;录音地址1
RAD2 DATA 0400h ;录音地址2
ORG 0000H
AJMP START
ORG 0050H
START:
MOV A,#03H ;单片机初始化
MOV P2,A
MOV P3,#0FFH
MAIN:
JNB REA,LP1 ;录音键是否按下
MAIN1:
JNB PLY,LP2 ;放音键是否按下
AJMP START
LP1: ACALL DELAY12MS ;延时12MS 消抖
JNB REA, TYPE ;按下,录音
AJMP MAIN1 ;否则 判断放音键
LP2: ACALL DELAY12MS ;延时 消抖
JNB PLY,VOCA ;按下,放音
AJMP MAIN ;延时,跳
;录音子程序 TYPE
TYPE: CLR LED1
ACALL POWRUP ;上电指令
ACALL DELAY25MS ;延时25ms
ACALL DELAY25MS
ACALL POWRUP ;上电指令
ACALL DELAY25MS ;延时25ms
ACALL DELAY25MS
ACALL SETADDR01 ;设置录音起点地址为0200h
ACALL REC ;连续录音
ACALL DELAY60S ;延时60s
ACALL STOP ;停止录音
ACALL DELAY20MS ;暂停录音20ms
ACALL SETADDR02 ;设置录音地址为0400h
ACALL REC ;连续录音
ACALL DELAY120S ;连续录音120s
ACALL STOP ;停止录音
SETB LED1
RET ;
;放音子程序VOCA
VOCA: CLR LED2 ;
ACALL POWRUP ;上电子程序
ACALL DELAY25MS ;延迟子程序,至少延迟25ms,使ISD4004处于工作状态
ACALL DELAY25MS
ACALL SETADDR011 ;设置放音起点地址为0200h
ACALL PLAY ;连续放音
ACALL DELAY60S ;延时60s
ACALL STOP ;停止放音
ACALL DELAY20MS ;暂停放音20ms
ACALL SETADDR022 ;设置放音地址为0400h
ACALL PLAY ;连续放音
ACALL DELAY120S ;
ACALL STOP ;停止放音
SETB LED2
RET ;
;延时12ms
DELAY12MS:
MOV R7,#24 ;
DELAY0: MOV R6,#248 ;
DJNZ R6,$ ;
DJNZ R7,DELAY0 ;
RET ;
;上电子程序
POWRUP: ;
MOV A,#20H ;
CLR SS ;使SS为低,选中ISD
ACALL SEND ;发送上电指令
ACALL DELAY25MS ;
SETB SS ;使SS复位
RET ;
SEND: CLR MOSI ;MOSI 为低,向ISD4004送指令,地址等的子程序
CLR SCLK ;SCLK为低,数据被输出
MOV R3,#08H ;每个字节8位
OUT:
CLR SCLK ;时钟下降
RRC A ;数据串行输出
MOV MOSI,C ;输出1位
NOP ;
NOP ;
NOP ;
SETB SCLK ;时钟上升沿到
NOP ;
NOP ;
NOP ;
DJNZ R3,OUT ;是否传输完?否则继续
RET ;
;延时25ms
DELAY25MS: ;
MOV R7,#50H ;
DELAY1: MOV R6,#248 ;
DJNZ R6,$ ;
DJNZ R7,DELAY1 ;
RET ;
SETADDR01:
MOV 23H,#0A0H ;23h为单字节指令的工作单元
MOV 22H,#00H ;22h为地址低8位数据的工作单元
MOV 20H,#02H ;20h位地址高8位数据的工作单元
ACALL SETADDR03 ;
RET ;
SETADDR011:
MOV 23H,#0E0H ;23h为单字节指令的工作单元
MOV 22H,#00H ;22h为地址低8位数据的工作单元
MOV 20H,#02H ;20h位地址高8位数据的工作单元
ACALL SETADDR03 ;
RET ;
;主机向ISD4004连续发送3字节指令
;操作指令在23h中,起始地址的高8位在20h中,低8位在22h中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -