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

📄 isd.asm

📁 isd4003的驱动程序,主要用于驱动isd4003的录放,很有用的啊
💻 ASM
字号:

;89C51-ISD4000语音电路程序AT89C51单片机                   

;89C51单片机12MHz  

  
   ;为ISD4002、4003的控制程序,ISD4004的程序须加些改动,请注意程序后边的注释。

SS     EQU   P1.2            ;片选

SCLK   EQU   P1.3            ;ISD4003时钟

MOSI   EQU   P1.1            ;数据输入

MISO   EQU   P1.0            ;数据输出

INT    EQU   P1.4            ;中断


       ORG   0000H           ;	 初始化

       AJMP  start           ;

start:  MOV   SP,#10H         ;

       MOV   P1,#0FFH        ;

       MOV   P2,#0FFH        ;

       MOV   P3,#0FFH        ;

       MOV   P0,#0FFH        ;

       CLR   EA              ;	关所有的中断


MAS0:  MOV   3AH,#200        ;

MAS1:     ACALL UP              ;ISD上电

       MOV   20H,#00H        ;ISD低位地址

       MOV   21H,#00H        ;ISD高位地址


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

  	   MOV A,#00H
	   ACALL ISDX

       MOV   A,#0B0H         ;发 1011 0XXX

       ACALL ISDX            ;

       SETB  SS              ;关片选

REC3:  MOV   35H,#200        ;

REC4:  JB   INT,REC4        ;OVF=0芯片溢出
	   CALL STOPP
	   

;SETPLAY  16位

;从指定地址放音  11100 <X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 >

PLAY:  

       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: MOV A,#00H
       ACALL ISDX

       MOV   A,#0F0H         ;发 11110 XXXXXXXX

       ACALL ISDX            ;发 << SETPLAY >>

       SETB  SS              ;关片选

PLAY2: 

       JB    INT,PLAY2       ;无OVF EOM继续放音

        

       ACALL DSTOP           ;停止当前操作
	   JMP   start
;ISD上电 << POWERUP >>

UP:    MOV   A,#00H          ;发00100 XXXXXXXXXXX

       ACALL ISDX            ;
	   MOV A,#20H			 ;
	   ACALL ISDX
       
	   SETB  SS              ;关片选

       ACALL YS50            ;50mS延时

       ACALL YS50            ;50mS延时

       RET                   ;

;停止当前操作<< STOP >>  8位

STOPP: MOV   A,#00H          ;发 0X11 0XXX

       ACALL ISDX            ;
	   MOV A,#30H
	   ACALL ISDX
       SETB  SS              ;关片选

       ACALL YS50            ;50mS延时

       ACALL YS50            ;50mS延时

       RET                   ;

;停止当前操作掉电<< STOPPWRDN >>   8位

DSTOP: MOV   A,#00H          ;发0X010 XXXXXXXXXX

       ACALL ISDX            ;
	   MOV A,#10H
       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                   

⌨️ 快捷键说明

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