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

📄 main.lst

📁 ISD1700语音芯片驱动程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 378   1              TL0=0;
 379   1      }
 380          
 381          void Timer1_Init(void)
 382          {
 383   1              TMOD |=0x50;
 384   1              TCON |=0x44;
 385   1              TH1=0;
 386   1              TL1=0;
 387   1      }
 388          
 389          void Interupt_Init(void)
 390          {
 391   1               EX0 = 1;
 392   1         //EX1 = 1;
 393   1         ES = 1;         //开串口中断允许
 394   1         EA = 1;         //中断总允许/禁止位
 395   1      }
 396          /*
 397          void SendChar(unsigned char temp)
 398          {
 399             SBUF = temp;
 400             while(!TI);
 401             TI=0;
 402          }
 403          */
 404          void SendString (unsigned char *str, unsigned char strlen)
 405          {
 406   1        unsigned char m = 0;
 407   1              do
 408   1              {
 409   2                 SBUF = *(str + m); 
 410   2                 while(!TI);
 411   2                 TI = 0;         
 412   2                 m ++;
 413   2              }
 414   1              while (m < strlen);
 415   1      }
 416          //-----------------------------------------------------------------------------
 417          //   串口中断服务        UATR_ISR()     interrupt 4  串口中断
 418          //-----------------------------------------------------------------------------
 419          void UATR0_ISR(void)  interrupt 4
 420          {
 421   1              if(RI)
 422   1              {                                           
 423   2                      RI = 0;
 424   2                      Uart_Temp =SBUF;
 425   2                      if (Uart_Coun<8)
 426   2                      {
 427   3                         serial_rx_buff[Uart_Coun]=Uart_Temp;
C51 COMPILER V7.07   MAIN                                                                  12/19/2008 15:13:10 PAGE 8   

 428   3                         Uart_Coun++;
 429   3                      }
 430   2                      if (Uart_Coun >=8)
 431   2                      {
 432   3                         Uart_Flag=1;
 433   3                         Uart_Coun=0;
 434   3                      }               
 435   2              }
 436   1      }
 437          
 438          void INIT0_ISR(void) interrupt 0
 439          {
 440   1              KEY_Value=P3&0x0f;
 441   1              IE0=0;
 442   1      }
 443          
 444          //void INIT1_ISR(void) interrupt 2
 445          //{
 446          //;
 447          //}
 448          
 449          /************************************************************************** 
 450          *    函数原型: void ISD_Stop(void); 
 451          *    功    能: 停止 
 452          **************************************************************************/ 
 453          
 454          void ISD_Stop(void)
 455          {       
 456   1          ISD_SendData(STOP); 
 457   1          ISD_SendData(0x00); 
 458   1          SS=1; 
 459   1          delay_ms(100); 
 460   1      } 
 461          
 462          /************************************************************************** 
 463          *    函数原型: void ISD_Reset(void); 
 464          *    功    能: 复位    前:any 后:PD状态
 465          **************************************************************************/ 
 466          void ISD_Reset(void)
 467          { 
 468   1          ISD_SendData(RESET); 
 469   1          ISD_SendData(0x00); 
 470   1          SS=1; 
 471   1          delay_ms(50); 
 472   1      } 
 473          
 474          /************************************************************************** 
 475          *    函数原型: void ISD_PD(void); 
 476          *    功    能: 掉电    前:any,但是如果是REC,PLAY,ERASE指令则执行后才下电 后:PD状态
 477          **************************************************************************/ 
 478          
 479          void ISD_PD(void)
 480          { 
 481   1           ISD_SendData(PD); 
 482   1           ISD_SendData(0x00); 
 483   1           SS=1; 
 484   1      } 
 485          
 486          /************************************************************************** 
 487          *    函数原型: void ISD_SendData(uchar BUF_ISD); 
 488                MOSI的数据在SCLK上升沿进入录音芯片,MISO的数据在SCLK的下降沿进入主控芯片。8位一字节,先发低位 
 489          *    功    能: 发送数据           注意:平时SS=1,SCLK=1,MOSI=0 
C51 COMPILER V7.07   MAIN                                                                  12/19/2008 15:13:10 PAGE 9   

 490          **************************************************************************/ 
 491          unsigned char ISD_SendData(unsigned char BUF_ISD)
 492          { 
 493   1            unsigned char i,dat=BUF_ISD; 
 494   1            SCLK=1; 
 495   1            SS=0; 
 496   1            for(i=0;i<8;i++)
 497   1           { 
 498   2              SCLK=0; 
 499   2              delay_ms(1); 
 500   2              if(dat&0x01)
 501   2               {     MOSI=1;   }                                        
 502   2              else
 503   2               {     MOSI=0;   }                                       
 504   2              dat>>=1; 
 505   2              if(MISO)
 506   2                {  dat|=0x80;  }                                          
 507   2              SCLK=1; 
 508   2              delay_ms(1); 
 509   2            } 
 510   1            MOSI=0;        //平时应保持MOSI为低
 511   1      //     SS=1; //不放在这里是因为一条指令是由发送指令码加发送数据地址等组成
 512   1            return(dat);    //在MOSI的同时,dat已一位一位的右移,变成了MISO的值了
 513   1      } 
 514          
 515          /************************************************************************** 
 516          *    函数原型: void ClrInt(void); 
 517          *    功    能: 清除中断 任何情况都可以进行 且执行后不影响状态  
 518          **************************************************************************/ 
 519          void ClrInt(void)
 520          { 
 521   1              ISD_SendData(CLR_INT); 
 522   1              ISD_SendData(0x00); 
 523   1              SS=1; 
 524   1              delay_ms(10);               //延迟10ms 
 525   1      } 
 526          
 527          /************************************************************************** 
 528          *    函数原型: void ISD_WR_APC2(uchar voiceValue); 
 529          *    功    能: 设置APC2  前:idle  后:idle
 530          **************************************************************************/ 
 531          void ISD_WR_APC2(unsigned char voiceValue)  
 532          { //初始化之前的指令都不影响状态,且上电后为RDY=1,所以不用检查RDY
 533   1          ISD_SendData(WR_APC2); 
 534   1          ISD_SendData(0xa8|voiceValue);//0xa8声音最大,0xaf声音最小 
 535   1          ISD_SendData(0x0c);           //D11=1,在SETPLAY模式下,执行到EOM自动结束。或者在连续两个SET_PLAY命令后
             -,执行到第一个EOM自动跳到第二段开始 
 536   1          SS=1; 
 537   1          delay_ms(10);                 //延迟10ms 
 538   1      }     
 539          
 540          
 541          /************************************************************************** 
 542          *    函数原型: delay_ms(unsigned int t) 
 543          *    功    能: 延时    约1ms   具体 j可改变,参数也可变 参考
 544          **************************************************************************/ 
 545          void delay_ms(unsigned int t)    
 546          {   unsigned int j;
 547   1          for(;t>0;t--)
 548   1          for(j=400;j>0;j--);
 549   1      }
 550          
C51 COMPILER V7.07   MAIN                                                                  12/19/2008 15:13:10 PAGE 10  

 551          /************************************************************************** 
 552          *   END 
 553          **************************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    899    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     24       6
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   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 + -