Side Menu

ISD5116-89C51语音单片机开发板

2017-5-4 15:51| 发布者: admin| 查看: 623| 评论: 0

摘要: 本板采用国内最常用的MCS-51语言单片机89C51,与最新的ISD5116系列语音芯片结合,可供用户开发各种最新的智能型数码语音产品。如图一、 结构板上已装配好:89C51--单片机,8031内核,4K可反复擦写的程序存储器,32条 ...
本板采用国内最常用的MCS-51语言单片机89C51,与最新的ISD5116系列语音芯片结合,可供用户开发各种最新的智能型数码语音产品。如图 

一、 结构

板上已装配好:

89C51--单片机,8031内核,4K可反复擦写的程序存储器,32条I/O口,5V工作

ISD5116--语音芯片,音质优异的模拟存储技术,可反复录放,录放采样频率为8KHZ~~4KHZ可选择(相应时间长度为8~16分钟),录音从MIC/线路可选择,可分2048段,I2C接口方式,3V供电

还有驻极体话筒(MIC)、话筒放大器、4位拨码开关、发光管等部件。

二、 性能参数

外接电源电压:5V(稳压)

外接喇叭:4-16欧姆,0 .5W

工作电流:25~30mA ( 录音),50~80mA (放音)

静态电流:13mA

随板提供的演示程序功能:

1、 录/放音采样频率、MIC/线路输入选择、全/半音量选择

由4位拨码开关选择,对应表为: (ON 为0,OFF为1)

 
采样频率
音量
输入
开关
1,2
3
4
状态
00
01
10
11
0
1
0
1
效果
8KHZ
8分钟
6K
10分钟
4K
17分钟
禁止态
MIC
线路

2、录音

跳线插在"REC"一侧是录音状态,按住"AN"键不放,指示灯亮即可对着板上话筒讲话录音,松键时录音停止并形成一段。再按则录下一段。

按"STOP"键为复位,再录音时又从第一段开始。

 3、放音

跳线插在"PLAY"一侧是放音状态,按一下"AN"键即播放一段,一段结束后自动停止放音,再按"AN"则播放下一段。

按"STOP"键为复位,再放音时又从第一段开始。

89C51-ISD5116通用开发板程序 AT89C51单片机12MHZ

SDA EQU P1.0 ;I2C数据

SCL EQU P1.1 ;I2C时钟


LED EQU P1.7 ;指示灯

INT EQU INT0 ;中断

START EQU P1.6 ;执行

STOP EQU P1.5 ;复位

PR EQU P1.4 ;PR=1录音,=0放音

;---------------------初始化

ORG 0000H

AJMP MAIN

MAIN: MOV SP,#10H

MOV P1,#0FFH

MOV P2,#0FFH

MOV P3,#0FFH

MOV P0,#0FFH

CLR EA

MAII: SETB LED ;关指示灯

ACALL DSTOP

MAS0: MOV 3AH,#200

MAS1: JB START,MAS0 ;等待按下START键

DJNZ 3AH,MAS1

ACALL UP

JNB PR,PLAY ;PR=0 放音

AJMP REC ;PR=1 录音

;-------------------------SETPLAY 16位

;-------------------------从指定地址放音

PLAY: JB P2.0,SELC_PSAM8A ;判断采样

JB P2.1,SELC_PSAM8A

JB P2.2,SELC_PSAM8A

JB P2.3,SELC_PSAM8A

LCALL PSAMP8H

AJMP PLAYP

SELC_PSAM8A: JB P2.0,SELC_PSAM8B

JB P2.1,SELC_PSAM8B

JB P2.2,SELC_PSAM8B

JNB P2.3,SELC_PSAM8B

LCALL PSAMP8H

JMP PLAYP

SELC_PSAM8B: JB P2.0,SELC_PSAM6A

JB P2.1,SELC_PSAM6A

JNB P2.2,SELC_PSAM6A

JB P2.3,SELC_PSAM6A

LCALL PSAMP8L

JMP PLAYP

SELC_PSAM6A: JB P2.0,SELC_PSAM6B

JNB P2.1,SELC_PSAM6B

JB P2.2,SELC_PSAM6B

JB P2.3,SELC_PSAM6B

LCALL PSAMP6H

JMP PLAYP

SELC_PSAM6B: JB P2.0,SELC_PSAM6C

JNB P2.1,SELC_PSAM6C

JB P2.2,SELC_PSAM6C

JNB P2.3,SELC_PSAM6C

LCALL PSAMP6H

JMP PLAYP

SELC_PSAM6C: JB P2.0,SELC_PSAM4A

JNB P2.1,SELC_PSAM4A

JNB P2.2,SELC_PSAM4A

JB P2.3,SELC_PSAM4A

LCALL PSAMP6L

JMP PLAYP

SELC_PSAM4A: JNB P2.0,SELC_PSAM4B

JB P2.1,SELC_PSAM4B

JB P2.2,SELC_PSAM4B

JB P2.3,SELC_PSAM4B

LCALL PSAMP4H

JMP PLAYP

SELC_PSAM4B: JNB P2.0,SELC_PSAM4C

JB P2.1,SELC_PSAM4C

JB P2.2,SELC_PSAM4C

JNB P2.3,SELC_PSAM4C

LCALL PSAMP4H

JMP PLAYP

SELC_PSAM4C: JNB P2.0,PCHA1

JB P2.1,PCHA1

JNB P2.2,PCHA1

JB P2.3,PCHA1

LCALL PSAMP4L

JMP PLAYP

;-------------------------------------

PCHA1: AJMP MAII

;---------------------------------从当前地址放音

PLAYP: JNB START,PLAYP

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#0A9H ;发送放音地址指令

LCALL TB

MOV A,#00H ;发送放音地址 高字节

LCALL TB

MOV A,#00H ;发送放音地址 低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;------------------------PLAY 8位

;------------------------

PLAY1: CLR LED

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#0A8H ;放音开始

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

PLAY2: JNB STOP,BK

JB INT,PLAY2

SETB LED

ACALL STOPP

;-----------------------检测OVF

LCALL BEGN

MOV A,#081H ;从地址10000001(读)

LCALL TB ;发送从地址

LCALL RB ;接收状态内容到A中

CLR P1.1

SETB P1.0 ;主设备不响应

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

JB ACC.6,BK

ACALL STOPP

PLAY3: JNB STOP,BK

JB START,PLAY3 ;等待START=0(按下)

AJMP PLAY1 ;继续下一个

;-------------------------回到开始

BK: ACALL STOPP ;停止当前操作

AJMP MAII ;回到开始MAII

;-----------------------停止当前操作《STOP》 8位

STOPP: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#080H ;停止,但在通电状态

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

LCALL YS50

LCALL YS50

RET

; ================================SETREC 16位

;----------------------从指定地址录音

REC: JB P2.0,SELC_SAM8A ;判断采样

JB P2.1,SELC_SAM8A

JB P2.2,SELC_SAM8A

JB P2.3,SELC_SAM8A

LCALL SAMP8A

JMP RECR

SELC_SAM8A: JB P2.0,SELC_SAM8B

JB P2.1,SELC_SAM8B

JB P2.2,SELC_SAM8B

JNB P2.3,SELC_SAM8B

LCALL SAMP8B

JMP RECR

SELC_SAM8B: JB P2.0,SELC_SAM6A

JB P2.1,SELC_SAM6A

JNB P2.2,SELC_SAM6A

JB P2.3,SELC_SAM6A

LCALL SAMP8A

JMP RECR

SELC_SAM6A: JB P2.0,SELC_SAM6B

JNB P2.1,SELC_SAM6B

JB P2.2,SELC_SAM6B

JB P2.3,SELC_SAM6B

LCALL SAMP6A

JMP RECR

SELC_SAM6B: JB P2.0,SELC_SAM6C

JNB P2.1,SELC_SAM6C

JB P2.2,SELC_SAM6C

JNB P2.3,SELC_SAM6C

LCALL SAMP6B

JMP RECR

SELC_SAM6C: JB P2.0,SELC_SAM4A

JNB P2.1,SELC_SAM4A

JNB P2.2,SELC_SAM4A

JB P2.3,SELC_SAM4A

LCALL SAMP6A

JMP RECR

SELC_SAM4A: JNB P2.0,SELC_SAM4B

JB P2.1,SELC_SAM4B

JB P2.2,SELC_SAM4B

JB P2.3,SELC_SAM4B

LCALL SAMP4A

JMP RECR

SELC_SAM4B: JNB P2.0,SELC_SAM4C

JB P2.1,SELC_SAM4C

JB P2.2,SELC_SAM4C

JNB P2.3,SELC_SAM4C

LCALL SAMP4B

JMP RECR

SELC_SAM4C: JNB P2.0,CHA1

JB P2.1,CHA1

JNB P2.2,CHA1

JB P2.3,CHA1

LCALL SAMP4A

JMP RECR

;-------------------------------------------

CHA1: AJMP MAII

;------------------------------------

RECR: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#091H ;发送录音地址指令

LCALL TB

MOV A,#00H ;发送录音地址 高字节

LCALL TB

MOV A,#00H ;发送录音地址 低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

----------------------------REC 8位

;---------------------------从当前地址录音

REC1: MOV 36H,#10 ;延时2秒钟为开头

REC2: LCALL YS50

DJNZ 36H,REC2

CLR LED ;开指示灯

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#90H ;录音开始

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

REC3: MOV 35H,#200

REC4: JNB INT,REC7 ;OVF=0芯片溢出

JNB START,REC3

DJNZ 35H,REC4

SETB LED ;关指示灯

ACALL STOPP ;停止当前操作

REC5: JNB STOP,REC6 ;按STOP=0,回到开始

JB START,REC5 ;等待,按START=0回到第二节录音

ACALL STOPP

AJMP REC1

REC6: ACALL STOPP ;停止当前操作

AJMP MAII ;回到开始MAII

REC7: SETB LED ;关指示灯

MOV 36H,#15

REC8: LCALL YS50 ;延时录音

JB START,REC6 ;等待START=1,回到开始MAII

DJNZ 36H,REC8 ;继续按START,开始下一节

CLR LED

MOV 36H,#15

REC9: LCALL YS50 ;延时录音

JB START,REC6 ;等待START=1,回到开始MAII

DJNZ 36H,REC9

AJMP REC7

;=================================ISD上电《POWERUP》

UP: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#080H ;发送POWER UP指令

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

LCALL YS50

LCALL YS50

RET

;-----------------------停止当前操作掉电《STOPPWRDN》 8位

DSTOP: LCALL BEGN

MOV A,#080H ;发送5116的从地址10000000(写)

LCALL TB

MOV A,#000H ;发送POWER DOWN指令

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

LCALL YS50

LCALL YS50

RET

;====================================选择录音音质

SAMP8A: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#024H ;麦克风录音高字节

LCALL TB

MOV A,#023H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;-------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#039H ;麦克风录音高字节

LCALL TB

MOV A,#040H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;-----------------------------

SAMP8B: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#03AH ;麦克风录音高字节

LCALL TB

MOV A,#033H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;-------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#039H ;麦克风录音高字节

LCALL TB

MOV A,#041H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;-----------------------------------------

SAMP6A: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#024H ;麦克风录音高字节

LCALL TB

MOV A,#023H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;----------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#039H ;麦克风录音高字节

LCALL TB

MOV A,#044H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;-------------------------------------

SAMP6B: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#03AH ;麦克风录音高字节

LCALL TB

MOV A,#033H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;----------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#039H ;麦克风录音高字节

LCALL TB

MOV A,#045H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;-------------------------------------

SAMP4A: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#024H ;麦克风录音高字节

LCALL TB

MOV A,#023H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;--------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#039H ;麦克风录音高字节

LCALL TB

MOV A,#04CH ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;------------------------------

SAMP4B: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#03AH ;麦克风录音高字节

LCALL TB

MOV A,#033H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;--------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#039H ;麦克风录音高字节

LCALL TB

MOV A,#04DH ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;====================================选择高低放音音质

PSAMP8H: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#024H ;麦克风录音高字节

LCALL TB

MOV A,#022H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;-------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#059H ;麦克风录音高字节

LCALL TB

MOV A,#0D1H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;-------------------------------------------------

PSAMP8L: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#024H ;麦克风录音高字节

LCALL TB

MOV A,#022H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;-------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#079H ;麦克风录音高字节

LCALL TB

MOV A,#0D1H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;-----------------------------------------

PSAMP6H: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#024H ;麦克风录音高字节

LCALL TB

MOV A,#022H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;----------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#059H ;麦克风录音高字节

LCALL TB

MOV A,#0D5H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;-----------------------------------------

PSAMP6L: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#024H ;麦克风录音高字节

LCALL TB

MOV A,#022H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;----------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#079H ;麦克风录音高字节

LCALL TB

MOV A,#0D5H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;-------------------------------------

PSAMP4H: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#024H ;麦克风录音高字节

LCALL TB

MOV A,#022H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;--------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#059H ;麦克风录音高字节

LCALL TB

MOV A,#0DDH ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;-------------------------------------

PSAMP4L: LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#082H ;命令CFG0

LCALL TB

MOV A,#024H ;麦克风录音高字节

LCALL TB

MOV A,#022H ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

;--------------------------

LCALL BEGN

MOV A,#080H ;从地址10000000(写)

LCALL TB

MOV A,#083H ;命令CFG1

LCALL TB

MOV A,#059H ;麦克风录音高字节

LCALL TB

MOV A,#0DDH ;麦克风录音低字节

LCALL TB

NOP

NOP

SETB P1.1

NOP

NOP

LCALL STOPII

RET

;==============================开始信号子程序

BEGN: SETB P1.1

SETB P1.0

CLR P1.0

NOP

NOP

CLR P1.1

RET

;------------------------结束信号子程序

STOPII: CLR P1.1

CLR P1.0

NOP

NOP

SETB P1.1

SETB P1.0

RET

;------------------------发送一字节子程序

TB: MOV R6,#08H

TB1: CLR P1.1

NOP

RLC A

MOV P1.0,C

SETB P1.1

NOP

DJNZ R6,TB1

CLR P1.1

SETB P1.0

NOP

NOP

SETB P1.1

TB2: JB P1.0,TB2

RET

;-----------------------接收一字节子程序

RB: MOV R7,#08H

CLR P1.1

SETB P1.0

NOP

NOP

RB1: SETB P1.1

NOP

MOV C,P1.0

RLC A

CLR P1.1

NOP

DJNZ R7,RB1

RET

;--------------------10ms延时

YS1: MOV TMOD,#01H

MOV TH0,#0D8H

MOV TL0,#0F0H

SETB TR0

JNB TF0,$

CLR TF0

CLR TR0

RET

;--------------------50ms延时

YS50: MOV TMOD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

SETB TR0

JNB TF0,$

CLR TF0

CLR TR0

RET

;-----------------------------

END


鲜花

握手

雷人

路过

鸡蛋