ISD4004语音芯片控制求大神给看看,我制定位置进行录音然后让他播放,老是不能录放~~ISD4004-08MP~

#include<reg52.h>//#include"isd.h"sbitSS=P1^0;sbitMOSI=P1^1;sbitMISO=P1^2;sbitSCLK=P1... #include<reg52.h>
//#include"isd.h"
sbit SS=P1^0;
sbit MOSI=P1^1;
sbit MISO=P1^2;
sbit SCLK=P1^3;
sbit INT=P1^4;
sbit RAC=P1^5;
sbit LED=P1^6;
sbit set_key=P1^7;
void ISD_send(unsigned char Data); //数据发送函数
void ISD_stop(); //停止操作指令
void ISD_powerUp(); //上电指令
void ISD_powerDown(); //停止当前操作并掉电指令
void ISD_setPlay(unsigned char adl,unsigned char adh); //指定位置播放
void ISD_play(); //播放指令
void setRec(unsigned char adl,unsigned char adh); //制定位置录音
void rec(); //录音指令
void delayus(unsigned int us);
void delayms(unsigned char c);
unsigned int adds[12]={170,270,370,470,570,670,770,870,970,1070,1170,1270};
unsigned int st_add;
void main()
{
st_add=adds[0];
set_key=0X00AA; //置IO口为1,准备读入数据
while(set_key==1); //如果按键始终没有按下,则是始终不执行下面的程序
delayms(5);
while(set_key==1); //确认按键的确被按下
delayus(1);
ISD_powerUp(); //AN键按下,ISD上电并延迟50ms
ISD_powerDown();
ISD_powerUp();
ISD_powerUp();
delayms(50);
LED=1; //录音指示灯亮,表示录音模式
setRec(st_add&0x00ff,st_add>>8) ; //制定位置录音
rec(); //发送录音指令
while(set_key==0); //等待本次录音结束
ISD_stop(); //发送4004停止命令
LED=0; //录音完毕,LED熄灭
delayms(50) ;
ISD_powerUp();
ISD_powerDown();
ISD_powerUp(); //AN键按下,ISD上电并延迟50ms
delayms(50);
ISD_setPlay(st_add&0x00ff,st_add>>8);
ISD_play();

delayus(20);
/* { //SCLK下降沿,数据移出ISD,即读INT状态
SS=0;
SCLK=1;
delayms(1);
SCLK=0;
}*/
while(INT==1); //(实验时这里是导致程序终止的原因) //等待放音完毕的EOM中断信号
ISD_stop();
// SS=1;
//放音完毕,send "stop" command
// }}
void ISD_send(unsigned char Data) //数据发送函数
{
char i;
SS=0;
MOSI=0;//发送开始
SCLK=0;
for(i=0;i<8;i++)
{
if((Data&0x01)==1)
MOSI=1;
else
MOSI=0;
delayms(5);
SCLK=1;
delayms(1);
SCLK=0;
delayms(2);
Data=Data>>1;
}}
void ISD_setPlay(unsigned char adl,unsigned char adh) //指定位置播放
{
delayus(2);
ISD_send(adl);
// delayus(2);
ISD_send(adh);
// delayus(2);
ISD_send(0xe0);
SS=1;
}
void setRec(unsigned char adl,unsigned char adh) //制定位置录音
{
delayus(2);
ISD_send(adl);
// delayus(2);
ISD_send(adh);
// delayus(2);
ISD_send(0xa0);
SS=1; //先指令后地址
}
void ISD_stop() //停止操作指令
{
ISD_send(0x30);
// delayms(1);
SS=1;
}
void ISD_powerUp() //上电指令
{
ISD_send(0x20);
SS=1;
delayms(50);
}
void ISD_powerDown() //停止当前操作并掉电指令
{
ISD_send(0x10);
SS=1;
delayms(50);
}
void ISD_play() //播放指令
{
ISD_send(0xf0);
SS=1;
}
void rec() //录音指令
{
ISD_send(0xb0);
SS=1;
}
void delayus(unsigned int us)
void delayms(unsigned char c)
展开
 我来答
feng_3220
2014-04-29 · TA获得超过142个赞
知道小有建树答主
回答量:474
采纳率:0%
帮助的人:298万
展开全部
录音时需要检测芯片的INT脚,INT脚如果为低芯片录满需要停止录音,返回重新执行录音程序
追问
但是我每次都让它固定从170地址开始录啊,而却都是很短的时间
追答
从什么位置录音只要芯片在录音都需要检测芯片是否录满,比如按键按下录音,按键在保持按下时就要检测芯片是否溢出。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式