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

📄 isd4000and89c51.txt

📁 汇编编写
💻 TXT
字号:
ISD4000语音与89C51单片机通用开发板源程序



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 + -