📄 1730.c
字号:
#include<SPI.H>
#include <reg52.H>
#include <absacc.h>
#include <intrins.h>
#include <math.h>
sbit SS=P2^3;
sbit SCLK=P2^2;
sbit MOSI= P2^1;
sbit MISO =P2^0;
uchar bdata SR0_L;
uchar bdata SR0_H;
uchar bdata SR1;
/*************延时n ms子函数**************************/
void delay_ms(unsigned int tt)//延时1ms
{
unsigned char j;
while(tt--)
{
for(j=0;j<125;j++);
}
}
void I_delay(void)
{
unsigned char i;
for(i=0;i<18;i++)
_nop_();
}
/**************************************************************************
* 函数原型: void ISD_ERASE(void)
* 功 能: 擦出当前段
**************************************************************************/
void ISD_ERASE(void)
{
ISD_SendData (0x52);
ISD_SendData (0x00);
SS=1;
delay_ms(10);
}
/**************************************************************************
* 函数原型: void init_serialcomm(void)
* 功 能: 串口
**************************************************************************/
void init_serialcomm(void)
{
SCON = 0x40; //选择串口工作于方式1
TMOD = 0x20; //定时器T1 设置为工作方式2,用作波特率发生器
PCON = 0x00; //SMOD=1;
TH1 = 0xFd; //按照波特率为9600 计算初值
TL1 = 0xFd;
// IE |= 0x80; //Enable Serial Interrupt
EA = 1;
ES=1;
TR1 = 1; // timer 1 run
}
void send_char_com(uchar ch)
{
TI=0;
SBUF=ch;
}
/*/**************************************************************************
* 函数原型: void RD_APC(void);
* 功 能: 读取APC
**************************************************************************/
void ISD_FWD(void)
{ ISD_SendData(0x58);
ISD_SendData(0x00);
SS=1;
delay_ms(10) ;
}
/*/**************************************************************************
* 函数原型: void RD_APC(void);
* 功 能: 读取APC
**************************************************************************/
void RdAPC(void){
uchar APCH,APCL;
ISD_SendData(RD_APC);
ISD_SendData(0x00);
ISD_SendData(0x00);
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延迟10ms
SR0_L =ISD_SendData(RD_APC);
SR0_H =ISD_SendData(0x00);
APCL =ISD_SendData(0x00);
APCH =ISD_SendData(0x00);
SS=1;
delay_ms(10); //延迟10ms
SBUF=SR0_H;
delay_ms(500);
SBUF=SR0_L;
delay_ms(500);
SBUF=APCH;
delay_ms(500);
SBUF=APCL;
}
/**************************************************************************
* 函数原型:void ISD_STOP(void)
* 功 能: 停止当前操作
**************************************************************************/
void ISD_STOP(void)
{
ISD_SendData(STOP);
ISD_SendData(0X00);
SS=1;
delay_ms(20);
}
/**************************************************************************
* 函数原型: uchar RD_DevID(void)
* 功 能: 读ID
**************************************************************************/
uchar RD_DevID(void)
{ uchar ID;
ISD_SendData(RD_DEVID);
ISD_SendData(0x00);
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延迟10ms
SR0_L =ISD_SendData(RD_DEVID);
SR0_H =ISD_SendData(0x00);
ID =ISD_SendData(0x00);
SS=1;
delay_ms(10);
return(ID);
}
/**************************************************************************
* 函数原型: void ISD_Reset(void)
* 功 能: 复位
**************************************************************************/
void ISD_Reset(void)
{
ISD_SendData(0x13);
ISD_SendData(0x00);
SS=1;
delay_ms(50) ;
}
/**************************************************************************
* 函数原型: void ISD_WR_NVCFG(void);
* 功 能: 永久写入寄存器
**************************************************************************/
void ISD_WR_NVCFG(void)
{
ISD_SendData(WR_NVCFG);
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延迟10ms
}
/**************************************************************************
* 函数原型: void ISD_Init(void);
* 功 能: 初始化
**************************************************************************/
void ISD_Init(void)
{
ISD_Reset();
do{
P1=0;
ISD_PU();
RdStatus();
}while((SR0_L&0x01)||(!(SR1&0x01))); //if(SR0_L^0==1){system Err}<CMD_Err==1>
SBUF=RD_DevID();//读取芯片ID,----1760为0xa0
ClrInt();
ISD_WR_APC2();
RdAPC();
}
/**************************************************************************
* 函数原型: void SetREC(uchar cNum);
* 功 能: 定点录音
**************************************************************************/
void SetREC(void)
{
uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;
do{
RdStatus();
}while((SR0_L&0x01)||(!(SR1&0x01)));
ClrInt();
Add_ST_L=0x00;
Add_ED_L=0xFF;
Add_ST_H=0X00;
Add_ED_H=0X00;
ISD_SendData(0x91);
ISD_SendData(0x00);
ISD_SendData(Add_ST_L); //S7:S0 开始地址
ISD_SendData(Add_ST_H); //S10:S8
ISD_SendData(Add_ED_L); //E7:E0 结束地址
ISD_SendData(Add_ED_H); //E10:E8
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延迟10ms
do{
RdStatus();
}while((SR0_L&0x01)||(!(SR1&0x01))); //if(SR0_L^0==1){system Err}<CMD_Err==1>
}
/**************************************************************************
* 函数原型: void SetPLAY(uchar cNum);
* 功 能: 定点播放
**************************************************************************/
void SetPLAY(void)
{
uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;
do{
RdStatus();
}while((SR0_L&0x01)||(!(SR1&0x01))); //if(SR0_L^0==1){system Err}<CMD_Err==1>
ClrInt();
Add_ST_L=0x00;
Add_ED_L=0xFF;
Add_ST_H=0X00;
Add_ED_H=0X00;
ISD_SendData(0x90);
ISD_SendData(0x00);
ISD_SendData(Add_ST_L); //S7:S0 开始地址
ISD_SendData(Add_ST_H); //S10:S8
ISD_SendData(Add_ED_L); //E7:E0 结束地址
ISD_SendData(Add_ED_H); //E10:E8
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延迟10ms
do{
RdStatus();
}while((SR0_L&0x01)||((SR1&0x04)));
}
/****************************************************************************
*函数类型:void ISD_REC(void);
*从当前开始录音;,
******************************************************************************/
void ISD_REC(void)
{
ISD_SendData(0x41);
ISD_SendData(0x00);
SS=1;
delay_ms(10);
}
/****************************************************************************
*函数类型:void ISD_WR_APC2(void);
*写APC寄存器,
******************************************************************************/
void ISD_WR_APC2(void)
{
ISD_SendData(0x75);
ISD_SendData(0x47);
ISD_SendData(0x04);
SS=1;
delay_ms(20);
ISD_WR_NVCFG();
}
/****************************************************************************
*函数类型:void ISD_PLAY(void);
*播放当前端语音
******************************************************************************/
void ISD_PLAY(void)
{
ISD_SendData(0x40);
ISD_SendData(0x00);
SS=1;
delay_ms(10);
}
/**************************************************************************
* 函数原型: void ISD_PU(void);
* 功 能: 上电
**************************************************************************/
void ISD_PU(void)
{
ISD_SendData(0x11);
ISD_SendData(0x00);
SS=1;
delay_ms(50);
}
/**************************************************************************
* 函数原型: void ISD_PD(void);
* 功 能: 掉电
**************************************************************************/
void ISD_PD(void)
{
ISD_SendData(PD);
ISD_SendData(0x00);
SS=1;
}
/**************************************************************************
* 函数原型: void ISD_SendData(uchar BUF_ISD);
* 功 能: 发送数据
**************************************************************************/
uchar ISD_SendData(uchar BUF_ISD)
{
uchar i,dat=BUF_ISD;
SCLK=1;
SS=0;
for(i=0;i<8;i++){
SCLK=0;
I_delay();
if(dat&0x01){
MOSI=1;
}
else{
MOSI=0;
}
dat>>=1;
if(MISO){
dat|=0x80;
}
SCLK=1;
I_delay();
}
MOSI=0;
return(dat);
}
/**************************************************************************
* 函数原型: void RdStatus(void);
* 功 能: 读取状态
**************************************************************************/
void RdStatus(void)
{
ISD_SendData(RD_STATUS);
ISD_SendData(0x00);
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延迟10ms
SR0_L =ISD_SendData(RD_STATUS);
SR0_H =ISD_SendData(0x00);
SR1 =ISD_SendData(0x00);
SS=1;
delay_ms(10);
/* SBUF=SR0_H;
delay_ms(500);
ES=1;
SBUF=SR0_L;
delay_ms(500);
ES=1;
SBUF=SR1; */
}
/**************************************************************************
* 函数原型: void ISD_RD_PLAY_PTR(void)
* 功 能: 读取状态寄存器,当前地址和播放指针;
**************************************************************************/
void ISD_RD_PLAY_PTR(void)
{
uchar APCH,APCL;
ISD_SendData(0X16);
ISD_SendData(0X00);
ISD_SendData(0X00);
ISD_SendData(0X00);
SS=1;
SBUF=SR0_H;
delay_ms(500);
SBUF=SR0_L;
delay_ms(500);
SBUF=APCH;
delay_ms(500);
SBUF=APCL;
// while(1);
}
/**************************************************************************
* 函数原型: void ClrInt(void);
* 功 能: 清除中断
**************************************************************************/
void ClrInt(void)
{
ISD_SendData(CLI_INT);
ISD_SendData(0x00);
SS=1;
delay_ms(10); //延迟10ms
}
/**************************************************************************
* 函数原型: void Erase_All(void);
* 功 能: 全部删除
**************************************************************************/
void Erase_All(void)
{
ISD_SendData(G_ERASE);
ISD_SendData(0x00);
SS=1;
delay_ms(100); //延迟10ms
}
/**************************************************************************
* END
* END
**************************************************************************/
void com(void) interrupt 4 using 2
{
TI=0;
ES=0;
}
void main(void)
{
delay_ms(10);
ISD_PU();
delay_ms(50);
do {
ISD_PU();
RdStatus();
}while((SR0_L&0x01)||(!(SR1&0x01)));
ISD_REC();
/* do {
ISD_REC();
}while(SR0_L&0x01);
do {
RdStatus();
}while((SR0_L&0x01)||(!(SR1&0x08)));*/
delay_ms(100000);
ISD_STOP();
delay_ms(3000);
ISD_PLAY();
delay_ms(3000);
// ISD_ERASE();
// ISD_STOP();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -