📄 ht1621.asm
字号:
.ifnz HT1621
fProcessVfdWrite:
;;STB=0
rmb VFD_STB_bit,VFD_PORT
lda IOP_DATA0_L
and #VFD_DAT_LN_MASK
beq OnlyHtSentCmd ;;if data len =0 then sent cmd
;;get data size
cmp #2
beq fSendNec16312Com
sta rDataLen
;;send out command
jsr fSentWriteCmd ;;only sent write cmd 0x101
lda IOP_DATA1_L ;;address it only user 6'b
sta rOutBuffer
rol rOutBuffer
nop
rol rOutBuffer
ldy #6 ;;6'b
jsr fSentBit ;;it only 6'b
rProcessDataOut:
ldx #0
rSendOutNextByte:
lda IOP_DATA2_L,x
sta rOutBuffer
jsr fHtSendOneByte
jsr fDelay2
jsr fDelay2
jsr fDelay2
inx
cpx rDataLen
bne rSendOutNextByte
bra rExitPorcessVfdWrite
OnlyHtSentCmd:
lda IOP_DATA1_H
sta rOutBuffer
ldy #8
jsr fSentBit
lda IOP_DATA1_L
sta rOutBuffer
ldy #4
jsr fSentBit
bra rExitPorcessVfdWrite
fSendNec16312Com:
lda IOP_DATA1_L ;;cmd0
cmp #$71
beq fSendTwoData
sta rOutBuffer
jsr fSendOneByte
bra rExitPorcessVfdWrite
fSendTwoData:
lda IOP_DATA1_L
sta rOutBuffer
jsr fSendOneByte
lda IOP_DATA2_L
sta rOutBuffer
jsr fSendOneByte
rExitPorcessVfdWrite:
lda #0
sta rDataLen
smb VFD_DATA_bit,VFD_PORT
jsr fDelay1
;;STB=1
smb VFD_STB_bit,VFD_PORT
rts
;;**************************************************************
;;Function :fSentWriteCmd
;;Description :it only send 3 'b ht1621cmd 101'b
;;Input :NONE
;;Output :NONE
;;**************************************************************
fSentWriteCmd:
;;data=1
smb VFD_DATA_bit,VFD_DATA_PORT
nop
jsr set_vfd_clk
;;data=0
rmb VFD_DATA_bit,VFD_DATA_PORT
nop
jsr set_vfd_clk
;;data =1
smb VFD_DATA_bit,VFD_DATA_PORT
nop
jsr set_vfd_clk
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_DATA_PORT
bra lSendOutOk
lOutLow:
rmb VFD_DATA_bit,VFD_DATA_PORT
lSendOutOk:
jsr set_vfd_clk
dey
bne lSendNextBit
rts
;;*************************************************************
;;Function :fSentBit
;;Description :y register value decide how many bit send
;;Input :rOutBuffer MSB out!
;;Output :NONE
;;**************************************************************
fSentBit:
lSendBitloop:
rol rOutBuffer
bcs rDataIsHi
rDataIsLow:
rmb VFD_DATA_bit,VFD_DATA_PORT
bra rDataSet
rDataIsHi:
smb VFD_DATA_bit,VFD_DATA_PORT
rDataSet:
jsr set_vfd_clk
dey
bne lSendBitloop
rts
;;**************************************************************
;;Function :fHtSendOneByte
;;Description :Send One Byte To ht1621, send one byte out LSB out!
;;Input :rOurBuffer
;;Output :NONE
;;**************************************************************
fHtSendOneByte:
ldy #8
rSendOneBit:
ror rOutBuffer
bcs rDataHigh
rDataLow:
rmb VFD_DATA_bit,VFD_DATA_PORT
bra rDataSetup
rDataHigh:
smb VFD_DATA_bit,VFD_DATA_PORT
rDataSetup
jsr set_vfd_clk
dey
bne rSendOneBit
rts
set_vfd_clk:
rmb VFD_CLK_bit,VFD_PORT
jsr f_delay
smb VFD_CLK_bit,VFD_PORT
jsr f_delay
rts
f_delay:
jsr fDelay1
nop
jsr fDelay1
nop
jsr fDelay1
nop
jsr fDelay1
nop
jsr fDelay1
rts
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -