C51ISD4000语音单片机通用开发板电子教案.doc
Good is good, but better carries it.精益求精,善益求善。C51ISD4000语音单片机通用开发板-C51-ISD4000语音单片机通用开发板本板采用国内最常用的MCS-51语言单片机89C51,与最新的ISD4000系列语音芯片结合,可供用户开发各种最新的智能型数码语音产品。一、结构板上已装配好:89C51单片机,8031内核,4K可反复擦写的程序存储器,32条I/O口,5V工作ISD4003-08语音芯片,音质优异的模拟存储技术,可反复录放,8分钟,可分1200段,SPI接口方式,3V供电LM386功率放大器,0.5W驱动24C01(选配件)I2C总线串行存储器。还有驻极体话筒(MIC)、话筒放大器、音量电位器、发光管等部件。二、性能参数外接电源电压:5V(稳压)外接喇叭:416欧姆,0.5W工作电流:2530mA(录音),5080mA(放音)静态电流:13mA随板提供的演示程序功能:1、录音跳线插在“REC”一侧是录音状态,按住“AN”键不放,指示灯亮即可对着板上话筒讲话录音,松键时录音停止并形成一段。再按则录下一段。按“STOP”键为复位,再录音时又从第一段开始。2、放音跳线插在“PLAY”一侧是放音状态,按一下“AN”键即播放一段,一段结束后自动停止放音,再按“AN”则播放下一段。按“STOP”键为复位,再放音时又从第一段开始。;*;*89C51-ISD4000语音电路程序*;*AT89C51单片机*;*8951-34.ASM12MHz*;*北京中青世纪科技发展公司*;*;*2000.05.26*;*SSEQUP1.0;片选SCLKEQUP1.1;ISD4003时钟MOSIEQUP1.2;数据输入MISOEQUP1.3;数据输出LEDEQUP1.7;指示灯INTEQUINT0;中断ANEQUP1.6;执行STOPEQUP1.5;复位PREQUP1.4;PR=1录音PR=0放音;初始化ORG0000H;AJMPMAIN;MAIN:MOVSP,#10H;MOVP1,#0FFH;MOVP2,#0FFH;MOVP3,#0FFH;MOVP0,#0FFH;CLREA;MAII:SETBLED;关指示灯ACALLDSTOP;ISD掉电MAS0:MOV3AH,#200;MAS1:JBAN,MAS0;等按AN键DJNZ3AH,MAS1;ACALLUP;ISD上电MOV20H,#00H;ISD低位地址MOV21H,#00H;ISD高位地址JBPR,REC;PR=1录音AJMPPLAY;PR=0放音;SETREC16位;从指定地址录音10100<XA9A8A7A6A5A4A3A2A1A0>REC:MOVA,20H;发地址A7-A0ACALLISDX;MOVA,21H;发地址A9-A8SETBACC.7;CLRACC.6;SETBACC.5;CLRACC.4;CLRACC.3;ACALLISDX;SETBSS;关片选;REC8位;从当前地址录音10110<XA9A8A7A6A5A4A3A2A1A0>REC1:MOV36H,#10;REC2:ACALLYS50;延时录音DJNZ36H,REC2;CLRLED;开指示灯MOVA,#0B0H;发10110XXXACALLISDX;SETBSS;关片选REC3:MOV35H,#200;REC4:JNBINT,REC7;OVF=0芯片溢出JNBAN,REC3;DJNZ35H,REC4;SETBLED;关指示灯ACALLSTOPP;停止当前操作REC5:JNBSTOP,REC6;中断RESETJBAN,REC5;等待AN=0ACALLSTOPP;停止当前操作AJMPREC1;REC6:CLRSCLK;时钟SCLK=0SETBSS;关片选ACALLSTOPP;停止当前操作AJMPMAII;REC7:SETBLED;关指示灯MOV36H,#15;REC8:ACALLYS50;延时录音JBAN,REC6;等待AN=1DJNZ36H,REC8;CLRLED;MOV36H,#15;REC9:ACALLYS50;延时录音JBAN,REC6;等待AN=1DJNZ36H,REC9;AJMPREC7;SETPLAY16位;从指定地址放音11100<XA9A8A7A6A5A4A3A2A1A0>PLAY:JNBAN,PLAY;等待AN=1MOVA,20H;发地址A7-A0ACALLISDX;MOVA,21H;发地址A9-A8SETBACC.7;SETBACC.6;SETBACC.5;CLRACC.4;CLRACC.3;ACALLISDX;SETBSS;关片选;PLAY8位;从当前地址放音11110<XA9A8A7A6A5A4A3A2A1A0>PLAY1:CLRLED;LED开指示灯MOVA,#0F0H;发11110XXXXXXXXACALLISDX;发<<SETPLAY>>SETBSS;关片选PLAY2:JNBSTOP,REC6;STOP=0停止放音JBINT,PLAY2;无OVFEOM继续放音SETBLED;关指示灯ACALLSTOPP;停止当前操作;检测OVFCLRSS;开片选CLRSCLK;时钟SCLK=0SETBSCLK;时钟SCLK=1JBMISO,REC6;芯片到未CLRSCLK;时钟SCLK=0SETBSS;关片选ACALLSTOPP;停止当前操作PLAY3:JNBSTOP,REC6;中断放音JBAN,PLAY3;等待AN=0AJMPPLAY1;顺序放音;ISD上电<<POWERUP>>UP:MOVA,#20H;发00100XXXXXXXXXXXACALLISDX;SETBSS;关片选ACALLYS50;50mS延时ACALLYS50;50mS延时RET;停止当前操作<<STOP>>8位STOPP:MOVA,#30H;发0X110XXXACALLISDX;SETBSS;关片选ACALLYS50;50mS延时ACALLYS50;50mS延时RET;停止当前操作掉电<<STOPPWRDN>>8位DSTOP:MOVA,#10H;发0X010XXXXXXXXXXACALLISDX;SETBSS;关片选ACALLYS50;50mS延时ACALLYS50;50mS延时RET;ISD3300,4003SPI写入程序8位数据在AISDX:CLRSS;开片选MOVR6,#8;CLRSCLK;时钟SCLK=0ISD1:MOVC,ACC.0;MOVMOSI,C;数据写MOSISETBSCLK;时钟SCLK=1RRA;CLRSCLK;时钟SCLK=0DJNZR6,ISD1;RET;*10mS延时*YS1:MOVTMOD,#01H;MOVTH0,#0D8H;10mS延时初值置入MOVTL0,#0F0H;(65536-X)*1=10MSSETBTR0;65536-(10000/1)=D8F0HJNBTF0,$;CLRTF0;CLRTR0;RET;*50mS延时*YS50:MOVTMOD,#01H;MOVTH0,#3CH;50mS延时初值置入MOVTL0,#0B0H;(65536-X)*1=50MSSETBTR0;65536-(50000/1)JNBTF0,$;CLRTF0;CLRTR0;RET;END;-