|
本板采用国内最常用的MCS-51语言单片机89C51,与最新的ISD1700系列语音芯片结合,可供用户学习、了解ISD1700系列芯片的特点和使用方法,以及开发各种最新的智能型数码语音产品。该开发板几乎集合了1700所有的功能展示,并向用户提供89C51的汇编源程序,及原理图供大家参考学习。
结构
板上已装配好:
89C51——单片机,8031内核,4K可反复擦写的程序存储器,32条I/O口,5V工作
ISD1700——语音芯片,音质优异的模拟存储技术,可反复录放,8分钟,可分255段以上,拥有独立按键模式与SPI接口模式两种工作方式,3V供电
性能参数
外接电源电压:5V(稳压)
外接喇叭:8—16欧姆,0 .5W
工作电流:25~35mA
静态电流:11mA
三、随板提供的演示功能:
1.独立按键模式:
在实验板上有VOL、PLAY、REC、ERASE、FWD、RESET等功能按键,分别对应于1700芯片的音量调节、放音、录音、擦除、快进、复位等操作。
按下REC键,左侧LED点亮时录音,松开即停止录音,LED熄灭;
按一下PLAY键,即播放当前段的声音,左侧LED闪烁,当前段播放完毕自动停止,LED熄灭;
其它独立按键模式的功能请参阅我们主页上www.atvoc.com关于1700芯片的介绍
2.SPI接口模式:
A)录音
跳线插在“REC”一侧是录音状态,按住“AN”键不放,右侧指示灯亮即可对着板上话筒讲话录音,松键时录音停止并形成一段。再按则录下一段。
按“STOP”键为复位,再录音时又从第一段开始;
录音方式可选择MIC录音和线录录音,在MIC/LINE 跳线上选择,短路叉接在MIC上即为MIC方式录音,选择LINE则为线录录音。
B)放音
跳线插在“PLAY”一侧是放音状态,按一下“AN”键即播放一段,一段结束后自动停止放音,再按“AN”则播放下一段。播放完最后一段后,再按下“AN”键会继续播放第一段语音
按“STOP”键为复位,再放音时又从第一段开始。
C)芯片抹音
长按“STOP”3秒以上,右侧LED灯会闪烁3下,并且1700芯片内所有语音内容将被擦除。
ISD1700-89C51开发试验板
51单片机源程序(12MHz)
SS EQU P1.0 ;片选
SCLK EQU P1.1 ;ISD1730时钟
MOSI EQU P1.2 ;数据输入
MISO EQU P1.3 ;数据输出
LED EQU P1.7 ;指示灯
AN EQU P1.6 ;执行
STOP EQU P1.5 ;复位
PR EQU P1.4 ;PR=1录音 PR=0放音
MORA EQU P2.7
;***************************************************
;20H-25H 为SPI命令字的1-6位存储单元
;***************************************************
ORG 0000H ;
AJMP MAIN ;
MAIN: MOV SP,#70H ;
MOV P1,#0FFH ;
MOV P2,#0FFH ;
MOV P3,#0FFH ;
MOV P0,#0FFH ;
CLR EA ;
MAII: ACALL REST
ACALL DSTOP ;ISD掉电
SETB LED ;关指示灯
MAS0: MOV 3AH,#200
JNB STOP,REC6 ;
MAS1: JB AN,MAS0 ;等按AN键
DJNZ 3AH,MAS1 ;
PU: ACALL UP ;ISD上电
JB MORA,MICREC ;如果mic录音,apc=0440h。如果anain,apc=0480h
MOV 21H,#08H
MOV 22H,#04H
AJMP GOON
MICREC:MOV 21H,#40H
MOV 22H,#04H
GOON: ACALL WR_APC ;写apc
ACALL WAITRDY ;等待rdy=1
ACALL CLRINT ;清除中断
ACALL WAITRDY ;等待rdy=1
ACALL CHK_MEM ;环状存储检查
JB PR,REC ;PR=1 录音
AJMP PLAY ;PR=0 放音
REC: MOV 36H,#10
REC1: ACALL YS50 ;延时录音
DJNZ 36H,REC1
REC2: MOV 20H,#51H ;发送REC命令
MOV 21H,#00H
MOV A,20H
ACALL SPIO
MOV A,21H
ACALL SPIO
SETB SS ;关片选
ACALL CHECKRDY
JNB ACC.3,REC1
CLR LED ;开 LED灯
REC3: MOV 35H,#200
REC4: ACALL CHECKFULL
JNB AN,REC3
DJNZ 35H,REC4
SETB LED
ACALL CLRINT
ACALL STOPP
REC5: JNB STOP,REC6
JB AN,REC5
ACALL STOPP
ACALL CLRINT
ACALL WAITRDY
ACALL CHK_MEM
AJMP REC
REC6: MOV R1,#60H
TOERASE:
JB STOP,TOPD
ACALL YS50
DJNZ R1,TOERASE
ACALL G_ERASE
MOV R1,#03H
LEDWAIT:
CLR LED
ACALL LEDELAY
SETB LED
ACALL LEDELAY
DJNZ R1,LEDWAIT
TOPD: ACALL STOPP
ACALL CLRINT
AJMP MAII
REC7: SETB LED
MOV 36H,#10
REC8: ACALL YS50
JB AN,REC6
DJNZ 36H,REC8
CLR LED
MOV 36H,#10
REC9: ACALL YS50
JB AN,REC6
DJNZ 36H,REC9
AJMP REC7
PLAY: JNB AN,PLAY
REPLAY: ;放音play,也可以用set_play放音
MOV 20H,#40H
MOV 21H,#00H
MOV A,20H
ACALL SPIO
MOV A,21H
ACALL SPIO
SETB SS
ACALL CHECKSR
JB ACC.0,REPLAY
CLR LED
PLAY1: JNB STOP,REC6
ACALL CHECKRDY
JNB ACC.0,PLAY1
SETB LED
ACALL STOPP
PLAY2: JNB STOP,REC6
JB AN,PLAY2
ACALL FWD
ACALL CHECKRDY
ACALL CHK_MEM
AJMP PLAY
;扫描ISD1700状态寄存器SR1
CHECKRDY:
MOV 20H,#05H
MOV 21H,#00H
MOV 22H,#00H
CHECKRDY1:
ACALL RDSTATUS
MOV A,20H
ACALL SPIO
MOV 26H,a
MOV A,21H
ACALL SPIO
MOV 27H,A
MOV A,22H
ACALL SPIO
MOV 28h,A
RET
;扫描ISD1700状态寄存器SR0
CHECKSR:
MOV 20H,#05H
acall rdstatus
MOV A,20H
ACALL SPIO
MOV 26H,a
RET
;等待ISD1700状态寄存器SR1.0位(RDY) 置1
WAITRDY:
ACALL CHECKRDY
JNB ACC.0,WAITRDY
RET
;检测ISD1700状态寄存器SR0.1位(FULL),是否为1
CHECKFULL:
ACALL RDSTATUS
MOV A,20H
ACALL SPIO
JNB ACC.1,CHECKFULL2
Acall REC7
CHECKFULL2:
RET
;清楚中断标志INT指令<< CLR_INT >>
CLRINT:
MOV 20H,#04H
MOV 21H,#00H
MOV A,20H
ACALL SPIO
MOV A,21H
ACALL SPIO
SETB SS
ACALL YS50 ;50mS延时
ACALL YS50 ;50mS延时
RET ;
;ISD1700上电 << POWERUP >>
UP: MOV 20H,#01H
MOV 21H,#00H
MOV A,20H
ACALL SPIO
MOV A,21H
ACALL SPIO
SETB SS
ACALL YS50 ;50mS延时
ACALL YS50 ;50mS延时
RET
;停止当前操作<< STOP >>
STOPP: MOV 20H,#02H
MOV 21H,#00H
MOV A,20H
ACALL SPIO
MOV A,21H
ACALL SPIO
SETB SS
ACALL YS50 ;50mS延时
ACALL YS50 ;50mS延时
RET
;检测环行内存指令<< CHK_MEM >>
CHK_MEM:
MOV 20h,#49H
MOV 21H,#00H
MOV A,20H
ACALL SPIO
MOV A,21H
ACALL SPIO
SETB SS
RET
;快进指令<<FWD>>
FWD :MOV 20h,#48H
MOV 21H,#00H
MOV A,20H
ACALL SPIO
MOV A,21H
ACALL SPIO
SETB SS
RET
;停止当前操作掉电<< PD >>
DSTOP: MOV 20H,#07H
MOV 21H,#00H
MOV A,20H
ACALL SPIO
MOV A,21H
ACALL SPIO
SETB SS
RET
;写入APC寄存器指令<< WR_APC2 >> ,写入内容放置在21H,22H里
WR_APC:
MOV 20h,#65H
MOV A,20h
ACALL SPIO
MOV A,21h
ACALL SPIO
MOV A,22H
ACALL SPIO
SETB SS
RET
;读取SR状态寄存器指令<< RD_STATUS >>
RDSTATUS:
MOV 20h,#05H
MOV 21h,#00H
MOV 22H,#00H
MOV A,20h
ACALL SPIO
MOV A,21h
ACALL SPIO
MOV A,22H
ACALL SPIO
SETB SS
RET
G_ERASE:
MOV 20H,#43H ;
MOV 21H,#00H
MOV A,20H
ACALL SPIO
MOV A,21H
ACALL SPIO ;
SETB SS ;关片选
ACALL YS50 ;50mS延时
ACALL YS50 ;50mS延时
RET
;复位指令<< RESET >>
REST: MOV 20H,#03H
MOV 21h,#00H
MOV A,20h
ACALL SPIO
MOV A,21h
ACALL SPIO
SETB SS
RET
;*****************************
;89c51模拟SPI口 发送和接收子程序
;*****************************
SPIO: SETB SCLK
CLR SS
MOV R6,#08
SPIO1: CLR SCLK
NOP
NOP
MOV C,MISO
RRC A
MOV MOSI,C
SETB SCLK
DJNZ R6,SPIO1
CLR MOSI
RET
;LED延迟
LEDELAY: MOV R2,#08H
LEDELAY1:
ACALL YS50
DJNZ R2,LEDELAY1
RET
;**** 10mS延时 ****
YS10: MOV TMOD,#01H ;
MOV TH0,#0D8H ;10mS延时初值置入
MOV TL0,#0F0H ;(65536-X)*1=10MS
SETB TR0 ;65536-(10000/1)=D8F0H
JNB TF0,$ ;
CLR TF0 ;
CLR TR0 ;
RET ;
;**** 50mS延时 ****
YS50: MOV TMOD,#01H ;
MOV TH0,#3CH ;50mS延时初值置入
MOV TL0,#0B0H ;(65536-X)*1=50MS
SETB TR0 ;65536-(50000/1)
JNB TF0,$ ;
CLR TF0 ;
CLR TR0 ;
RET
END
|