📄 rf.asm
字号:
bcc ?L_20us ;+
iny ;+
cpy #150 ;+
bcc ?L_Long_Head ;+
;+
lda P_IOB_Data ;+
ora #%00010000 ;+
sta P_IOB_Data ;/
lda #138 ;Set Timer3 preload counter= 0
sta P_TMR3_Preload
lda #C_T3FCS_Div_32 ;Set Timer3 clock source is Fcs
sta P_TMR2_3_Ctrl1
lda #C_T38B_Timer ;Set Timer3 is 8-bit timer
sta P_TMR2_3_Ctrl0 ;8000000/32/(256-138)=472us
lda #$FF ;clear INT request flag
sta P_INT_Flag1
lda #C_INT_T3OIE ;enable Timer3 overflow
sta P_INT_Ctrl1
lda GB_Send_Flag
and #~C_Head_Allow
ora #C_Start_Allow
sta GB_Send_Flag
?L_Send_Data_Head_Exit:
rts
;==================================================================================
; Function: F_Send_Data_Start
; Description: send start data
; Input: GB_Send_Flag
; Output: GB_Send_Flag
; Destroy: A
; Stacks: 1
;==================================================================================
F_Send_Data_Start:
lda GB_Send_Flag
and #C_Start_Allow
beq ?L_Send_Data_Start_Exit
lda IB_470us_Count ;\
cmp #7 ;+
bcs ?L_Start_End ;+
;+
inc IB_470us_Count ;+
lda IB_470us_Count ;+ = 3.76ms
cmp #7 ;+
bcc ?L_Send_Data_Start_Exit ;+
;+
lda P_IOB_Data ;+
and #%11101111 ;+
sta P_IOB_Data ;/
jmp ?L_Send_Data_Start_Exit
?L_Start_End:
lda #0
sta IB_470us_Count
lda GB_Send_Flag
and #~C_Start_Allow
ora #C_ID_Allow
sta GB_Send_Flag
lda #C_ID_Buf
sta GB_DataBuf
?L_Send_Data_Start_Exit:
rts
;==================================================================================
; Function: F_Send_Data
; Description: send ID word and 4byte Keyvalue
; Input: GB_Send_Flag
; IB_ShowBuf
; Output: GB_Send_Flag
; Destroy: A
; Stacks: 1
;==================================================================================
F_Send_Data:
lda GB_Send_Flag
and #C_ID_Allow
beq ?L_Data1
jsr F_Send ;send ID word
lda GB_Sending_Flag
and #C_Send_8BitEnd
beq ?L_Send_Data_Exit0
lda GB_Sending_Flag
and #~C_Send_8BitEnd
sta GB_Sending_Flag
lda GB_Send_Flag
and #~C_ID_Allow
ora #C_Data1_Allow
sta GB_Send_Flag
lda IB_ShowBuf
sta GB_DataBuf
jmp ?L_Send_Data_Exit0
?L_Data1:
lda GB_Send_Flag
and #C_Data1_Allow
beq ?L_Data2
jsr F_Send ;send data1
lda GB_Sending_Flag
and #C_Send_8BitEnd
beq ?L_Send_Data_Exit0
lda GB_Sending_Flag
and #~C_Send_8BitEnd
sta GB_Sending_Flag
lda GB_Send_Flag
and #~C_Data1_Allow
ora #C_Data2_Allow
sta GB_Send_Flag
lda IB_ShowBuf
eor #$FF
sta GB_DataBuf
?L_Send_Data_Exit0:
jmp ?L_Send_Data_Exit
?L_Data2:
lda GB_Send_Flag
and #C_Data2_Allow
beq ?L_Data3
jsr F_Send ;send data2
lda GB_Sending_Flag
and #C_Send_8BitEnd
beq ?L_Send_Data_Exit
lda GB_Sending_Flag
and #~C_Send_8BitEnd
sta GB_Sending_Flag
lda GB_Send_Flag
and #~C_Data2_Allow
ora #C_Data3_Allow
sta GB_Send_Flag
lda IB_ShowBuf
sta GB_DataBuf
jmp ?L_Send_Data_Exit
?L_Data3:
lda GB_Send_Flag
and #C_Data3_Allow
beq ?L_Data4
jsr F_Send ;send data3
lda GB_Sending_Flag
and #C_Send_8BitEnd
beq ?L_Send_Data_Exit
lda GB_Sending_Flag
and #~C_Send_8BitEnd
sta GB_Sending_Flag
lda GB_Send_Flag
and #~C_Data3_Allow
ora #C_Data4_Allow
sta GB_Send_Flag
lda IB_ShowBuf
eor #$FF
sta GB_DataBuf
jmp ?L_Send_Data_Exit
?L_Data4:
lda GB_Sending_Flag
and #C_Send_40BitEnd
bne ?L_End
lda GB_Send_Flag
and #C_Data4_Allow
beq ?L_Send_Data_Exit
jsr F_Send ;send data4
lda GB_Sending_Flag
and #C_Send_8BitEnd
beq ?L_Send_Data_Exit
lda GB_Sending_Flag
ora #C_Send_40BitEnd
sta GB_Sending_Flag
jmp ?L_Send_Data_Exit
?L_End:
lda P_IOB_Data
ora #%00010000
sta P_IOB_Data
lda #0
sta GB_Send_Flag
sta GB_Sending_Flag
sta P_INT_Ctrl1
?L_Send_Data_Exit:
rts
;==================================================================================
; Function: F_Send
; Description: send one byte data
; Input: GB_Sending_Flag
; GB_DataBuf
; Output: GB_Sending_Flag
; Destroy: A
; Stacks: 1
;==================================================================================
F_Send:
lda GB_Sending_Flag
and #C_Sending
bne ?L_Sending
lda GB_Sending_Flag
ora #C_Sending
sta GB_Sending_Flag
lda P_IOB_Data
ora #%00010000
sta P_IOB_Data
rol GB_DataBuf
bcc ?L_Send_0
?L_Send_1: ;send bit 1
lda GB_Sending_Flag
ora #C_Sending_Bit
sta GB_Sending_Flag
jmp ?L_Sending_Exit
?L_Send_0: ;send bit 0
lda GB_Sending_Flag
and #~C_Sending_Bit
sta GB_Sending_Flag
jmp ?L_Sending_Exit
?L_Sending:
lda P_IOB_Data
and #%11101111
sta P_IOB_Data
lda GB_Sending_Flag
and #C_Sending_Bit
beq ?L_Bit_count
?L_Sending_1: ;send bit 1
inc IB_470us_Count
lda IB_470us_Count
cmp #3
bne ?L_Sending_Exit
?L_Bit_count:
lda #0
sta IB_470us_Count
lda GB_Sending_Flag
and #~C_Sending
sta GB_Sending_Flag
inc IB_Bit_number
lda IB_Bit_number
cmp #8 ;one byte sending end?
bcc ?L_Sending_Exit ;no
lda #0
sta IB_Bit_number
lda GB_Sending_Flag
ora #C_Send_8BitEnd
sta GB_Sending_Flag
?L_Sending_Exit:
rts
;==================================================================================
; Function: F_Key
; Description: Scanning Key
; Input: None
; Output: GB_KeyValue---------Keys value
; GB_KeyDownFlag------Keys-changed flag
; Destroy: A
; Stacks: 1
;==================================================================================
F_Key:
lda IB_KeyupFlag ;key up?
bne ?L_JudgeUp ;No
lda P_IOA_Data ;Scanning Keys
and #$80 ;Get the Keys value,Keys changed?
bne ?L_CmpClr ;No
?L_TimersInc:
inc IB_CmpTimers ;\
lda IB_CmpTimers ;+
cmp #CB_CmpTimers ;+ = Compare 6 times and save Keys value
bcc ?L_SWx4Exit ;/
lda #1
sta GB_KeyDownFlag ;Set the Keys-down flag
sta IB_KeyupFlag
inc IB_ShowBuf
jmp ?L_CmpClr
?L_JudgeUp:
lda P_IOA_Data ;Scanning Keys
and #$80 ;Keys up?
beq ?L_CmpClr ;no
inc IB_CmpTimers ;\
lda IB_CmpTimers ;+ = Compare 6 times untile Keys up
cmp #CB_CmpTimers ;+
bcc ?L_SWx4Exit ;/
lda #0
sta IB_KeyupFlag ;keys up
?L_CmpClr:
lda #0
sta IB_CmpTimers
?L_SWx4Exit:
nop
nop
rts
;==================================================================================
; Function: F_Light
; Description: light LEDs to reflect the Keys value
; Input: GB_KeyValue------Keys value
; GB_Receive_Flag
; Output: none
; Destroy: A
; Stacks: 1
;==================================================================================
F_Light:
lda GB_Receive_Flag
and #C_ReceEnd_Allow ;receive data
beq ?L_no ;no
lda GB_Receive_Flag
and #~C_ReceEnd_Allow
sta GB_Receive_Flag
lda G_RF_data+1
sta IB_ShowBuf
?L_no:
lda IB_ShowBuf
and #$F
tax
lda P_IOA_Data
ora #$80
and #$80
ora T_SevenSegTable,x
sta P_IOA_Data
rts
T_SevenSegTable: ;The segment table of led
DB %00111111 ;Character '0'
DB %00000110 ;Character '1'
DB %01011011 ;Character '2'
DB %01001111 ;Character '3'
DB %01100110 ;Character '4'
DB %01101101 ;Character '5'
DB %01111101 ;Character '6'
DB %00000111 ;Character '7'
DB %01111111 ;Character '8'
DB %01101111 ;Character '9'
DB %01110111 ;Character 'A'
DB %01111100 ;Character 'b'
DB %00111001 ;Character 'C'
DB %01011110 ;Character 'd'
DB %01111001 ;Character 'E'
DB %01110001 ;Character 'F'
;==================================================================================
; Function: F_RF_Init
; Description: Process initialize
; Input: none
; Output: none
; Destroy: A
; Stacks: 1
;==================================================================================
F_RF_Init:
;------------------------------------------------------
;1.024ms loop
lda #C_TBASE_Div_8k ;1.024ms
sta P_BUZ_Ctrl
;------------------------------------------------
;IO init
lda #$00
sta P_IOA_Attrib
lda #$80
sta P_IOA_Data
lda #$7F
sta P_IOA_Dir
lda #$00
sta P_IOB_Attrib
sta P_IOB_Data
lda #%11011111
sta P_IOB_Dir
;------------------------------------------------------
;variable initialize
lda #0
sta GB_KeyDownFlag
sta IB_CmpTimers
sta IB_KeyupFlag
sta IB_ShowBuf
sta GB_Send_Flag
sta IB_470us_Count
sta GB_Sending_Flag
sta GB_Lock_Num
sta GB_Receive_Flag
sta G_RF_Number
rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -