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

📄 isd4000语音与89c51单片机通用开发板源程序.txt

📁 ISD4000语音与89C51单片机通用开发板源程序
💻 TXT
字号:
 [转帖]ISD4000语音与89C51单片机通用开发板源程序 
技术资料转贴自:
http://www.qlmcu.com/
http://www.qlmcu.com/dvbbs/index.asp


ISD4000语音与89C51单片机通用开发板源程序
本板采用国内最常用的MCS-51语言单片机89C51,与最新的ISD4000系列语音芯片结合,可供用户开发各种最新的智能型数码语音产品。 
一、  结构
 板上已装配好:
89C51——单片机,8031内核,4K可反复擦写的程序存储器,32条I/O口,5V工作
ISD4003-08——语音芯片,音质优异的模拟存储技术,可反复录放,8分钟,可分1200段,SPI接口方式,3V供电
LM386——功率放大器,0.5W驱动
24C01(选配件)——I2C总线串行存储器。
还有驻极体话筒(MIC)、话筒放大器、音量电位器、发光管等部件。
 
二、  性能参数
外接电源电压:5V(稳压)
外接喇叭:4—16欧姆,0 .5W
工作电流:25~30mA ( 录音),50~80mA (放音)
静态电流:13mA
 
随板提供的演示程序功能:
 
1、录音
跳线插在“REC”一侧是录音状态,按住“AN”键不放,指示灯亮即可对着板上话筒讲话录音,松键时录音停止并形成一段。再按则录下一段。
按“STOP”键为复位,再录音时又从第一段开始。
 
2、放音
跳线插在“PLAY”一侧是放音状态,按一下“AN”键即播放一段,一段结束后自动停止放音,再按“AN”则播放下一段。
按“STOP”键为复位,再放音时又从第一段开始。
 
 
  
 89C51-ISD4000语音电路程序AT89C51单片机                   
  89C51单片机12MHz  
  
注:本程序为ISD4002、4003的控制程序,ISD4004的程序须加些改动,请注意程序后边的注释。
SS     EQU   P1.0             ;片选
SCLK   EQU   P1.1             ;ISD4003时钟
MOSI   EQU   P1.2             ;数据输入
MISO   EQU   P1.3             ;数据输出
LED    EQU   P1.7             ;指示灯
INT    EQU   INT0             ;中断
AN     EQU   P1.6             ;执行
STOP   EQU   P1.5             ;复位
PR     EQU   P1.4             ;PR=1录音  PR=0放音
 ;初始化
       ORG   0000H            ;
       AJMP  MAIN             ;
MAIN:  MOV   SP,#10H          ;
       MOV   P1,#0FFH         ;
       MOV   P2,#0FFH         ;
       MOV   P3,#0FFH         ;
       MOV   P0,#0FFH         ;
       CLR   EA               ;
MAII:  SETB  LED              ;关指示灯
       ACALL DSTOP            ;ISD掉电
MAS0:  MOV   3AH,#200         ;
MAS1:  JB    AN,MAS0          ;等按AN键
       DJNZ  3AH,MAS1         ;
       ACALL UP               ;ISD上电
       MOV   20H,#00H         ;ISD低位地址
       MOV   21H,#00H         ;ISD高位地址
       JB    PR,REC           ;PR=1 录音
       AJMP  PLAY             ;PR=0 放音
 ;SETREC  16位
 ;从指定地址录音  10100 < ;X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 >
REC:   MOV   A,20H            ;发地址 A7-A0
       ACALL ISDX             ;
       MOV   A,21H            ;发地址 A9-A8
       SETB  ACC.7            ;
       CLR   ACC.6            ;
       SETB  ACC.5            ;
       CLR   ACC.4            ;
       CLR   ACC.3            ;

       ACALL ISDX             ;
       SETB  SS               ;关片选
 ;REC   8位
 ;从当前地址录音  10110 < ;X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 >
REC1:  MOV   36H,#10          ;
REC2:  ACALL YS50             ;延时录音
       DJNZ  36H,REC2         ;
       CLR   LED              ;开指示灯
       MOV   A,#0B0H          ;发 1011 0XXX
       ACALL ISDX             ;
       SETB  SS               ;关片选
REC3:  MOV   35H,#200         ;
REC4:  JNB   INT,REC7         ;OVF=0芯片溢出
       JNB   AN,REC3          ;
       DJNZ  35H,REC4         ;
       SETB  LED              ;关指示灯
       ACALL STOPP            ;停止当前操作
REC5:  JNB   STOP,REC6        ;中断RESET
       JB    AN,REC5          ;等待AN=0
       ACALL STOPP            ;停止当前操作
       AJMP  REC1             ;
REC6:  CLR   SCLK             ;时钟SCLK=0
       SETB  SS               ;关片选
       ACALL STOPP            ;停止当前操作
       AJMP  MAII             ;
REC7:  SETB  LED              ;关指示灯
       MOV   36H,#15          ;
