?? 語音芯片isd4004.txt
字號:
//語音芯片ISD4004
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SS=P0^0; //端口定義
sbit MOSI=P0^1;
sbit MISO=P0^2;
sbit SCLK=P0^3;
sbit INT=P0^4;
void delay_ms(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
{
j=108;
while(j--);
}
}
void send_data(uint addr,uchar adata) //發送24位命令格式
{
unsigned char i=16,j=8;
SCLK=1;
SS=0;
while(i--) //發送16位地址
{
if(addr&0x0001)
MOSI=1;
else
MOSI=0;
SCLK=0;
addr>>=1;
_nop_();
SCLK=1;
}
while(j--) //發送8位控制格式
{
if(adata&0x01)
MOSI=1;
else
MOSI=0;
SCLK=0;
adata>>=1;
_nop_();
SCLK=1;
}
SS=1; //啟動錄放音
}
void fangyin(uint addr)
{
send_data(0x0000,0x20); //POWER UP
delay_ms(25); //8KHz時延時 25ms
send_data(addr,0xe0); //SET PLAY
send_data(0x0000,0xf0) ; //PLAY
while(INT); //等待EOM段放音結束 暫未考慮錄滿情況(VOF)
//也可以監控 RAC口 8.0KHz 行輸出
//也可以監控 MISO口標志位(EOM、VOF)
}
void luyin(uint addr)
{
send_data(0x0000,0x20); //POWER UP
delay_ms(25); //8KHz時延時 25ms
send_data(0x0000,0x20); //POWER UP
delay_ms(50); //延時 2倍
send_data(addr,0xa0); //SET REC
send_data(0x0000,0xf0); //REC
while(INT); //等待EOM段錄音結束 暫未考慮錄滿情況(VOF)
}
void main()
{
SS=1;
SCLK=1;
EA=0; //設置系統不接受所有的中斷
EX0=1; //設置接受INT0的中斷
IT0=1; //設置外部中斷0為邊沿觸發方式
while(1)
{
/*********************應用程序舉例************************************/
luyin(0x0123); //設置錄音起始地址,并開始錄音
fangyin(0x0123); //設置放音起始地址,并開始放音
//不停的調用放音地址可以實現連續播放
/********************* 邊錄邊放 ************************************/
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -