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

📄 spl10308.asm

📁 .ifnz I2C_SUPPORT ************************************************************** Function : fPro
💻 ASM
字号:
.ifnz SPL10308
fProcessVfdWrite:
        ;;get data size
        lda     IOP_DATA0_L
        and     #VFD_DAT_LN_MASK
        beq     lExitPorcessVfdWrite     ;;if data len =0 then exit
        sta     rDataLen
        ;;get data address
        lda     IOP_DATA1_L
        and     #VFD_FIRST_DATA_ADDR
        sta     rAddress                 ;;lcd address
        ldx     #0
lSendOutNextByte:
        lda     IOP_DATA1_L
        and     #F0H
        ora     #$10
        ora     rAddress
        sta     rOutBuffer               ;;command+addresss
        ;;STB = 0   delay 340u
        smb     VFD_STB_bit,VFD_PORT_CFG
        lda     #42
        sta     DelayLoopCnt
        jsr     fDelayX10us
        ;;sent cmd and address,address evry time sent!
        jsr     fSendOneByte
        lda     IOP_DATA2_L,x
        sta     rOutBuffer
        jsr     fSendOneByte
;;-------------------------------------------
        ;;out clock high
        smb     VFD_CLK_bit,bPortBuff           ;; set CLK = 1
        lda     bPortBuff
        sta     VFD_PORT
        ;;delay 100us
        lda     #12
        sta     DelayLoopCnt
        jsr     fDelayX10us
;;-------------------------------------------
        ;;out stb high
        rmb     VFD_STB_bit,VFD_PORT_CFG
        ;;delay 100us
        lda     #12
        sta     DelayLoopCnt
        jsr     fDelayX10us
;;;-------------------------------------------
        ;;out data low
        rmb     VFD_DATA_bit,VFD_DATA_PORT_CFG
        inc     rAddress
        inx
        cpx     rDataLen
        bne     lSendOutNextByte
lExitPorcessVfdWrite:
        rts


;;*************************************************************
;;Function    : fProcessVfdRead
;;Description : process VFD read function
;;Input       : parameter on memory
;;Output      : data memory
;;**************************************************************
fProcessVfdRead:
        ;;STB = 0
        ;;rmb   VFD_STB_bit,VFD_PORT
        smb     VFD_STB_bit,VFD_PORT_CFG
        ;;rmb     0,rSysCtrlFlag
        ;;delay 280us
        lda     #42
        sta     DelayLoopCnt
        jsr     fDelayX10us
        ;;send out command
        lda     VfdScanCode
        sta     rOutBuffer
        jsr     fSendOneByte

        ;;start to read data
        ;;change port to INPUT
		rmb		VFD_DATA_bit,VFD_DATA_PORT_CFG

        ;;get data
        nop
        nop
        nop
        jsr     fRecvOneByte
        lda     rOutBuffer
        sta     VfdResponse
        beq     lResponseIs0
        and     #$0f
        sta     VfdResponse1
        ;lda     #$12
        ;sta     VfdResponse1
        nop
        nop
        nop
        nop
        nop
        nop
lResponseIs0:
        ;;change port to OUTPUT
		smb		VFD_DATA_bit,VFD_DATA_PORT_CFG
        nop
        nop
        nop
        nop
        nop
        nop

.if 0   ;;standby mode code
        ;;check VFD power code
        ldx     VFDPowerOffset
        lda     VfdResponse1,x
        cmp     VFDPowerMASK
        bne     lSkipUpdateVfdData

lResetAll:
        lda     #$de
        sta     Reset_RISC_L
        lda     #$ad
        sta     Reset_RISC_H
.endif

lSkipUpdateVfdData:
        smb     VFD_CLK_bit,bPortBuff           ;; set CLK = 1
        lda     bPortBuff
        sta     VFD_PORT
        ;;delay 100us
        lda     #11
        sta     DelayLoopCnt
        jsr     fDelayX10us
;;-------------------------------------------
        ;;STB = 1
        rmb     VFD_STB_bit,VFD_PORT_CFG
        ;;delay 100us
        lda     #11
        sta     DelayLoopCnt
        jsr     fDelayX10us
;;;-------------------------------------------
        ;;out data low
        rmb     VFD_DATA_bit,VFD_DATA_PORT_CFG
        ;;flush out cache
        lda     $460
        lda     $480
        rts


;;**************************************************************
;;Function    : fSendOneByte
;;Description : output one byte data to VFD port
;;Input       : rOutBuffer
;;Output      : NONE
;;**************************************************************
fSendOneByte:
        ldy     #8
lSendNextBit:
        ror     rOutBuffer
        bcc     lOutLow
        ;;smb   VFD_DATA_bit,VFD_PORT
        rmb     VFD_DATA_bit,VFD_DATA_PORT_CFG
        bra     lSendOutOk
lOutLow:
        ;;rmb   VFD_DATA_bit,VFD_PORT
        smb     VFD_DATA_bit,VFD_DATA_PORT_CFG
lSendOutOk:
        ;;out clock low
        rmb     VFD_CLK_bit,bPortBuff           ;; set CLK = 0
        lda     bPortBuff
        sta     VFD_PORT
        ;;smb   VFD_CLK_bit,VFD_PORT_CFG
        ;;hold at least 200ns
        ;;jsr     fDelay1
        lda     #8
        sta     DelayLoopCnt
        jsr     fDelayX10us
        ;;out clock high
        smb     VFD_CLK_bit,bPortBuff           ;; set CLK = 1
        lda     bPortBuff
        sta     VFD_PORT
        ;;rmb   VFD_CLK_bit,VFD_PORT_CFG
        ;;jsr     fDelay1
        lda     #8
        sta     DelayLoopCnt
        jsr     fDelayX10us
        dey
        bne     lSendNextBit
        rts

;;**************************************************************
;;Function    : fRecvOneByte
;;Description : read one byte data to VFD port
;;Input       : NONE
;;Output      : rOutBuffer
;;**************************************************************

fRecvOneByte:
        ldy     #8
lRecvNextBit:
        rmb     VFD_CLK_bit,bPortBuff           ;; set CLK = 0
        lda     bPortBuff
        sta     VFD_PORT
        ;;smb   VFD_CLK_bit,VFD_PORT_CFG
        ;;jsr     fDelay1
        ;;delay 60us
        lda     #7
        sta     DelayLoopCnt
        jsr     fDelayX10us
        ;;out clock high
        smb     VFD_CLK_bit,bPortBuff           ;; set CLK = 1
        lda     bPortBuff
        sta     VFD_PORT
        lda     #7
        sta     DelayLoopCnt
        jsr     fDelayX10us
        bbr     VFD_DATA_bit,VFD_DATA_PORT,lIsLow
        sec
        bra     lMakeData
lIsLow:
        clc
lMakeData:
        ror     rOutBuffer                      ;;fix reverse_fun on vfd.c
        dey
        bne     lRecvNextBit
        rts
.endif

⌨️ 快捷键说明

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