?? isd4004.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 + -