REC8:  ACALL YS50             ;延时录音
       JB    AN,REC6          ;等待AN=1
       DJNZ  36H,REC8         ;
       CLR   LED              ;
       MOV   36H,#15          ;
REC9:  ACALL YS50             ;延时录音
       JB    AN,REC6          ;等待AN=1
       DJNZ  36H,REC9         ;
       AJMP  REC7             ;
 ;SETPLAY  16位
 ;从指定地址放音  11100 < ;X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 >
PLAY:  JNB   AN,PLAY          ;等待AN=1
       MOV   A,20H            ;发地址 A7-A0
       ACALL ISDX             ;
       MOV   A,21H            ;发地址 A9-A8
       SETB  ACC.7            ;
       SETB  ACC.6            ;
       SETB  ACC.5            ;
       CLR   ACC.4            ;
       CLR   ACC.3            ;
       ACALL ISDX             ;
       SETB  SS               ;关片选
 ;PLAY   8位
 ;从当前地址放音  11110 < ;X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 >
PLAY1: CLR   LED              ;LED开指示灯
       MOV   A,#0F0H          ;发 11110 XXXXXXXX
       ACALL ISDX             ;发 < ;< ; SETPLAY >>
       SETB  SS               ;关片选
PLAY2: JNB   STOP,REC6        ;STOP=0停止放音
       JB    INT,PLAY2        ;无OVF EOM继续放音
       SETB  LED              ;关指示灯
       ACALL STOPP            ;停止当前操作
 ;检测OVF
       CLR   SS               ;开片选
       CLR   SCLK             ;时钟SCLK=0
       SETB  SCLK             ;时钟SCLK=1
       JB    MISO,REC6        ;芯片到未
       CLR   SCLK             ;时钟SCLK=0
       SETB  SS               ;关片选
       ACALL STOPP            ;停止当前操作
PLAY3: JNB   STOP,REC6        ;中断放音
       JB    AN,PLAY3         ;等待AN=0
       AJMP  PLAY1            ;顺序放音
 ;ISD上电 < ;< ; POWERUP >>
UP:    MOV   A,#20H           ;发00100 XXXXXXXXXXX
       ACALL ISDX             ;
       SETB  SS               ;关片选
       ACALL YS50             ;50mS延时
       ACALL YS50             ;50mS延时
       RET                    ;
 ;停止当前操作< ;< ; STOP >>  8位
STOPP: MOV   A,#30H           ;发 0X11 0XXX
       ACALL ISDX             ;
       SETB  SS               ;关片选
       ACALL YS50             ;50mS延时
       ACALL YS50             ;50mS延时
       RET                    ;
 ;停止当前操作掉电< ;< ; STOPPWRDN >>   8位
DSTOP: MOV   A,#10H           ;发0X010 XXXXXXXXXX
       ACALL ISDX             ;
       SETB  SS               ;关片选
       ACALL YS50             ;50mS延时
       ACALL YS50             ;50mS延时
       RET                    ;
 ;ISD3300,4003 SPI写入程序 8位 数据在A
ISDX:  CLR   SS               ;开片选
       MOV   R6,#8            ;
       CLR   SCLK             ;时钟SCLK=0
ISD1:  MOV   C,ACC.0          ;
       MOV   MOSI,C           ;数据写 MOSI
       SETB  SCLK             ;时钟SCLK=1
       RR    A                ;
       CLR   SCLK             ;时钟SCLK=0
       DJNZ  R6,ISD1          ;
       RET                    ;
 ;**** 10mS延时  ****
YS1:   MOV   TMOD,#01H        ;
       MOV   TH0,#0D8H        ;10mS延时初值置入
       MOV   TL0,#0F0H        ;(65536-X)*1=10MS
       SETB  TR0              ;65536-(10000/1)=D8F0H
       JNB   TF0,$            ;
       CLR   TF0              ;
       CLR   TR0              ;
       RET                    ;
 ;**** 50mS延时  ****
YS50:  MOV   TMOD,#01H        ;
       MOV   TH0,#3CH         ;50mS延时初值置入
       MOV   TL0,#0B0H        ;(65536-X)*1=50MS
       SETB  TR0              ;65536-(50000/1)
       JNB   TF0,$            ;
       CLR   TF0              ;
       CLR   TR0              ;
   RET                    ;
   END                    ;
 
附:ISD4004的程序改动注明:
SETREC:          ;指定地址录音
MOV  20H,#00H  ;低八为地址
MOV  21H,#00H   ;高八位地址
MOV  22H,#0a0H   ;操作码
MOV  A,20H
ACALL  ISDX
MOV  A,21H
ACALL  ISDX
MOV  A,22H
ACALL  ISDX
      SETB  SS
 指定地址录音(SETPLAY)和指定地址快进(SETMC)的改动与上述相同
技术资料转贴自:
http://www.qlmcu.com/
http://www.qlmcu.com/dvbbs/index.asp
 

⌨️ 快捷键说明

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