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

📄 isd4004语音.asm

📁 语音芯片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 + -