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 + -
显示快捷键?