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

📄 tesk500.asm

📁 SNC539 两channel 语音播放
💻 ASM
📖 第 1 页 / 共 5 页
字号:
SNC539
SN0#XO.WAV
SN1#XO.WAV
SIL#XO.WAV
A.WAV
A_8k.dat
PROGRAM
includestd	MACRO500_4.h
deboc	equ	#0101b
	IR_MODE	EQU	#0000B
MRX	EQU	#1111B
MRXB	EQU	#0000B
KeyP1	EQU	#0001B
KeyP2	EQU	#0000B
KeyP3	EQU	#0000B
KeyP6	EQU	#0000B
Rand0Max	EQU	#0000B
Rand1Max	EQU	#0000B
Rand2Max	EQU	#0000B

;#####################################################
; For SNC538/548/558/568/578/588/598
; Instruction Cycle : 4 us
; I/P      : P1
; I/O      : P2,P3,P6
; O/P      : P4,P5
; Channel  : 2  ( DAC & PWM )
; IR       : P33 , P32
; Core program : SN_2CH24.ASM  ( 2-channel , 6 Ports 24 bits)
; ----------------------------------------------------
; Scan Key          : P2 --> P1  ( Max 16 keys)
; Direct Key        : P1,P2,p3 and P6 ( Max 16 keys)
; Flash with volume : P3 with CH1 or P3 with CH2
; Output Control    : P2,P3,P4,P5,P6
; IR transmit only  : TX=P33
; IR receive only   : RX=P33
; IR bidirection    : TX=P33 and RX=P32
;
; Versin 2.0 : Modified IR .... p3s=#0111b
; Versin 2.13: Add O/P.... P4,P5
;
;#####################################################


;/////////////////////////////////////////
tr1_4           equ     m0
tr5_8           equ     m1
tr9_12          equ     m2
tr13_16         equ     m3
p2state         equ     m4
p3state         equ     m5
4mto8m          equ     m6
; bit2 =1 ... 8ms
daa             equ     m6     ; DA or PWM
; BIT0=0 ..... PWM
; BIT0=1 ..... DAC

DOUBLE_F        equ     m6
;; BIT1=0 ....... NONE
;; BIT1=1 ....... VoiceName1@1+VoiceName@2
;; bit3=1 ....... VoiceName1@1+VoiceName@2

p3_fva          equ     m7    ; Flash with CH1
p3_fvb          equ     m8    ; Flash with CH2
v_state         equ     m9    ; Speech state
                              ; bit0 ....... CH 1
                              ; bit1 ....... CH 2
                              ; bit2 ....... BACK CH 1
                              ; bit3 ....... BACK CH 2



scanid          equ     m13	;scanid
;			m14	;bit3:key press,bit0:head
;temp2           equ     m15	;scan port
;---------------page1--------------
delay8m         equ     m0
delay01         equ     m1
delay1s         equ     m2
BGround1        equ     m3
BGround2        equ     m4
s_delay1        equ     m7
s_delay2        equ     m8
s_delay3        equ     m9
TrigState1      equ     m10
TrigState2      equ     m11
temp3           equ     m12
temp4           equ     m13
temp5           equ     m14

;##############################################################
;       PAGE 1
;##############################################################

;;;; IR Tx
TRANS_L         EQU     M5
TRANS_H         EQU     M6
TRANS_COUNT     EQU     M13
;;;; IR Rx
RECEIVE_L       EQU     M5
RECEIVE_H       EQU     M6
RECEIVE_COUNT   EQU     M13

Time_Counter  EQU     M14
_INV_500us          EQU     #1
_INV_700us          EQU     #3

TEMP0           EQU     M15



;;;; PAGE2   M15.0 ;;;;;;;;
IRout_ON_OFF   EQU      M15
;;;; PAGE2   M15.1 ;;;;;;;;
TRIGGER_FLAG   EQU     M15    ;

;;;; PAGE2   M15.2 ;;;;;;;;;
IRin_ON_OFF     EQU      M15  ;
; BIT2=0 ........ IR OFF
; BIT2=1 ........ IR ON

;;;; PAGE2   M15.3 ;;;;;;;;
IR_TX_P33_ON_OFF   EQU    M15 ;
; BIT3=0 ........ P3.3 38.5K Hz OFF
; BIT3=1 ........ P3.3 38.5K Hz ON


;******* page2 ***********
p2_go1          equ     m0
p2_go2          equ     m1
p3_go1          equ     m2
p3_go2          equ     m3


loop            equ     m4
outloop         equ     m5

p3_fv2          equ     m6
p3_fv1          equ     m7

Rand0           equ     m8
Rand1           equ     m9
Rand2           equ     m10

enter_b         equ     m11
p_delay1        equ     m12
p_delay2        equ     m13
p_delay3        equ     m14
;;;;DOUBLE_F        equ     m15
;; BIT0=0 ....... NONE
;; BIT0=1 ....... VoiceName1@1+VoiceName@2
m_stp           equ     #0011b
m_pause         equ     #0001b

