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

📄 isd4002-2008-1-08.asm

📁 ISD驱动C语言描写
💻 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 + -