i2c.hed
来自「根据I2C协议传输的源代码」· HED 代码 · 共 1,490 行 · 第 1/5 页
HED
1,490 行
RAMDATA .SECTION 'DATA'
SPEECH0 DB ?
SPEECH1 DB ?
SPEECH2 DB ?
SPEECH3 DB ?
RAMDATAFLAG0 LABEL BYTE
SPEECH4 DBIT
SPEECH5 DBIT
SPEECH6 DBIT
RAMDATA1 .SECTION 'DATA'
PLAY_VOICE0 DB ?
; PLAY_VOICE1 DB ?
SAMPLINGRATE0 DB ?
SAMPLINGRATE1 DB ?
RAMDATAFLAG1 LABEL BYTE
SAMPLINGRATE2 DBIT
PLAY_VOICE1 DBIT
TRKNO EQU SPEECH0
SRL EQU SPEECH1
SRH EQU SPEECH2
VOL1 EQU SPEECH3
DOWN EQU SPEECH4
CHANNEL EQU SPEECH5
UP EQU SPEECH6
RAMDATA2 .SECTION 'DATA'
VOLUME0 DB ?
DECODE_PRO .SECTION AT 20H 'CODE'
_VOLUME:
SWAPA VOLUME0
RL ACC
AND A,0E0H
MOV VOLTMP,A
RET
;------------------------------------------------------------------------------
; MACRONAME : M_READBYTE
; INPUT : NONE
; OUTPUT : ACC AS THE VROM BYTE
; REMARK : READ ONE BYTE OF VOICE ROM BY ADDRESS LATCH0, THEN INCREMENT LATCH0
; DESTROY : ACC, BIT LATCHC
;------------------------------------------------------------------------------
READBYTE MACRO
LOCAL READVROMDELAYLOOP ; LOCAL MACRO LABEL
CLR [26H].4 ; SELECT LATCH0
MOV A, 04 ; ACC = 04
READVROMDELAYLOOP:
SDZ [05H] ; [05H] : ACC
JMP READVROMDELAYLOOP
MOV A, [2AH] ; [2AH] : LATCHD
ENDM
;------------------------------------------------------------------------------
; FUNCTION : F_READBYTE
; INPUT : NONE
; OUTPUT : ACC AS THE VROM BYTE
; REMARK : READ ONE BYTE OF VOICE ROM BY ADDRESS LATCH0, THEN INCREMENT LATCH0
; DESTROY : ACC, BIT LATCHC
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
; MACRONAME : M_SETADDRESS
; INPUT : M_VROMADDRESS(3 BYTES)
; OUTPUT : NONE
; REMARK : SET 3-BYTE VROM ADDRESS LATCH0
; DESTROY : ACC
;------------------------------------------------------------------------------
SETADDRESS MACRO VROMADDRESS ; 3-BYTE MACRO VARIABLE
MOV A, VROMADDRESS & 0FFH ;
MOV [1AH], A ; [1AH] : LATCH0L
MOV A, (VROMADDRESS>>8) & 0FFH ;
MOV [19H], A ; [19H] : LATCH0M
MOV A, (VROMADDRESS>>16) & 0FFH ;
MOV [18H], A ; [18H] : LATCH0H
ENDM
;------------------------------------------------------------------------------
; FUNCTION : F_SETADDRESS
; INPUT : ADDRL, ADDRM, ADDRH
; OUTPUT : NONE
; REMARK : SET 3-BYTE VROM ADDRESS LATCH0
; DESTROY : ACC
;------------------------------------------------------------------------------
;FUNCSETADDRESS PROC
; MOV A, ADDRL ;
; MOV [1DH], A ; [1AH] : LATCH0L
;
; MOV A, ADDRM ;
; MOV [1CH], A ; [19H] : LATCH0M
;
; MOV A, ADDRH ;
; MOV [1BH], A ; [18H] : LATCH0H
; RET
;------------------------------------------------------------------------------
; MACRONAME : M_SAMPLINGRATE
; INPUT :
; OUTPUT : NONE
; REMARK :
; DESTROY : ACC
;------------------------------------------------------------------------------
SAMPLINGRATE MACRO CHANNEL, M_SR
IF M_SR!=0
IF CHANNEL==1
MOV A, (0FFFFH-(((HT86SYSTEMFREQUENCY/(4*M_SR))))) & 0FFH
MOV [0DH], A ; [0DH] : TMR0L
MOV A, (0FFFFH-((HT86SYSTEMFREQUENCY/(4*M_SR))) >> 8) & 0FFH
MOV [0CH], A ; [0CH] : TMR0H
MOV A, 98H ; TURN ON TMR0
MOV [0EH], A ; [0EH] : TMR0C
ELSEIF CHANNEL==2
MOV A, (0FFFFH-(((HT86SYSTEMFREQUENCY/(4*M_SR))))) & 0FFH
MOV [10H], A ; [10H] : TMR1L
MOV A, (0FFFFH-((HT86SYSTEMFREQUENCY/(4*M_SR))) >> 8) & 0FFH
MOV [0FH], A ; [0FH] : TMR1H
MOV A, 98H ; TURN ON TMR1
MOV [11H], A ; [11H] : TMR1C
ELSEIF CHANNEL==3
MOV A, (0FFFFH-(((HT86SYSTEMFREQUENCY/(4*M_SR))))) & 0FFH
MOV [21H], A ; [21H] : TMR2L
MOV A, (0FFFFH-((HT86SYSTEMFREQUENCY/(4*M_SR))) >> 8) & 0FFH
MOV [20H], A ; [20H] : TMR2H
MOV A, 98H ; TURN ON TMR2
MOV [22H], A ; [22H] : TMR2C
ELSE
MESSAGE 'ERROR IN SAMPLING RATE MACRO-- UNKNOWN CHANNEL'
ENDIF
ELSE
MESSAGE 'ERROR IN SAMPLING RATE MACRO -- SAMPLING RATE OUT OF RANGE!'
ENDIF
ENDM
;------------------------------------------------------------------------------
; FUNCTION : F_SAMPLINGRATE
; INPUT : TIMERL, TIMERH, CHANNELNUMBER
; OUTPUT : NONE
; REMARK : (NOT COMPLETED)
; DESTROY : ACC
;------------------------------------------------------------------------------
PUBLIC _FUNCSAMPLINGRATE
_FUNCSAMPLINGRATE:
MOV A, CHANNELNUMBER ;
XOR A, 01H ;
SZ [05H] ; CHECK IF CHANNELNUMBER=01?
JMP $+8
MOV A, TIMERL ;
MOV [0DH], A ; [0DH] : TMR0L
MOV A, TIMERH ;
MOV [0CH], A ; [0CH] : TMR0H
MOV A, 98H ; TURN ON TMR0
MOV [0EH], A ; [0EH] : TMR0C
JMP FUNCEXITSAMPLINGRATE
MOV A, CHANNELNUMBER ;
XOR A, 02H ;
SZ [05H] ; CHECK IF CHANNELNUMBER=02?
JMP $+8
MOV A, TIMERL ;
MOV [10H], A ; [10H] : TMR1L
MOV A, TIMERH ;
MOV [0FH], A ; [0FH] : TMR1H
MOV A, 98H ; TURN ON TMR1
MOV [11H], A ; [11H] : TMR1C
JMP FUNCEXITSAMPLINGRATE
MOV A, CHANNELNUMBER ;
XOR A, 03H ;
SZ [05H] ; CHECK IF CHANNELNUMBER=03?
JMP FUNCEXITSAMPLINGRATE
MOV A, TIMERL ;
MOV [21H], A ; [21H] : TMR2L
MOV A, TIMERH ;
MOV [20H], A ; [20H] : TMR2H
MOV A, 98H ; TURN ON TMR2
MOV [22H], A ; [22H] : TMR2C
FUNCEXITSAMPLINGRATE:
RET
TIMER0_INT:
; SET TIMER0_C_RET_F
_INT_TIMR0:
JMP SR1ISR
TIMER1_INT:
; SET TIMER1_C_RET_F
_INT_TIMR1:
JMP SR2ISR
TIMER3_INT:
; SET TIMER3_C_RET_F
_INT_TIMR3:
JMP TIMEBASEISR
;------------------------------------------------------------------------------
; MACRONAME : M_SPEECH
; INPUT : TRKNO, SR, DOWN, CHANNEL
; OUTPUT :
; REMARK :
; DESTROY : ACC, TRACKNUMBER, VDSSTATUSFLAG, FVOICEDOWN, FCHANNELNO
;------------------------------------------------------------------------------
;SPEECH MACRO TRKNO, SR, DOWN, CHANNEL,UP,VOL
SPEECH:
_SPEECH:
IFDEF RTC
SET FRTC
ELSE
ENDIF
;----------------------------------------------------------------------
; REMARK : SET TRACK NUMBER
;----------------------------------------------------------------------
MOV A, TRKNO
SNZ CHANNEL
MOV TRACKNUMBER, A
SZ CHANNEL
MOV TRACKNUMBER2, A
;----------------------------------------------------------------------
; REMARK : ALWAYS SET SAMPLING RATE FOR CHANNEL 1
;----------------------------------------------------------------------
;CLR VDSSTATUSFLAG
;----------------------------------------------------------------------
; REMARK : SET VOICE DOWN
;----------------------------------------------------------------------
CLR FVOICEDOWN
SZ DOWN
SET FVOICEDOWN
CLR FVOICEUP
SZ UP
SET FVOICEUP
;----------------------------------------------------------------------
; REMARK : ALWAYS SET SAMPLING RATE FOR CHANNEL 1
;----------------------------------------------------------------------
;CLR VDSSTATUSFLAG
;MOV A,50H
;ANDM A,VDSSTATUSFLAG
MOV A,51H
ANDM A,VDSSTATUSFLAG
MOV A,03H
ANDM A,TFLAG4
SWAPA VOL1
RL ACC
AND A,0E0H
MOV VOLTMP,A
;----------------------------------------------------------------------
; REMARK : SET CHANNEL NUMBER
;----------------------------------------------------------------------
CLR FCHANNELNO
SZ CHANNEL
SET FCHANNELNO
CALL FUNCSPEECHINITIAL
;SAMPLINGRATE:
SZ CHANNEL
JMP SPEECHTMR1
; CALL ADD_ADDRESS02
CLR [0EH].4
MOV A, SRL
MOV [0DH], A ; [0DH] : TMR0L
MOV A, SRH
MOV [0CH], A ; [0CH] : TMR0H
MOV A, 98H ; TURN ON TMR0
MOV [0EH], A ; [0EH] : TMR0C
RET
SPEECHTMR1:
; CALL ADD_ADDRESS12
CLR [11H].4
MOV A, SRL
MOV [10H], A ; [0DH] : TMR0L
MOV A, SRH
MOV [0FH], A ; [0CH] : TMR0H
MOV A, 98H ; TURN ON TMR0
MOV [11H], A ; [0EH] : TMR0C
RET
_SAMPLINGRATE:
SZ SAMPLINGRATE2
JMP _SAMPLINGRATE0
MOV A, SAMPLINGRATE0
MOV [0DH], A ; [0DH] : TMR0L
MOV A, SAMPLINGRATE1
MOV [0CH], A ; [0CH] : TMR0H
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?