📄 isd4002-2008-1-08.asm
字号:
;*****************************************************************
;*****************************************************************
;* Subject : Experiment with Tone frequency generator
;* Filename : ISD4002.asm
;* Author : Ballie
;* Date : 2004.06.06
;************** bit define ***************************************
;*****************************************************************
ISDSS BIT P1.0
ISDSCLK BIT P1.1
ISDMOSI BIT P1.2
ISDMISO BIT P1.3
ISDINT BIT P1.4
ISDRAC BIT P1.5
AN BIT P3.6
LED BIT P2.4
;******************* byte define ********************************
LOW_ADD EQU 20H
HIGH_ADD EQU 21H
RAM_DLY0 EQU 19H
RAM_DLY1 EQU 18H
;******************* main program *******************************
ORG 0000H
AJMP INITIAL
ORG 0030H
INITIAL:
CLR P2.3
SETB ISDSS
ACALL UP ;Voice Chip power up
ACALL UP
LCALL DLY25MS
;****************************************************************
STAT1:
JB AN,STAT1
CLR LED
;****************************************************************
VOICE:
SREC:
MOV LOW_ADD,#00H ;voice 's low_address
MOV HIGH_ADD,#00H ;voice 's high_address
MOV A,LOW_ADD
ACALL ISDX
;MOV A,HIGH_ADD
;ACALL ISDX
MOV A,#0A0H ;set_record command
ACALL ISDX
SETB ISDSS
MOV A,#0B0H ;record command
ACALL ISDX
SETB ISDSS
REC1:
JNB ISDINT,MAIN ;if "OVF" then jump to main to play.
JNB AN,REC1 ;recording until "AN" =1
SETB LED ;turn off LED
CLR ISDSCLK ;SCLK=0
SETB ISDSS ;close isd4002's "ss"
ACALL STOPP ;stop the current operation
;----------------------------------------------------------------
;*************** play tone frequency ****************************
MAIN:
MOV LOW_ADD,#00H
MOV HIGH_ADD,#00H
MOV 22H,#0E0H
MOV A,LOW_ADD
ACALL ISDX
;MOV A,HIGH_ADD
;ACALL ISDX
MOV A,22H
ACALL ISDX
SETB ISDSS
PLAY:
MOV A,#0F0H
ACALL ISDX
SETB ISDSS
PLAY1:
JB ISDINT,$ ;Find Ending
ACALL STOPP ;Stop the current operation
;test "OVF"
CLR ISDSS ;open "ss"
CLR ISDSCLK ;sclk=0 -- sclk=1 making-->
SETB ISDSCLK ;--> "rising edge"
JB ISDMISO,PLAY1 ;finished when "OVF"=0
CLR ISDSCLK
SETB ISDSS
ACALL STOPP
LJMP INITIAL
;-----------------------------------------------------------------
ISDX:
CLR ISDSS
MOV R6,#8
CLR ISDSCLK
ISD1:
MOV C,ACC.0
MOV ISDMOSI,C
SETB ISDSCLK
RR A
CLR ISDSCLK
DJNZ R6,ISD1
RET
;-----------------------------------------------------------------
UP:
MOV A,#LOW_ADD ;send power_up command
ACALL ISDX
SETB ISDSS
ACALL DLY25MS
RET
;-----------------------------------------------------------------
STOPP:
MOV A,#30H
ACALL ISDX
SETB ISDSS
ACALL DLY25MS
ACALL DLY25MS
RET
;-----------------------------------------------------------------
DLY25MS:
MOV RAM_DLY0,#100
DLY25MSA:
MOV RAM_DLY1,#250
DJNZ RAM_DLY1,$
DJNZ RAM_DLY0,DLY25MSA
RET
;------------------------------------------------------------------
CLEAN_RAM:
MOV R0,#10H
CLRM:
MOV @R0,#0FFH
INC R0
CJNE R0,#0H,CLRM
RET
;******************************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -