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

📄 rf.asm

📁 采用6502内核单片机,结合无线通讯模块的无线通讯方案,含Asm代码.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		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 + -