?? 新建 文本文檔.txt
字號:
1、錄音
跳線插在"REC"一側是錄音狀態,按住"AN"鍵不放,指示燈亮即可對著板上話筒講話錄音,松鍵時錄音停止并形成一段。再按則錄下一段。按"STOP"鍵為復位,再錄音時又從第一段開始。
2、放音
跳線插在"PLAY"一側是放音狀態,按一下"AN"鍵即播放一段,一段結束后自動停止放音,再按"AN"則播放下一段
按"STOP"鍵為復位,再放音時又從第一段開始。
89C51-ISD4000語音電路程序AT89C51單片機
89C51單片機12MHz
注:本程序為ISD4002、4003的控制程序,ISD4004的程序須加些改動,請注意程序后邊的注釋。
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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -