打印

isd1700的spi程序

[复制链接]
4349|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1991cjr|  楼主 | 2012-8-23 21:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
哪位有做过的可以帮我看下程序?或提供点参考程序
主模块程序:
#include<reg52.h>
#include<isd1730.h>
sbit r_led=P1^0;    //录音指示灯
sbit p_led=P1^1;    //放音指示灯
sbit e_led=P1^2;   //清除指示灯
sbit r_key=P1^3;   //录音开关
sbit p_key=P1^4;   //放音开关
sbit e_key=P1^5;  
sbit s_key=P1^6;
//sbit ft_key=P1^7;   
sbit mic_anal=P2^7;
sbit p_r_sl=P2^6;
bit fplayend; //初始放音标志位,1表示正在放音,初始化为0
//bit ft;
void isd_play();
void isd_rec();
void isd_erase();

void main ()
{
delay_ms(200);    //延时200ms,使系统工作稳定
init();
r_key=1;     //置高,保持稳定
p_key=1;
e_key=1;
s_key=1;
mic_anal=1;
fplayend=0;
// ft_key=1;
while(1)
    {
  if(!r_key)
   {
    delay_ms(10);
    if(!r_key)
     {
    isd_rec();
    }
   }
   
   if(!p_key)
   {
    delay_ms(10);
    if(!p_key)
     {
    isd_play();
    }
   }
//  if(!e_key)
//   {
//    delay_ms(10);
//    if(!e_key)
//     {
//    isd_erase();
//    }
//   }
//  if(!s_key)
//   {
//    delay_ms(10);
//    if(!s_key)
//     {
//    isd_stop();
//    }
//    }
    if(fplayend)
      {
    if((read_sr1()&0x01))     //判断isd1730是否处于空闲,空闲则表示放音结束
    {
     fwd();
     pd();
     fplayend=0;
     p_led=1;
    }
   
  
   }
  }
}
void isd_play()
{
//  while(!p_key);   //等待按键释放,再执行放音
//  if(!ft_key)
//   {
//
//  }
  reset();     //复位
  pu();       //上电
  play();    //放音
  p_led=0;     //开led灯
  fplayend=1;     //开放音标志
  }
void isd_rec()
{
//  if(mic_anal)
//    wr_apc2(0x07);   //音量最大,关监听,直通,可音效编辑,AUD
//  else        
//   wr_apc2(0x40);   //音量最大,关监听,非直通,可音效编辑,AUD
////  while(!r_key);     //等待按键释放
// while(!(read_sr1()&0x01) ); //等待写apc2结束  
reset();  
  pu();
  rec();
  r_led=0;
  while(!r_key)     //录音过程需一直按着录音键
   {
  if((read_sr0()&0x02))    //判断录音空间是否满
  break;
  }
stop();        //isd1730掉电
pd();
r_led=1;

}

分模块程序

#include<reg52.h>
#include"isd1730.h"


#define uchar unsigned char
#define uint unsigned int

sbit ss=P0^0;
sbit sclk=P0^1;
sbit si=P0^2;
sbit so=P0^3;

//uchar bdata SR0_L;
//uchar bdata SR0_H;
//uchar bdata SR1;
//uchar APCL=0,APCH=1;
//uchar RecAddL=0,RecAddH=1;
//uchar PlayAddL=0,playAddH=1;
//
//sbit CMD=SR0_L^0;
//sbit FULL=SR0_L^1;
//sbit PU=SR0_L^2;
//sbit EOM=SR0_L^3;
//sbit INIT=SR0_L^4;
//sbit RDY=SR1^0;
//sbit ERASE=SR1^1;
//sbit PLAY=SR1^2;
//sbit REC=SR1^3;



void init()                           //isd1730的初始化
        {
        ss=1;                           //片选信号置高
        sclk=1;
        si=0;                           //isd1730接收端置低,
        }

uchar r_w(uchar add)  //单片机模拟spi接口读写一个字节
        {
         uint i;
         
         for( i=0;i<8;i++)
                 {
                sclk=0;
                if(add&0x01)        //字节传送从低位开始传
                        {
                         si=1;
                        }
                else si=0;
                add>>=1;
                if(so)                   //与此同时,芯片状态以及当前行信息以数据队列的方式通过MISO被返给主机。
                        {
                         add|=0x80;
                        }
                sclk=1;
               
                }
           return(add);
               

        }

void pu()                 //isd1730上电
        {
         ss=0;                        //片选信号拉低,选择isd1730
         r_w(0x01);
         r_w(0x00);
         ss=1;
         delay_ms(50);        //上电延时时间的典型值是50ms
        }

void stop()                           //isd停止当前操作
        {
         ss=0;
         r_w(0x02);
         r_w(0x00);
         ss=1;

        }

void reset()
        {
         ss=0;
         r_w(0x03);
         r_w(0x00);
         ss=1;
        }

void clrint()          //isd1730清除中断标志
        {
         ss=0;
         r_w(0x04);
         r_w(0x00);
         ss=1;
        }

uchar read_sr0()           //读isd1730状态寄存器sr0
        {
         uchar sr0;         //状态寄存器sr0字节1的暂存单元
         ss=0;
         sr0=r_w(0x05);          //读状态寄存器sr0的字节1
         r_w(0x00);
         r_w(0x00);                  //读状态寄存器sr1
         ss=1;
         return sr0;

        }

uchar read_sr1()         //读isd1730状态寄存器sr1
        {
         uchar sr1;
         ss=0;
         r_w(0x05);
         r_w(0x00);
         sr1=r_w(0x00);                        //前两个字节读sr0,第三个字节读sr1
         ss=1;
         return sr1;

        }

void pd()                         //掉电命令,isd1730完成录放音或擦出后执行掉电
        {
        ss=0;
        r_w(0x07);
        r_w(0x00);
        ss=1;

        }

void play()                 //放音命令,从当前地址开始放音,直到存储器终点或接收到停止命令结束
        {
         ss=0;
         r_w(0x40);
         r_w(0x00);
         ss=0;

        }

void rec()          //录音命令,从当前地址开始录音
        {
         ss=0;
         r_w(0x41);
         r_w(0x00);
         ss=1;
        }

void erase()
        {
         ss=0;
         r_w(0x42);
         r_w(0x00);
         ss=1;

        }

void g_erase()
        {
         ss=0;
         r_w(0x43);
         r_w(0x00);
         ss=1;

        }

void wr_apc2(uchar buf)   //写apc(模拟路径配置)寄存器2,写12位apc寄存器控制命令,音量<D2:D0>配置
        {
         ss=0;
         r_w(0x65);
         r_w(buf);
         r_w(0x04);
         ss=1;

        }

void fwd()                  //放音快进,在放音过程中,使放音地址指针指向下一段语音信息
        {
         ss=0;
         r_w(0x48);
         r_w(0x00);
         ss=1;

        }

/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void delay_ms(unsigned char t)
{
     
while(t--)
{
     //大致延时1mS
     DelayUs2x(245);
         DelayUs2x(245);
}
}

相关帖子

沙发
1991cjr|  楼主 | 2012-8-24 11:05 | 只看该作者
不是吧,咋没人回答呢

使用特权

评论回复
板凳
1991cjr|  楼主 | 2012-8-24 11:05 | 只看该作者
求大神

使用特权

评论回复
地板
程序金左手| | 2012-8-24 11:08 | 只看该作者
你的提问很芒目,,不知道你想得到什么答案。。。

使用特权

评论回复
5
1991cjr|  楼主 | 2012-8-25 09:29 | 只看该作者
4# 程序金左手
之前写了上面那段程序,但芯片没办法录放音。你有isd1730的程序吗?可以发给我参考下不

使用特权

评论回复
6
旭日东起| | 2013-11-25 15:18 | 只看该作者
看到一大堆程序,看到就会烦,不如说说你遇到 的具体问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

42

帖子

1

粉丝