㈠ 使用51单片机控制ISD1760实现语音播放时,1760的SP+不能使8欧0.25w的扬声器发声,但是通过9012三极管放大后
驱动能力还是比较低的,一般可以加一个LM386来放大一下。
㈡ isd1760语音芯片的上位机软件如何使用
你好!
1、首先 isd1760 只是一个语音芯片,不具备MCU的功能
2、isd1760 接入单片机,然后用单片机发指令控制芯片
3、上位机通过串口和单片机连接,通过上位机间接控制芯片
㈢ 基于52单片机ISD1760语音芯片的原理图和程序代码。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
//******************定义端口******************//
sbit SS = P1^0;
sbit SCK = P1^1;
sbit MOSI = P1^2;
sbit MISO = P1^3;
sbit PR = P1^4;//PLAY = 0;REC = 1;
sbit STOP = P1^5;
sbit AN = P1^6;
sbit LED = P1^7;
//******************定义ISD1700状态寄存器及各标志位******************//
uchar bdata SR0_L;//SR0寄存器低位、高位
uchar bdata SR0_H;
uchar bdata SR1;//SR1寄存器
uchar APC_L = 0, APC_H = 0;//APC寄存器
uchar PLAYADDL = 0, PLAYADDH = 0;//放音指针低位、高位
uchar RECADDL = 0, RECADDH = 0;//录音指针低位、高位
sbit CMD_ERR = SR0_L^0;//SPI指令无效标志位
sbit FULL = SR0_L^1;//芯片存储空间满标志位
sbit PU = SR0_L^2;//上电标志位
sbit EOM = SR0_L^3;//EOM标志位
sbit INT = SR0_L^4;//操作完成标志位
sbit RDY = SR1^0;//芯片空闲标志位
sbit ERASE = SR1^1;//擦除标志位
sbit PLAY = SR1^2;//放音标志位
sbit REC = SR1^3;//录音标志位
//******************定义标志位******************//
uchar bdata fang;
sbit PR_fang = fang^1;//录音、放音标志位,放音=0,录音=1
sbit Erase_fang = fang^4;//擦出标志位
sbit STOP_fang = fang^7;//停止放音标志位
//******************延时μs******************//
void delay(uint time)//延时n微秒
{
while(time!=0)
{
time--;
}
}
//******************延时ms******************//
void delayms(uint time)//延时n毫秒
{
for(time; time>0; time--)
{
TH0 = 0xfc;
TL0 = 0x18;
TR0 = 1;//计数器0启动
while(TF0!=1);//计数溢出处理
TF0 = 0;
TR0 = 0;
}
}
//******************CPU初始化******************//
void cpu_init (void)
{
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
TMOD = 0x01;//定时器初始化,工作于方式1
EA = 0;//关中断
fang = 0;//标志位归0
LED = 1;//关指示灯
}
//******************发送、读回数据******************//
uchar isd_senddata (uchar dat)
{
uchar i, BUF_ISD = dat;
SS = 0;
SCK = 1;
delay(4);
for(i=0; i<8; i++)
{
SCK = 0;
if((BUF_ISD&0x01)==1)
{
MOSI = 1;
}
else
{
MOSI = 0;
}
BUF_ISD = BUF_ISD >> 1;
if(MISO)
{
BUF_ISD = BUF_ISD|0x80;
}
SCK = 1;
delay(6);
}
MOSI = 0;
return(BUF_ISD);
}
//******************上电******************//
void isd_pu (void)
{
isd_senddata (0x01);
isd_senddata (0x00);
SS = 1;
delayms(50);
}
//******************停止当前操作******************//
void isd_stop (void)
{
isd_senddata (0x02);
isd_senddata (0x00);
SS = 1;
delayms(50);
}
//******************复位******************//
void isd_reset (void)
{
isd_senddata (0x03);
isd_senddata (0x00);
SS = 1;
}
//******************清除中断******************//
void isd_clr_int (void)
{
isd_senddata (0x04);
isd_senddata (0x00);
SS = 1;
}
//******************读状态寄存器内容******************//
void isd_rd_status (void)
{
isd_senddata (0x05);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x05);
SR0_H = isd_senddata (0x00);
SR1 = isd_senddata (0x00);
SS = 1;
}
//******************读放音指针******************//
void isd_rd_playptr (void)
{
isd_senddata (0x06);
isd_senddata (0x00);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x06);
SR0_H = isd_senddata (0x00);
PLAYADDL = isd_senddata (0x00);
PLAYADDH = isd_senddata (0x00);
SS = 1;
}
//******************下电******************//
void isd_pd (void)
{
isd_senddata (0x07);
isd_senddata (0x00);
SS = 1;
delayms(50);
}
//******************读录音指针******************//
void isd_rd_recptr (void)
{
isd_senddata (0x08);
isd_senddata (0x00);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x08);
SR0_H = isd_senddata (0x00);
RECADDL = isd_senddata (0x00);
RECADDH = isd_senddata (0x00);
SS = 1;
}
//******************读芯片ID******************//
uchar isd_devid (uchar deviceNO)
{
isd_senddata (0x09);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
isd_senddata (0x09);
isd_senddata (0x00);
deviceNO = isd_senddata (0x00);
SS = 1;
return(deviceNO);
}
//******************放音******************//
void isd_play (void)
{
isd_senddata (0x40);
isd_senddata (0x00);
SS = 1;
}
//******************录音******************//
void isd_rec (void)
{
isd_senddata (0x41);
isd_senddata (0x00);
SS = 1;
}
//******************擦除******************//
void isd_erase (void)
{
isd_senddata (0x42);
isd_senddata (0x00);
SS = 1;
}
//******************全部擦出******************//
void isd_g_erase (void)
{
isd_senddata (0x43);
isd_senddata (0x00);
SS = 1;
}
//******************读APC寄存器内容******************//
void isd_rd_apc (void)
{
isd_senddata (0x44);
isd_senddata (0x00);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x44);
SR0_H = isd_senddata (0x00);
APC_L = isd_senddata (0x00);
APC_H = isd_senddata (0x00);
SS = 1;
}
//******************写APC寄存器******************//
void isd_wr_apc2 (uchar apcdatl,apcdath)
{
isd_senddata (0x65);
isd_senddata (apcdatl);
isd_senddata (apcdath);
SS = 1;
}
//******************将APC寄存器内容写入NVCFG******************//
void isd_wr_nvcfg (uchar apcdatl,apcdath)
{
isd_senddata (0x46);
isd_senddata (apcdatl);
isd_senddata (apcdath);
SS = 1;
}
//******************将NVCFG内容写入APC******************//
void isd_ld_nvcfg (void)
{
isd_senddata (0x47);
isd_senddata (0x00);
SS = 1;
}
//******************快进******************//
void isd_fwd (void)
{
isd_senddata (0x48);
isd_senddata (0x00);
SS = 1;
}
//******************空检查******************//
void isd_chk_mem (void)
{
isd_senddata (0x49);
isd_senddata (0x00);
SS = 1;
}
//******************外部时钟的启用、关闭******************//
void isd_extclk (void)
{
isd_senddata (0x4a);
isd_senddata (0x00);
SS = 1;
}
//******************指定地址放音******************//
void isd_set_play (uchar saddl,saddh,eaddl,eaddh)
{
isd_senddata (0x80);
isd_senddata (0x00);
isd_senddata (saddl);
isd_senddata (saddh);
isd_senddata (eaddl);
isd_senddata (eaddh);
isd_senddata (0x00);
SS = 1;
}
//******************指定地址录音******************//
void isd_set_rec (uchar saddl,saddh,eaddl,eaddh)
{
isd_senddata (0x81);
isd_senddata (0x00);
isd_senddata (saddl);
isd_senddata (saddh);
isd_senddata (eaddl);
isd_senddata (eaddh);
isd_senddata (0x00);
SS = 1;
}
//******************指定地址擦除******************//
void isd_set_erase (uchar saddl,saddh,eaddl,eaddh)
{
isd_senddata (0x82);
isd_senddata (0x00);
isd_senddata (saddl);
isd_senddata (saddh);
isd_senddata (eaddl);
isd_senddata (eaddh);
isd_senddata (0x00);
SS = 1;
}
//******************芯片系统初始化******************//
void isd_init (void)
{
uchar i = 2;
SS = 1;
SCK = 1;
MOSI = 0;
do
{
isd_pu ();
isd_rd_status ();
}while(CMD_ERR||(!PU));
isd_wr_apc2 (0x40,0x04);
do
{
isd_rd_status ();
}while(RDY==0);
do
{
LED = 0;
delayms(300);
LED = 1;
delayms(300);
i--;
}while(i>0);
}
//******************isd1700的相关操作******************//
void isdwork (void)
{
uchar i;
switch (fang)
{
case 0x00:
{
do
{
isd_rd_status ();
}while(RDY==0);
delayms(10);
isd_play ();
delayms(2);
LED = 0;
do
{
isd_rd_status ();
if(STOP==0)
{
delayms (10);
if(STOP==0)
{
LED = 1;
isd_clr_int ();
isd_stop ();
isd_reset ();
isd_pd ();
isd_init ();
return;
}
}
}while(PLAY==1);
LED = 1;
isd_clr_int ();
do
{
isd_rd_status ();
}while(RDY==0);
delayms (10);
isd_fwd ();
do
{
isd_rd_status ();
}while(RDY==0);
}
break;
case 0x02:
{
isd_clr_int ();
do
{
isd_rd_status ();
}while(RDY==0);
delayms(10);
isd_rec ();
delayms(2);
LED = 0;
do
{
isd_rd_status ();
if(FULL==1)
{
for(i=3; i>0; i--)
{
LED = 0;
delayms (300);
LED = 1;
delayms (200);
}
}
}while(AN==0);
isd_clr_int ();
isd_stop ();
LED = 1;
}
break;
case 0x10:
{
do
{
isd_rd_status ();
}while(RDY==0);
delayms (10);
isd_g_erase ();
delayms (2);
do
{
isd_rd_status ();
}while(RDY==0);
for(i=3; i>0; i--)
{
LED = 0;
delayms (300);
LED = 1;
delayms (200);
}
}
break;
case 0x80:
{
isd_clr_int ();
isd_stop ();
isd_reset ();
isd_pd ();
}
break;
}
}
//******************主程序******************//
void main (void)
{
uchar i;
cpu_init ();
delayms (1);
isd_init ();
while(1)
{
if(AN==0)
{
delayms (10);
if(AN==0)
{
if(PR==1)
{
PR_fang = 1;
}
else
{
PR_fang = 0;
}
isdwork ();
}
}
if(STOP==0)
{
delayms (10);
if(STOP==0)
{
for(i=100; i>0; i--)
{
if(STOP==1)
{
STOP_fang = 1;
isdwork ();
isd_init ();
break;
}
delayms(30);
}
if (STOP_fang==1)
{
fang = 0;
continue;
}
Erase_fang = 1;
isdwork ();
}
}
}
}
这个是按键录放的例程,你可以根据这个例程自己修改一下
㈣ ISD1760的问题解决了吗我现在也在用 能读到ID 但其他的都没反应了 你能给点信息吗 校友哈哈
额、我们之前用的时候出现这种问题最后检查出来好像是和单片机连接的四根杜邦线接触不好、、
㈤ 请问和单片机相连的语音芯片哪个比较简单好用,ISD系列的哪个简单好用求连接图
isd系列的有ISD25xxISD14xxISD17xxISD40xx等系列,前2种已停产,不推荐使用。ISD17xxISD40xx都可以使用SPI接口与单片机连接,此外,ISD1700系列还可以使用独立按键控制,完全不用单片机都可以,音质也不错,推荐使用此款,如ISD1730,ISD1760...根据需要选择合适的录音时长的具体芯片。
㈥ 求stc12c5a60s2单片机与ISD1760语音模块的接法,谢谢
MCU ISD1760
-----------------------
P1.0 SS
P1.1 MISO
P1.2 MOSI
P1.3 SCLK
㈦ 单片机控制语音模块
单片机控制语音模块功能特点:
1、语音内容存储在外挂SPI FLASH中,可重复擦写100000次以上,保存时间超过100年;
2、主控芯片采用九芯高性能语音DSP,NV020作为主控;
3、简洁易用的操作方式(三线串口);
4、可以存入WAV、ADPCM格式的文件,语音可以组合播放以节省存储空间;
5、两种输出方式(DAC以及PWM输出,DAC可外接功放输出,PWM可直接驱动0.5W喇叭);
6、可外挂1Mbit~128Mbit容量SPI FLASH闪存,语音时长40秒~2560秒(6K采样率计算);
7、灵活的分段放音操作,可方便地控制任意段语音播放,语音组合极大地节省空间;
8、音质好、性能高,物美价廉;
9、 有忙状态电平信号指示;
10、内置DSP高速处理器,响应时间极短,接收完指令到播放,响应时间控制在微秒级范围;
11、电压工作范围2.7V~3.6V;
12、静态电流30uA,可满足大多数低功耗场合。
㈧ 单片机控制ISD1760语音芯片
5.2 语音芯片ISD1760介绍
ISD1700系列芯片是Winbond推出的单片优质语音录放电路,该芯片提供多项新功能,包括内置专利的多信息管理系统,新信息提示(vAlert),双运作模式(独立&嵌入式),以及可定制的信息操作指示音效。芯片内部包含有自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内存等的全方位整合系统功能。
5.2.1 特点
可录、放音十万次,存储内容可以断电保留一百年。两种控制方式,两种录音输入方式,两种放音输出方式可处理多达255 段以上信息,有丰富多样的工作状态提示,多种采样频率对应多种录放时间,音质好,电压范围宽,应用灵活,价廉物美。
5.2.2 电特性
工作电压:2.4V-5.5V,最高不能超过6V,静态电流:0.5 - 1 μA,工作电流:20mA,
用户可利用震荡电阻来自定芯片的采样频率,从而决定芯片的录放时间。
5.2.3 独立按键工作模式
ISD1760 的独立按键工作模式录放电路非常简单,而且功能强大。不仅有录、放功能,还有快进、擦除、音量控制、直通放音和复位等功能。这些功能仅仅通过按键就可完成。
(1) 录音操作
按下录音键后,开始录制当前段编号对应的段的语音。
(2) 放音操作
按下此键后播放当前段编号对应的语音,如果在语音播放过程中按此键则可以停止播放。
(3) 擦除键
按下此键后擦除当前段编号对应的语音,如果按住此键保持2s后,则擦除存储器内除提示音以外的所有语音。
(4) 音量调节键
按住此键,则音量自动有大变小,到最小后,音量再增大。
(5) 下一段键
按下此键后,段编号会自动加1,播放下一段语音。如果按住此键不放,段编号会自动连续加1,直到按键释放为止,当前段编号为最大时再按此键无效。
主控单片机主要通过四线(SCLK,MOSI,MISO,/SS)SPI协议对ISD1760进行串行通信。ISD1760作为从机,几乎所有的操作都可以通过这个SPI协议来完成。为了兼容独立按键模式,一些SPI命令:PLAY,REC,ERASE,FWD,RESET和GLOBAL_ERASE的运行类似于相应的独立按键模式的操作。另外,SET_PLAY,SET_REC,SET_ERASE命令允许用户指定录音、放音和擦除的开始和结束。此外,还有一些命令可以访问APC寄存器,用来设置芯片模拟输入的方式。ISD1700系列的SPI串行接口操作遵照以下协议:
一个SPI处理开始于/SS管脚的下降沿。在一个完整的SPI指令传输周期,/SS管脚必须保持低电平。
数据在SCLK的上升沿锁存在芯片的MOSI管脚,在SCLK的下降沿从MISO管脚输出,并且首先移出低位。SPI指令操作码包括命令字节,数据字节和指令字节,这决定于1760的指令类5、当命令字及数据输入到MOSI管脚时,同时状态寄存器和当前行信息从MISO管脚移出。一个SPI处理在/SS变高后启动。在完成一个SPI命令的操作后,会启动一个中断信息,并且持续保持为低,直到芯片收到CLR_INT命令或者芯片复位。
㈨ 基于51单片机控制ISD1760的c程序
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
//******************定义端口******************//
sbit SS = P1^0;
sbit SCK = P1^1;
sbit MOSI = P1^2;
sbit MISO = P1^3;
sbit PR = P1^4;//PLAY = 0;REC = 1;
sbit STOP = P1^5;
sbit AN = P1^6;
sbit LED = P1^7;
//******************定义ISD1700状态寄存器及各标志位******************//
uchar bdata SR0_L;//SR0寄存器低位、高位
uchar bdata SR0_H;
uchar bdata SR1;//SR1寄存器
uchar APC_L = 0, APC_H = 0;//APC寄存器
uchar PLAYADDL = 0, PLAYADDH = 0;//放音指针低位、高位
uchar RECADDL = 0, RECADDH = 0;//录音指针低位、高位
sbit CMD_ERR = SR0_L^0;//SPI指令无效标志位
sbit FULL = SR0_L^1;//芯片存储空间满标志位
sbit PU = SR0_L^2;//上电标志位
sbit EOM = SR0_L^3;//EOM标志位
sbit INT = SR0_L^4;//操作完成标志位
sbit RDY = SR1^0;//芯片空闲标志位
sbit ERASE = SR1^1;//擦除标志位
sbit PLAY = SR1^2;//放音标志位
sbit REC = SR1^3;//录音标志位
//******************定义标志位******************//
uchar bdata fang;
sbit PR_fang = fang^1;//录音、放音标志位,放音=0,录音=1
sbit Erase_fang = fang^4;//擦出标志位
sbit STOP_fang = fang^7;//停止放音标志位
//******************延时μs******************//
void delay(uint time)//延时n微秒
{
while(time!=0)
{
time--;
}
}
//******************延时ms******************//
void delayms(uint time)//延时n毫秒
{
for(time; time>0; time--)
{
TH0 = 0xfc;
TL0 = 0x18;
TR0 = 1;//计数器0启动
while(TF0!=1);//计数溢出处理
TF0 = 0;
TR0 = 0;
}
}
//******************CPU初始化******************//
void cpu_init (void)
{
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
TMOD = 0x01;//定时器初始化,工作于方式1
EA = 0;//关中断
fang = 0;//标志位归0
LED = 1;//关指示灯
}
//******************发送、读回数据******************//
uchar isd_senddata (uchar dat)
{
uchar i, BUF_ISD = dat;
SS = 0;
SCK = 1;
delay(4);
for(i=0; i<8; i++)
{
SCK = 0;
if((BUF_ISD&0x01)==1)
{
MOSI = 1;
}
else
{
MOSI = 0;
}
BUF_ISD = BUF_ISD >> 1;
if(MISO)
{
BUF_ISD = BUF_ISD|0x80;
}
SCK = 1;
delay(6);
}
MOSI = 0;
return(BUF_ISD);
}
//******************上电******************//
void isd_pu (void)
{
isd_senddata (0x01);
isd_senddata (0x00);
SS = 1;
delayms(50);
}
//******************停止当前操作******************//
void isd_stop (void)
{
isd_senddata (0x02);
isd_senddata (0x00);
SS = 1;
delayms(50);
}
//******************复位******************//
void isd_reset (void)
{
isd_senddata (0x03);
isd_senddata (0x00);
SS = 1;
}
//******************清除中断******************//
void isd_clr_int (void)
{
isd_senddata (0x04);
isd_senddata (0x00);
SS = 1;
}
//******************读状态寄存器内容******************//
void isd_rd_status (void)
{
isd_senddata (0x05);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x05);
SR0_H = isd_senddata (0x00);
SR1 = isd_senddata (0x00);
SS = 1;
}
//******************读放音指针******************//
void isd_rd_playptr (void)
{
isd_senddata (0x06);
isd_senddata (0x00);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x06);
SR0_H = isd_senddata (0x00);
PLAYADDL = isd_senddata (0x00);
PLAYADDH = isd_senddata (0x00);
SS = 1;
}
//******************下电******************//
void isd_pd (void)
{
isd_senddata (0x07);
isd_senddata (0x00);
SS = 1;
delayms(50);
}
//******************读录音指针******************//
void isd_rd_recptr (void)
{
isd_senddata (0x08);
isd_senddata (0x00);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x08);
SR0_H = isd_senddata (0x00);
RECADDL = isd_senddata (0x00);
RECADDH = isd_senddata (0x00);
SS = 1;
}
//******************读芯片ID******************//
uchar isd_devid (uchar deviceNO)
{
isd_senddata (0x09);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
isd_senddata (0x09);
isd_senddata (0x00);
deviceNO = isd_senddata (0x00);
SS = 1;
return(deviceNO);
}
//******************放音******************//
void isd_play (void)
{
isd_senddata (0x40);
isd_senddata (0x00);
SS = 1;
}
//******************录音******************//
void isd_rec (void)
{
isd_senddata (0x41);
isd_senddata (0x00);
SS = 1;
}
//******************擦除******************//
void isd_erase (void)
{
isd_senddata (0x42);
isd_senddata (0x00);
SS = 1;
}
//******************全部擦出******************//
void isd_g_erase (void)
{
isd_senddata (0x43);
isd_senddata (0x00);
SS = 1;
}
//******************读APC寄存器内容******************//
void isd_rd_apc (void)
{
isd_senddata (0x44);
isd_senddata (0x00);
isd_senddata (0x00);
isd_senddata (0x00);
SS = 1;
delay(2);
SR0_L = isd_senddata (0x44);
SR0_H = isd_senddata (0x00);
APC_L = isd_senddata (0x00);
APC_H = isd_senddata (0x00);
SS = 1;
}
//******************写APC寄存器******************//
void isd_wr_apc2 (uchar apcdatl,apcdath)
{
isd_senddata (0x65);
isd_senddata (apcdatl);
isd_senddata (apcdath);
SS = 1;
}
//******************将APC寄存器内容写入NVCFG******************//
void isd_wr_nvcfg (uchar apcdatl,apcdath)
{
isd_senddata (0x46);
isd_senddata (apcdatl);
isd_senddata (apcdath);
SS = 1;
}
//******************将NVCFG内容写入APC******************//
void isd_ld_nvcfg (void)
{
isd_senddata (0x47);
isd_senddata (0x00);
SS = 1;
}
//******************快进******************//
void isd_fwd (void)
{
isd_senddata (0x48);
isd_senddata (0x00);
SS = 1;
}
//******************空检查******************//
void isd_chk_mem (void)
{
isd_senddata (0x49);
isd_senddata (0x00);
SS = 1;
}
//******************外部时钟的启用、关闭******************//
void isd_extclk (void)
{
isd_senddata (0x4a);
isd_senddata (0x00);
SS = 1;
}
//******************指定地址放音******************//
void isd_set_play (uchar saddl,saddh,eaddl,eaddh)
{
isd_senddata (0x80);
isd_senddata (0x00);
isd_senddata (saddl);
isd_senddata (saddh);
isd_senddata (eaddl);
isd_senddata (eaddh);
isd_senddata (0x00);
SS = 1;
}
//******************指定地址录音******************//
void isd_set_rec (uchar saddl,saddh,eaddl,eaddh)
{
isd_senddata (0x81);
isd_senddata (0x00);
isd_senddata (saddl);
isd_senddata (saddh);
isd_senddata (eaddl);
isd_senddata (eaddh);
isd_senddata (0x00);
SS = 1;
}
//******************指定地址擦除******************//
void isd_set_erase (uchar saddl,saddh,eaddl,eaddh)
{
isd_senddata (0x82);
isd_senddata (0x00);
isd_senddata (saddl);
isd_senddata (saddh);
isd_senddata (eaddl);
isd_senddata (eaddh);
isd_senddata (0x00);
SS = 1;
}
//******************芯片系统初始化******************//
void isd_init (void)
{
uchar i = 2;
SS = 1;
SCK = 1;
MOSI = 0;
do
{
isd_pu ();
isd_rd_status ();
}while(CMD_ERR||(!PU));
isd_wr_apc2 (0x40,0x04);
do
{
isd_rd_status ();
}while(RDY==0);
do
{
LED = 0;
delayms(300);
LED = 1;
delayms(300);
i--;
}while(i>0);
}
//******************isd1700的相关操作******************//
void isdwork (void)
{
uchar i;
switch (fang)
{
case 0x00:
{
do
{
isd_rd_status ();
}while(RDY==0);
delayms(10);
isd_play ();
delayms(2);
LED = 0;
do
{
isd_rd_status ();
if(STOP==0)
{
delayms (10);
if(STOP==0)
{
LED = 1;
isd_clr_int ();
isd_stop ();
isd_reset ();
isd_pd ();
isd_init ();
return;
}
}
}while(PLAY==1);
LED = 1;
isd_clr_int ();
do
{
isd_rd_status ();
}while(RDY==0);
delayms (10);
isd_fwd ();
do
{
isd_rd_status ();
}while(RDY==0);
}
break;
case 0x02:
{
isd_clr_int ();
do
{
isd_rd_status ();
}while(RDY==0);
delayms(10);
isd_rec ();
delayms(2);
LED = 0;
do
{
isd_rd_status ();
if(FULL==1)
{
for(i=3; i>0; i--)
{
LED = 0;
delayms (300);
LED = 1;
delayms (200);
}
}
}while(AN==0);
isd_clr_int ();
isd_stop ();
LED = 1;
}
break;
case 0x10:
{
do
{
isd_rd_status ();
}while(RDY==0);
delayms (10);
isd_g_erase ();
delayms (2);
do
{
isd_rd_status ();
}while(RDY==0);
for(i=3; i>0; i--)
{
LED = 0;
delayms (300);
LED = 1;
delayms (200);
}
}
break;
case 0x80:
{
isd_clr_int ();
isd_stop ();
isd_reset ();
isd_pd ();
}
break;
}
}
//******************主程序******************//
void main (void)
{
uchar i;
cpu_init ();
delayms (1);
isd_init ();
while(1)
{
if(AN==0)
{
delayms (10);
if(AN==0)
{
if(PR==1)
{
PR_fang = 1;
}
else
{
PR_fang = 0;
}
isdwork ();
}
}
if(STOP==0)
{
delayms (10);
if(STOP==0)
{
for(i=100; i>0; i--)
{
if(STOP==1)
{
STOP_fang = 1;
isdwork ();
isd_init ();
break;
}
delayms(30);
}
if (STOP_fang==1)
{
fang = 0;
continue;
}
Erase_fang = 1;
isdwork ();
}
}
}
}
㈩ STC89C52单片机如何在线调试,初次接触,不太理解。
如果单片机与外部的联络通信也要用单片机的串口,就不能将串口与STC-ISP固定连接了,只能下载一次程序,再重新接线实验一次效果了,否则,如果单片机的串口端能够与STC-ISP固定连接时,只要勾选ISP软件上的“当目标代码发生变化时*******”的选项,只要Keil完成一次编译,ISP就会自动下载一次,真的很方便。