⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isd4004.lst

📁 语音芯片ISD4004的驱动程序。。。希望对大家有用
💻 LST
字号:
C51 COMPILER V8.02   ISD4004                                                               06/02/2008 11:06:07 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE ISD4004
OBJECT MODULE PLACED IN ISD4004.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ISD4004.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <main.H> 
   2          
   3          /*ISD命令定义*/
   4          #define  powerup 0x20//上电,等待TPUD后器件可以工作
   5          #define  setplay 0xe0//从指定位置放音,后面必有跟PLAY指令
   6          #define  play    0xf0//从当前地址放音,直到EOM或OVF
   7          #define  setrec  0xa0//从指定位置录音,后面必有跟REC指令
   8          #define  rec     0xb0//从当前地址放音,直到停止或OVF
   9          #define  setmc   0xe8//快进,未用
  10          #define  mc      0xf8//快进,未用
  11          #define  stop    0x30//停止当前操作
  12          #define  stoppw  0x10//停止当前操作并掉电
  13          #define  RINT    0x30//读状态:OVF和EOM
  14          
  15          sbit SCLK=P2^0; //写时钟
  16          sbit SS=P2^1; //片选
  17          sbit MOSI=P2^2; //串行数据输入端
  18          sbit MISO=P2^3; //串行数据输出端
  19          
  20          sbit INT=P3^2; //INT0(P3.2),录满整个芯片信号
  21          sbit RAC=P3^4; //从T0(P3.4)输入,用来计算行地址
  22          
  23          void delay(unsigned int a)
  24          {
  25   1       while(a--);
  26   1      }
  27          void Write_ISDaddress(unsigned int a)//写入16位的地址, 从低位,到高位
  28          {
  29   1       unsigned char i;
  30   1       SCLK=0;
  31   1       for(i=0;i<16;i++)
  32   1       {
  33   2        if(a&0x0001)
  34   2           MOSI=1;
  35   2        else
  36   2           MOSI=0;
  37   2        delay(4);  //数据setup time200nS最少
  38   2        SCLK=1;    //上升沿写入数据
  39   2        delay(8);  //SCLK高电平最少400ns
  40   2        SCLK=0;        
  41   2        delay(8);      //SCLK低电平最少保持400ns
  42   2        a=a>>1;
  43   2       }
  44   1      }
  45          void Write_ISDcommand(unsigned char a)//写8位的命令码,从低位,到高位
  46          {
  47   1       unsigned char i;
  48   1       SCLK=0;
  49   1       for(i=0;i<8;i++)
  50   1       {
  51   2        if(a&0x01)
  52   2           MOSI=1;
  53   2        else
  54   2           MOSI=0;
  55   2        delay(4);  //数据setup time200nS最少
C51 COMPILER V8.02   ISD4004                                                               06/02/2008 11:06:07 PAGE 2   

  56   2        SCLK=1;    //上升沿写入数据
  57   2        delay(8);  //SCLK高电平最少400ns
  58   2        SCLK=0;        
  59   2        delay(8);      //SCLK低电平最少保持400ns
  60   2        a=a>>1;
  61   2       }
  62   1      }
  63          void ISD_PowerUp(void)//上电命令
  64          {
  65   1       SS=0;     //写数据开始于SS的下降沿
  66   1       delay(10);//SS先拉低,500nS最少
  67   1       Write_ISDaddress(0x0000);
  68   1       Write_ISDcommand(powerup);//0x20
  69   1       SS=1;    //数据传输结束于SS上升沿
  70   1       delay(15000);//SS高电平最少1uS
  71   1      }
  72          void play4004(unsigned int address)//
  73          {
  74   1       ISD_PowerUp();
  75   1       SS=0;     //写数据开始于SS的下降沿
  76   1       delay(10);//SS先拉低,500nS最少
  77   1       Write_ISDaddress(address);
  78   1       Write_ISDcommand(0xe0); //setplay==0xe0;
  79   1       SS=1;    //两指令之间为高
  80   1       delay(15000);//SS高电平最少1uS
  81   1       SS=0;     //写数据开始于SS的下降沿
  82   1       delay(10);//SS先拉低,500nS最少
  83   1       Write_ISDaddress(address);
  84   1       Write_ISDcommand(0xf0);      //play==0xf0;
  85   1       SS=1;    //数据传输结束于SS上升沿
  86   1       delay(15000);//SS高电平最少1uS
  87   1      }
  88          void record4004(unsigned int address)
  89          {
  90   1       ISD_PowerUp();
  91   1       ISD_PowerUp();
  92   1       SS=0;     //写数据开始于SS的下降沿
  93   1       delay(10);//SS先拉低,500nS最少
  94   1       Write_ISDaddress(address);
  95   1       Write_ISDcommand(0xa0); //setrec==0xa0;
  96   1       SS=1;    //两指令之间为高
  97   1       delay(15000);//SS高电平最少1uS
  98   1       SS=0;     //写数据开始于SS的下降沿
  99   1       delay(10);//SS先拉低,500nS最少
 100   1       Write_ISDaddress(address);
 101   1       Write_ISDcommand(0xb0);   //rec==0xb0;
 102   1       SS=1;    //数据传输结束于SS上升沿
 103   1       delay(15000);//SS高电平最少1uS
 104   1      }
 105          void stopISD(void)
 106          {
 107   1       SS=0;     //写数据开始于SS的下降沿
 108   1       delay(10);//SS先拉低,500nS最少
 109   1       Write_ISDaddress(0x0000);
 110   1       Write_ISDcommand(0x30);   //stop==0x30;
 111   1       SS=1;    //数据传输结束于SS上升沿
 112   1       delay(15000);//SS高电平最少1uS
 113   1      } 
 114          void PowrnDownISD(void)
 115          {
 116   1       SS=0;     //写数据开始于SS的下降沿
 117   1       delay(10);//SS先拉低,500nS最少
C51 COMPILER V8.02   ISD4004                                                               06/02/2008 11:06:07 PAGE 3   

 118   1       Write_ISDaddress(0x0000);
 119   1       Write_ISDcommand(stoppw);   //0x10;
 120   1       SS=1;    //数据传输结束于SS上升沿
 121   1       delay(15000);//SS高电平最少1uS
 122   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    267    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -