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

📄 ad7312.asm

📁 .ifnz I2C_SUPPORT ************************************************************** Function : fPro
💻 ASM
字号:
.ifnz  AD7312
init_ad7312:          
             
          lda     #$fe
          sta     AD7312RegAddr
          jsr     ReadRegisterAD7312  
          
          lda     #$fd
          sta     AD7312RegAddr
          jsr     ReadRegisterAD7312  
          lda     rOutBuffer
          sta     DataReadFromReg     
          lda     DataReadFromReg          
          and     #%00000010	
          bne     Prestop
          bra     initad7312
Prestop:
          lda     #0
          sta     DataReadFromReg
          jmp     init_end       
initad7312:    
        lda     #0
        sta     DataReadFromReg   
        jsr     fDelay1
        smb	    VFD_STB_bit,VFD_PORT_CFG     
        lda     #$8c
        sta     rOutBuffer
        jsr     fSendOneByte
        rmb	    VFD_STB_bit,VFD_PORT_CFG 
        jsr     fDelay1
        smb	    VFD_STB_bit,VFD_PORT_CFG     
        lda     #$87
        sta     rOutBuffer
        jsr     fSendOneByte
        rmb  	VFD_STB_bit,VFD_PORT_CFG 
        jsr     fDelay1
    	lda     #$d9               ;;Set STANDBY KEY
    	sta     AD7312RegAddr
    	lda     #$01            ;;Set it by user
    	sta     WriteToRegData
    	jsr     WriteDataToAD7312Reg

        lda     #$f7               ;;Set IR ID first code
        sta     AD7312RegAddr
        lda     #$04               ;;Set it by user
        sta     WriteToRegData
        jsr     WriteDataToAD7312Reg
        
        lda     #$f8               ;;Set IR ID second code
        sta     AD7312RegAddr
        lda     #$fb               ;;Set it by user
        sta     WriteToRegData
        jsr     WriteDataToAD7312Reg
        
        lda     #$f9               ;;Set IR Power ON/OFF KEY
        sta     AD7312RegAddr
        lda     #$70              ;;Set it by user
        sta     WriteToRegData
        jsr     WriteDataToAD7312Reg 
        
        lda     #$fa               ;;Set IR Power ON/OFF KEY
        sta     AD7312RegAddr
        lda     #$ff             ;;Set it by user
        sta     WriteToRegData
        jsr     WriteDataToAD7312Reg 
        
        lda     #$fb              ;;Set IR Power ON/OFF KEY
        sta     AD7312RegAddr
        lda     #$ff            ;;Set it by user
        sta     WriteToRegData
        jsr     WriteDataToAD7312Reg 
        
        lda     #$fc               ;;Enter Power Saving is controlled by AD7312
        sta     AD7312RegAddr
        lda     #$a0
        sta     WriteToRegData
        jsr     WriteDataToAD7312Reg
                
        lda     #$fd               ;;FLAG=1 set systerm first connect AC power
        sta     AD7312RegAddr
        lda     #$40
        sta     WriteToRegData
        jsr     WriteDataToAD7312Reg         
.ifnz   HUAJIA_AD7312        
        lda     #%00010000
        sta     IOP_DATA5_H
.endif
init_end:           
        rts

WriteDataToAD7312Reg: 
        smb	VFD_STB_bit,VFD_PORT_CFG     
       
        lda     #$44
        sta     rOutBuffer
        jsr     fSendOneByte
        jsr     fDelay1  
        jsr     fDelay1     
        jsr     fDelay1   
        jsr     fDelay1               
        rmb	VFD_STB_bit,VFD_PORT_CFG 
        jsr     fDelay1     
        jsr     fDelay1   
        jsr     fDelay1 
        jsr     fDelay1  
        jsr     fDelay1
        jsr     fDelay1 
        jsr     fDelay1  
        jsr     fDelay1             
        smb	VFD_STB_bit,VFD_PORT_CFG
        lda     AD7312RegAddr
        sta     rOutBuffer
        jsr     fSendOneByte   
        lda     WriteToRegData
        sta     rOutBuffer
        jsr     fSendOneByte   
        jsr     fDelay1
        jsr     fDelay1     
        jsr     fDelay1   
        jsr     fDelay1                  
        rmb	VFD_STB_bit,VFD_PORT_CFG          
        rts  
ReadRegisterAD7312:
        smb	VFD_STB_bit,VFD_PORT_CFG   ;;STB=0    
        
        lda     #$43
        sta     rOutBuffer
        jsr     fSendOneByte 
        jsr     fDelay1                
        rmb	VFD_STB_bit,VFD_PORT_CFG   
        jsr     fDelay1     
        jsr     fDelay1   
        jsr     fDelay1 
        jsr     fDelay1  
        jsr     fDelay1
        jsr     fDelay1 
        jsr     fDelay1  
        jsr     fDelay1               
        smb	VFD_STB_bit,VFD_PORT_CFG   ;;STB=0
        lda     AD7312RegAddr
        sta     rOutBuffer
        jsr     fSendOneByte
        nop
        rmb     VFD_DATA_bit,VFD_DATA_PORT_CFG  ;;DATA IN 
        jsr     fDelay1  
       
        
        jsr     fRecvOneByte               
        nop
        smb     VFD_DATA_bit,VFD_DATA_PORT_CFG  ;;DATA OUT 
        jsr     fDelay1          
        rmb	VFD_STB_bit,VFD_PORT_CFG  
        
        rts  
fProcessVfdWrite:

        smb		VFD_STB_bit,VFD_PORT_CFG   ;;STB=0
        ;;send out command
        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:

        lda     IOP_DATA2_L,x
        sta     rOutBuffer
        jsr     fSendOneByte

        inx
        cpx     rDataLen
        bne     lSendOutNextByte
        
lExitPorcessVfdWrite:

        jsr     fDelay1

	rmb		VFD_STB_bit,VFD_PORT_CFG    ;;STB=1
	rts
		
         

;;*************************************************************
;;Function    : fProcessVfdRead
;;Description : process VFD read function 
;;Input       : parameter on memory 
;;Output      : data memory
;;**************************************************************
fProcessVfdRead:
	
		smb		VFD_STB_bit,VFD_PORT_CFG   ;;STB=0
		
        ;;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

lCopyNext:
		lda		VfdResponse,x
		sta		VfdResponse1,x
		inx
		cpx     VfdRespLen
		bne     lCopyNext


lSkipUpdateVfdData:

		smb		VFD_DATA_bit,VFD_DATA_PORT_CFG
		rmb		VFD_STB_bit, VFD_PORT_CFG   ;;STB=1

		;;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     fDelay1
        jsr	fDelay1
        jsr     fDelay1  
        jsr     fDelay1
		smb		VFD_CLK_bit,VFD_PORT		;; set CLK = 1
		        
        jsr     fDelay1     
        jsr	fDelay1
        jsr     fDelay1  
        jsr     fDelay1
        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		fDelay1
                jsr		fDelay1
                jsr             fDelay1  
                jsr             fDelay1
		smb		VFD_CLK_bit,VFD_PORT		;; set CLK = 1       
                jsr		fDelay1
                jsr		fDelay1
                jsr             fDelay1  
                jsr             fDelay1
                bbr		VFD_DATA_bit,VFD_DATA_PORT,lIsLow	
                sec        
                bra		lMakeData	
        
lIsLow:
                clc

lMakeData:

       
        rol     rOutBuffer			;;fix reverse_fun on vfd.c

        dey
        bne     lRecvNextBit

        rts

.endif

⌨️ 快捷键说明

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