;---------------page6--------------
skblock		equ	m1
tr17_20		equ	m2
tr21_24		equ	m3
tr25_28		equ	m4
tr29_32		equ	m5
temp1		equ	m6
temp2		equ	m7
temp6		equ	m8
Mtr2		equ	m9
Mtr3		equ	m10
Mtr6		equ	m11
eventmark	equ	m12			;event mark
eventflag	equ	m13			;bit0 event mark function:enable
						;bit1 load next event data
						;bit2 load event delay timer
						;bit3 skip event mark
e_delay8m	equ	m14
e_delay01	equ	m15
;---------------page7--------------
p3s_state       equ     m1

ifdef mrx_3
tr33_36		equ	m0
tr37_40		equ	m3
tr41_44		equ	m4
tr45_48		equ	m5
else
p2s_state       equ     m0
p4s_state       equ     m3
p4_go1          equ     m4
p4_go2          equ     m5
endif

p4state         equ     m2
p5state         equ     m6
p5s_state       equ     m7
p5_go1          equ     m8
p5_go2          equ     m9
ifdef mrx_4
tr49_52		equ	m10
tr53_56		equ	m11
tr57_60		equ	m12
tr61_64		equ	m13
else
p6state         equ     m10
p6S_state       equ     m11
p6_go1          equ     m12
p6_go2          equ     m13
endif
deboc_count	equ	m14	; bit0:4ms to 8ms debounce count,bit1,2,3 debounce count 8~56ms

;**************** power on routine ***************
start:                                  ;power on initial routine
        page0
        stop1
        stop2
        mov     a       #1111b
        mov     p2s     a
        mov     p3s     a
        mov     p6s     a

        mov     a       #0000b
        mov     p3      a
        mov     p3state a
        mov     p2      a
        mov     p2state a
ifndef  mrx_4	
	page7
        mov     p6      a
        mov     p6state a
        mov     p6_go1          #0000b
        mov     p6_go2          #1111b
endif        
ifdef	mrx_2
	page6
	mov     tr17_20  #0000b          ;m2:tr17-20 status, m3:tr21-24 status
        mov     tr21_24  #0000b          ;m4:tr25-28 status, m5:tr29-32 status
        mov     tr25_28  #0000b            
        mov     tr29_32	 #0000b 
endif        	

	page0
        mov     tr1_4   #0000b          ;m0:tr1-4 status, m1:tr5-8 status
        mov     tr5_8   #0000b          ;m2:tr9-12 status, m3:tr13-16 status
        mov     tr9_12  #0000b            
        mov     tr13_16 #0000b          
        mov     m6      #0000b          ;m6.2:8ms,
        mov     p3_fva  #0000b
        mov     p3_fvb  #0000b
        mov     v_state #0000b
        pwm
        mov     daa     #0000b          ;daa.0=1:da daa.0=0:pwm
        mov     m14     #0000b          ;m14:bit3,bit0:head
        mov     m15     #0000b          ;m15:scan of p1 bit
        page1
        mov     delay8m #0000b          ;m0:delay
        mov     s_delay1 #0000b
        MOV     M12     #0000B
        mov     bground1        #0000b
        mov     bground2        #0000b
        page2
        mov     p2_go1  #0000b                  ;x=1
        mov     p2_go2  #1111b                  ;x=0
        mov     p3_go1  #0000b                  ;x=1
        mov     p3_go2  #1111b                  ;x=0

        mov     p3_fv1  #0000b
        mov     p3_fv2  #0000b
        mov     p_delay1 #0000b
        mov     Rand0   #0
        mov     Rand1   #0
        mov     Rand2   #0
        mov     enter_b #0000b

        MOV     TRIGGER_FLAG  #0

;;; Set P33 modulated with 38.5 KHz square wave
;;; P32 and P33 work as normal output pin

        MOV     A        IR_MODE
        MOV     MODE     A
        CAJE    #0000B   @F
        MOV     A        #1000B
@@:
        PAGE2
        OR      A,IR_TX_P33_ON_OFF
        MOV     IR_TX_P33_ON_OFF,A


;;;; For Drive & Sink function ;;;;;;;;;;;
        PAGE7
        MOV     A          #1111B
ifndef mrx_3
        MOV     P2S_STATE  A
        MOV     P4S_STATE  A
endif        
        MOV     P3S_STATE  A
ifndef mrx_4        
        MOV     P6S_STATE  A
endif     
        
        MOV     P5S_STATE  A
        MOV     P4S        A
        MOV     P5S        A


        MOV     A       #0000B
        MOV     P4      A
        MOV     P4State A
        MOV     P5      A
        MOV     P5State A
ifndef mrx_3
        mov     p4_go1  #0000b                  ;x=1
        mov     p4_go2  #1111b                  ;x=0
endif        
        mov     p5_go1  #0000b                  ;x=1
        mov     p5_go2  #1111b                  ;x=0
	mov	deboc_count	#0000b		; bit1,2,3 debounce count 8~56ms


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


; ***********  @@update ************************
@@update:
        page0
        mov     a       mrx
        caje    #1111b  @@update_key
        mov     a       #0001b
        mov     p2      a
        mov     a       mrx
        mov     p2s     a
        mov     a       #1111b
        mov     p2s     a
        mov     a       p1
        mov     tr1_4   a
        mov     a       #0010b
        mov     p2      a
        mov     a       mrx
        mov     p2s     a
        mov     a       #1111b
        mov     p2s     a
        mov     a       p1
        mov     tr5_8   a
        mov     a       mrx
        caje    #1100b  @@update_over
        mov     a       #0100b
        mov     p2      a
        mov     a       mrx
        mov     p2s     a
        mov     a       #1111b
        mov     p2s     a
        mov     a       p1
        mov     tr9_12  a
        mov     a       mrx
        caje    #1000b  @@update_over
        mov     a       #1000b
        mov     p2      a
        mov     a       mrx
        mov     p2s     a
        mov     a       #1111b
        mov     p2s     a
        mov     a       p1
        mov     tr13_16 a
        
;;**********************************************************
ifdef   mrx_2
        page6
        mov     a       #0001b
        mov     p4      a
        mov     a       mrx_2
        mov     p4s     a
        mov     a       #1111b
        mov     p4s     a
        mov     a       p1
        mov     tr17_20 a
        mov     a       mrx_2
        caje    #1110b  @@update_over
        mov     a       #0010b
        mov     p4      a
        mov     a       mrx_2
        mov     p4s     a
        mov     a       #1111b
        mov     p4s     a
        mov     a       p1
        mov     tr21_24 a
        mov     a       mrx_2
        caje    #1100b  @@update_over
        mov     a       #0100b
        mov     p4      a
        mov     a       mrx_2
        mov     p4s     a
        mov     a       #1111b
        mov     p4s     a
        mov     a       p1
        mov     tr25_28 a
        mov     a       mrx_2
        caje    #1000b  @@update_over
        mov     a       #1000b
        mov     p4      a
        mov     a       mrx_2
        mov     p4s     a
        mov     a       #1111b
        mov     p4s     a
        mov     a       p1
        mov     tr29_32 a
endif
ifdef	mrx_3
        page7
        mov     a       #0001b
        mov     p2      a
        mov     a       mrx_3
        mov     p2s     a
        mov     a       #1111b
        mov     p2s     a
        mov     a       p6
        mov     tr33_36 a
        
        mov     a       mrx_3
        caje    #1110b  @@update_over
        mov     a       #0010b
        mov     p2      a
        mov     a       mrx_3
        mov     p2s     a
        mov     a       #1111b
        mov     p2s     a
        mov     a       p6
        mov     tr37_40 a
        mov     a       mrx_3
        caje    #1100b  @@update_over
        mov     a       #0100b
        mov     p2      a
        mov     a       mrx_3
        mov     p2s     a
        mov     a       #1111b
        mov     p2s     a
        mov     a       p6
        mov     tr41_44 a
        mov     a       mrx_3
        caje    #1000b  @@update_over
        mov     a       #1000b
        mov     p2      a
        mov     a       mrx_3
        mov     p2s     a
        mov     a       #1111b
        mov     p2s     a
	
        mov     a       p6
        mov     tr45_48 a
endif
ifdef   mrx_4
        page7
        mov     a       #0001b
        mov     p4      a
        mov     a       mrx_4
        mov     p4s     a
        mov     a       #1111b
        mov     p4s     a
        mov     a       p6
        mov     tr49_52 a
        mov     a       mrx_4
        caje    #1110b  @@update_over
        mov     a       #0010b
        mov     p4      a
        mov     a       mrx_4
        mov     p4s     a
        mov     a       #1111b
        mov     p4s     a
        mov     a       p6
        mov     tr53_56 a
        mov     a       mrx_2
        caje    #1100b  @@update_over
        mov     a       #0100b
        mov     p4      a
        mov     a       mrx_4
        mov     p4s     a
        mov     a       #1111b
        mov     p4s     a
        mov     a       p6
        mov     tr57_60 a
        mov     a       mrx_4
        caje    #1000b  @@update_over
        mov     a       #1000b
        mov     p4      a
        mov     a       mrx_4
        mov     p4s     a
        mov     a       #1111b
        mov     p4s     a
        mov     a       p6
        mov     tr61_64 a
endif        
        
@@update_over:
        mov     a       #0000b
        mov     p2      a
ifdef	mrx_2
	mov	p4	a
endif	        
;******************************************************
        jmp     @@_init
;******************************************************

@@chk_delay8m_ret1	macro	label
	page1
	mov	a	delay8m
	caje	#0000b	@f
	jmp	label
@@:
	page3
	ret1
endm	

@@chk_p_delay1_ret2	macro	label
	page2
	mov	a	p_delay1
	caje	#0000b	@f
	jmp	label
@@:
	page3
	ret2
endm


@@update_key:
        mov     a       p1
        mov     scanid     a
        mov     a       keyp1
        and     a       scanid

⌨️ 快捷键说明

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