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

📄 isd4004.asm

📁 【SoC单片机实验、实践与应用设计:基于C8051F系列】一书的光盘
💻 ASM
字号:
;参考程序B:	ISD4004.ASM
;SPI接口芯片ISD4004实验(16分种语音录放)
;从分段地址0000H 开始录音,连续录音120秒后停止录音1秒钟,
;再从ISD4004分段地址0000H 开始放音,再连续放音120秒后停止放音。
;ISD4004.ASM  用I/O口操作ISD4004录放音的程序
;按下KEY4为录音操作.放开KEY4为放音操作
$include (c8051f020.inc) 
CS         EQU   P0.7
SCLK       EQU   P0.0
MISO       EQU   P0.1
MOSI       EQU   P0.2
ADDRL      EQU   22H     ;存放地址低8位的工作单元
ADDRH      EQU   20H    ; 存放地址高8位的工作单元
COM        EQU   23H    ; 存放单字节指令的工作单元
ORG        0
AJMP       MAIN
ORG        30H
MAIN:      MOV   SP,#10H
           MOV WDTCN, #0DEH  ;禁止看门狗
           MOV WDTCN,#0ADH
		   MOV XBR2,#40H      ;允许功能选择开关有效
 SS:       JB P3.7,PPLAY
           ACALL   RECORD
PPLAY:     ACALL   PLAY
           AJMP    SS
RECORD:    LCALL  BELL        ;蜂鸣器响
           LCALL  POWERUP       ;上电指令
           LCALL  DEL25MS       ; 延时25毫秒
           LCALL  DEL25MS      
           LCALL  POWERUP       ;上电指令
           LCALL  DEL25MS       ; 延时25毫秒
           LCALL  DEL25MS      
		   LCALL  BELL        ;蜂鸣器响
		   LCALL  BELL        ;蜂鸣器响
		   LCALL  SETREC0000;设置录音起始地址为0000H
		   LCALL  REC
           LCALL  DEL65S  
		   LCALL  DEL65S  
		    LCALL  STOP         ;停止录音。
			LCALL  BELL;	       
		    RET
PLAY:       LCALL  POWERUP       ;上电指令
            LCALL  DEL25MS       ; 延时25毫秒
			LCALL  DEL25MS      
		    LCALL  SETPLAY0000;设置放音起始地址为0000H
		    LCALL  PLAY0
            LCALL  DEL65S      ;延时65秒
			LCALL  DEL65S      
			LCALL  STOP         ;停止放音。
		    LCALL  BELL         ;蜂鸣器响
		    RET
;主机向ISD4004连续发送三字节指令的子程序COMM:
;操作指令(单字节)在COM中,起始地址的高8位在ADDRH中,低8位在ADDRL中。
COMM:      CLR    CS
           MOV    A,ADDRL
           LCALL  TRANSFER
           MOV    A,ADDRH
           LCALL  TRANSFER
           MOV    A,COM
           LCALL  TRANSFER
		   SETB   CS
		    LCALL  DEL  
           RET
;延时25毫秒的子程序DEL25MS:
DEL25MS:   MOV    R7,#50    ;延时25毫秒的子程序(假设主机晶振为6MHZ)
PPP:        MOV    R6,#00
            DJNZ   R6,$
            DJNZ   R7 ,PPP
            RET
;延时65秒的子程序DEL65S:
DEL65S:     MOV    R7,#0H       ;延时65秒(假设主机晶振为6MHZ)
PP   :      MOV    R6,#0
PK :        MOV    R5,#00
            DJNZ   R5,$
            DJNZ   R6 ,PK
            DJNZ   R7, PP
            RET  
;延时1秒的子程序DEL10S:
DEL1S:      MOV    R7 , #4      ;延时1秒(假设主机晶振为6MHZ)
            AJMP    PP
           ;实验30  16分种语音录放芯片ISD4004实验
;送快进指令的子程序MC:
MC:      MOV    A  ,#0F8H     ; 单字节指令:F8H   
         CLR    CS
         ACALL  TRANSFER
         SETB   CS
		 LCALL  DEL      
         RET
