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

📄 test.asm

📁 这是ISD4000系列语音芯片测试程序,十分有用.
💻 ASM
字号:
SS     EQU   P2.6            ;片选

SCLK   EQU   P2.7            ;ISD4003时钟

MOSI   EQU   P2.5            ;数据输入

MISO   EQU   P2.4            ;数据输出

LED    EQU   P1.3            ;指示灯

INT    EQU   INT0            ;中断

AN     EQU   P1.0            ;执行

STOP   EQU   P1.1            ;复位

PR     EQU   P1.2            ;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,#6BH        ;50mS延时初值置入

       MOV   TL0,#90H       ;(65536-X)*1=50MS

       SETB  TR0             ;65536-(50000/1)

       JNB   TF0,$           ;

       CLR   TF0             ;

       CLR   TR0             ;

   RET                   ;

   END                   ;

 

⌨️ 快捷键说明

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