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

📄 nec16312.asm

📁 .ifnz I2C_SUPPORT ************************************************************** Function : fPro
💻 ASM
字号:
.ifnz NEC16312
;;==============================================================
init_16312:
        smb		VFD_STB_bit,VFD_PORT_CFG
		lda     #$02       
		sta     rOutBuffer
        jsr     fSendOneByte 
        rmb		VFD_STB_bit,VFD_PORT_CFG
        jsr     fDelay1 
        smb		VFD_STB_bit,VFD_PORT_CFG
		lda     #$8b       
		sta     rOutBuffer
        jsr     fSendOneByte 
        rmb		VFD_STB_bit,VFD_PORT_CFG
        rts
;;==============================================================        
.ifnz NEC16312_SW
fProcessVfdReadsw:  
	    smb	VFD_STB_bit,VFD_PORT_CFG 	    
        lda	#%01000011	
        sta	rOutBuffer                                
        jsr	fSendOneByte                              
        rmb VFD_DATA_bit,VFD_DATA_PORT_CFG         
        jsr	fRecvOneByte                        
        lda	rOutBuffer                                
        and	#$F0 	                             
	    sta	IOP_DATA7_L	 
	    smb VFD_DATA_bit,VFD_DATA_PORT_CFG  	                              
	    rmb	VFD_STB_bit,VFD_PORT_CFG          
        rts		
.endif
;;==============================================================
fProcessVfdWrite:

		;;STB = 0
		;;rmb		VFD_STB_bit,VFD_PORT
		smb		VFD_STB_bit,VFD_PORT_CFG

        ;;send out command
.ifnz   STANDBY_6313
        lda     IOP_DATA1_L
        cmp     #$41
        bne     normal_write
        lda     #1
        sta     standby_flag_first ;;led_flag_1        
normal_write:  
.endif   
        
        lda     IOP_DATA1_L     ;;cmd0
        sta     rOutBuffer
        jsr     fSendOneByte

        ;;get data size
        lda     IOP_DATA0_L
        and     #VFD_DAT_LN_MASK        						  
        beq		lExitPorcessVfdWrite	;;if data len =0 then exit		

lProcessDataOut:
        sta     rDataLen

        ldx     #0
        
lSendOutNextByte:
.ifnz   STANDBY_6313
        lda     IOP_DATA2_L,x
        sta     rOutBuffer
        lda     rOutBuffer
        cmp     #$0a
        beq     cmp_standby_flag
        bra     s6313_end
cmp_standby_flag:
        lda     standby_flag_first
        cmp     #1
        bne     s6313_end
        lda     #1
        sta     standby_flag_end
s6313_end:
.else
        lda     IOP_DATA2_L,x
        sta     rOutBuffer
.endif       
        jsr     fSendOneByte

        inx
        cpx     rDataLen
        bne     lSendOutNextByte
        
lExitPorcessVfdWrite:

        jsr     fDelay1

		;;STB = 1
		;;smb		VFD_STB_bit,VFD_PORT
		rmb		VFD_STB_bit,VFD_PORT_CFG
		rts


;;*************************************************************
;;Function    : fProcessVfdRead
;;Description : process VFD read function 
;;Input       : parameter on memory 
;;Output      : data memory
;;**************************************************************      
fProcessVfdRead:       
;;fProcessVfdReadkey: 
		;;STB = 0
		;;rmb		VFD_STB_bit,VFD_PORT
		smb		VFD_STB_bit,VFD_PORT_CFG
		rmb		0,rSysCtrlFlag		
        
        ;;send out command
        lda     VfdScanCode     ;;cmd
        sta     rOutBuffer
        jsr     fSendOneByte
        
       
        ;;start to read data
		;;change port to INPUT
		rmb		VFD_DATA_bit,VFD_DATA_PORT_CFG

        ;;get data
        ldx     #0

lRecvNextByte_1:

        jsr     fRecvOneByte

        lda     rOutBuffer
        sta     VfdResponse,x
        beq		lResponseIs0
        
        ;;has new response 
        smb		0,rSysCtrlFlag		

lResponseIs0:
        inx
        cpx     VfdRespLen
        bne     lRecvNextByte_1

        ;;check has any new key push
		bbr		0,rSysCtrlFlag,lSkipUpdateVfdData

		;;copy to latch
		ldx		#0
.ifnz GET_5BYTES_KEY_DATA
lCopyNext:
		lda		VfdResponse,x
		sta		VfdResponse1,x
		inx
		cpx     #4
		bne     lCopyNext
		
		ldx		#4
lCopyNext1:
		lda		VfdResponse,x
		sta		VfdResponse2
		inx
		cpx     VfdRespLen
		bne     lCopyNext1
.else
lCopyNext:
		lda		VfdResponse,x
		sta		VfdResponse1,x
		inx
		cpx     VfdRespLen
		bne     lCopyNext
.endif
	
lSkipUpdateVfdData:


		;;STB = 1
		;;smb		VFD_STB_bit, VFD_PORT
		rmb		VFD_STB_bit, VFD_PORT_CFG
        smb		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_DATA_PORT ;;DATA=1
		        
                  bra		lSendOutOk
        
lOutLow:
		
	       	rmb		VFD_DATA_bit,VFD_DATA_PORT  ;;DATA=0

lSendOutOk:
		
		rmb		VFD_CLK_bit,VFD_PORT		;; set CLK = 0

        ;;hold at least 200ns
        jsr     delay_time
		smb		VFD_CLK_bit,VFD_PORT		;; set CLK = 1
		        
        jsr     delay_time
        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,VFD_PORT		;; set CLK = 0
		

        jsr		delay_time

		;;out clock high
		smb		VFD_CLK_bit,VFD_PORT		;; set CLK = 1
		

        ;;hold at least 100ns
        jsr		delay_time

        bbr		VFD_DATA_bit,VFD_DATA_PORT,lIsLow		

        sec        
        bra		lMakeData	
lIsLow:
        clc

lMakeData:

        ;;ror     rOutBuffer
        rol     rOutBuffer			;;fix reverse_fun on vfd.c

        dey
        bne     lRecvNextBit

        rts
 delay_time:
         jsr     fDelay1     
         jsr	fDelay1
         jsr     fDelay1  
         jsr     fDelay1         
         rts
.endif        
        
        

⌨️ 快捷键说明

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