;送连续录音指令的子程序:
PLAY0:    MOV    A  ,#0F0H      ;送单字节指令:F0H   
          CLR    CS
         ACALL  TRANSFER
         SETB   CS
		  LCALL  DEL      
          RET
;送上电指令(20H)的子程序POWERUP:
POWERUP:  MOV    A,#20H     ; 发送上电指令
          CLR    CS
          ACALL  TRANSFER
	      ACALL  DEL25MS      ;延时25毫秒
 	      SETB   CS
		   LCALL  DEL     
           RET
;送连续录音指令的子程序:
REC:       MOV    A,#0B0H     ;送单字节指令:B0H   
           CLR    CS
           ACALL  TRANSFER
           SETB   CS
		   LCALL  DEL      
           RET
;送读状态位指令的子程序RINT:
RINT:    MOV    A  ,#30H        ; 单字节指令:30H      
         CLR     CS
         ACALL  TRANSFER
         SETB    CS
		 LCALL  DEL     
         RET 
;设置快进起始地址为0000H的子程序SETMC:
 SETMC:   MOV    COM  ,#0E8H     ;送单字节指令:E8H  
          MOV    ADDRL,#0        ;送地址0000H         
          MOV    ADDRH,#0
          ACALL  COMM
          RET
;设置录音起始地址为0000H的子程序SETREC0000:
 SETREC0000: CLR   CS
             MOV    COM,#0A0H       ;送录音起始地址的指令(0A0H)  
             MOV    ADDRL,#0          ;送录音起始地址0000H
             MOV    ADDRH,#00
             ACALL  COMM
			 SETB   CS
             RET 
 SETREC0500: CLR    CS
             MOV    COM,#0A0H       ;送录音起始地址的指令(0A0H)  
             MOV    ADDRL,#0          ;送录音起始地址0500H
             MOV    ADDRH,#05
             ACALL  COMM
			 SETB   CS
             RET                      
;设置放音起始地址0000H的子程序SETPLAY0000:
SETPLAY0000: CLR   CS
            MOV    COM  ,#0E0H    ;送单字节指令:E0H    
            MOV    ADDRL,#0     ;送放音起始地址0100H
            MOV    ADDRH,#0
            ACALL  COMM
			SETB   CS
            RET
SETPLAY0500: CLR   CS
            MOV    COM  ,#0E0H    ;送单字节指令:E0H    
            MOV    ADDRL,#0     ;送放音起始地址0100H
            MOV    ADDRH,#05
            ACALL  COMM
			SETB   CS
            RET
;送停止指令的子程序STOP:
STOP:    MOV    A  ,#30H    ; 单字节指令:30H   
         CLR    CS
         ACALL  TRANSFER
         SETB   CS
		 LCALL  DEL      
         RET  
;送停止并掉电指令的子程序STOPWRDN:
STOPWRDN: MOV    A  ,#10H      ; 单字节指令:10H  
          CLR    CS
          ACALL  TRANSFER
          SETB   CS
		  LCALL  DEL     
          RET  
;SPI按位串行传送数据的子程序TRANSFER:
;主机通过数据线SOMI将一个字节的数据按位分8次传送到ISD4004中去。  
TRANSFER:    CLR    MOSI    
             CLR    SCLK
             MOV    R7,#8
BITOUT:      CLR    SCLK
             RRC    A
             MOV    MOSI,C
             NOP
             NOP
	         NOP
             SETB   SCLK    
             NOP
             NOP
             NOP
 	         DJNZ      R7,  BITOUT
             RET
DEL:MOV R6,#0FFH
TM0:  MOV R7,#0FFH
     DJNZ R7,$
     DJNZ R6,TM0
     RET
;长延时子程序
DELY:MOV R5,#10H
TTM1: ACALL DEL
      DJNZ R5,TTM1
      RET
DELYL:MOV R5,#0FFH
TTM2:CALL DEL
     DJNZ R5,TTM2
     RET             
;响蜂鸣器
BELL: CLR   P3.5
	  LCALL  DELY     
	  SETB   P3.5	
			LCALL  DELY    
            RET
		    END						

⌨️ 快捷键说明

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