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

📄 main1.asm

📁 82K96E/82M99E开发的USB键盘接收端DEMO程序源码
💻 ASM
字号:
include			ht82k96e.inc
include			usbrf.inc
include			usbFIFO.inc

sel_reg_line						equ				usr.5
sel_ps2_line						equ				usr.4




extern			bKB_KeyUpt		:bit
extern			bFLAG_HvRpt		:bit
extern			btime_out_KB	:bit
extern			baddr_state		:bit
extern			bcfgvalue		:bit
extern			breseume_s		:bit
extern			bRmtWakeup		:bit


;for KB
scanin			equ			pa
extern			examine_kb_state		:near
extern			setled					:near
extern			KB_initial				:near
extern			kb_suspend				:near
extern			kb_io_config			:near



;rf_proc.asm
extern			Ram_init				:near

extern			config_USB				:near
extern			start_timer				:near
extern			ReportKBTime			:byte
extern			TempKBTime				:byte
extern			TempKBTime_L			:byte
extern			temp1					:byte
extern			temp2					:byte

extern			KB_LED						:byte

main            .section         'code'
;-----------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------
;						main program here
;-----------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------


main_start:

                        mov             a,status
						and				a,00110000b
                        xor             a,00110000b
                        sz             	z
                        jmp             watch_wake
						clr				wdt
						mov				a,10000111b
						mov				WDTS,a

						call			kb_io_config
						call			Ram_init
						call			KB_initial
						call			config_USB


						set				baddr_state				; USB in address state
						clr				wdts.3
						set				wdts.7						;clear usb reset	
						set				on_usb_clk		
						clr				sel_ps2_line	
						set				sel_reg_line					;set usb mode

						mov				a,00000011b
						mov				intc,a
						clr				timer0_on
;------------------------------------------------------------------------------------------------
mainloop:
						clr				wdt
						sz				suspend_line
						jmp				Tosuspend
;------------------------------------------------------------------------------------------------
maintag:
                		SZ      		bCfgValue               ;Has configured ?
                		JMP     		maintag_cnt           	;Yes
                		JMP     		MainLoop                ;No
maintag_cnt:
						jmp				examine_kb_state
exit_of_examine_kb_state:

;------------------------------------------------------------------------------------------------
NeedReportCheck:
    ;Whether has device been configured ?
    ;Yes: May report data ?
                		SZ      		bCfgValue               	;Has configured ?
                		JMP     		HasConfigured           ;Yes
                		JMP     		MainLoop                ;No
HasConfigured:
;In Normal State

						SZ     			bFLAG_HvRpt 				;ever reported ?
                		JMP     		Check_Mouse_KB_state	;Yes 
	;Report all data immediately
						call			start_timer
						SZ     			bFLAG_HvRpt 				;ever reported ?
                		JMP     		Check_Mouse_KB_state	;Yes 
	;Report all data immediately
						set				bKB_KeyUpt
						clr				tempkbtime_L
						clr				tempkbtime
                		SET     		bFLAG_HvRpt 				;has reported
	
	;reset key changed flag
						jmp				Mainloop
;-----------------------------------------------------------------------------------
Check_Mouse_KB_State:
						SZ				ReportKBTime
						jmp				check_TIME_OUT_KB
						JMP				MainLoop				;Has Idle time
;-----------------------------------------------------------------------------------
check_time_out_KB:	
						SZ				btime_out_KB
						set				bKB_KeyUpt
						JMP				MainLoop
;-----------------------------------------------------------------------------------
ToSuspend:
						clr				timer1_on
						call			kb_suspend

wait_about_3s:
;about wait_3s for 6MHz crystal
						mov		a,2					
						mov		temp2,a
						set		temp1
						set		acc
wait_3s:
						clr		wdt
						snz		suspend_line				;about 850
						jmp		exit_of_suspend
						sdz		acc
						jmp		wait_3s
						sdz		temp1
						jmp		wait_3s						;217ms
						sdz		temp2
						jmp		wait_3s
				
;------------------------------------------------------------------------------------------
ToSuspend_again:
						clr		on_usb_clk	
						clr		regulator_off
						nop
						halt
watch_wake:
;check I/O wakeup
						clr		acc
						mov		a,10
						mov		temp1,a

wait_debounce:
						clr		wdt
						snz		suspend_line
						jmp		exit_of_resume_mode
						sdz		acc
						jmp		wait_debounce
						sdz		temp1
						jmp		wait_debounce

						mov		a,scanin
						xor		a,0ffh
						sz		z
						jmp		wait_reseume_out
;------------------------------------------------------------------------------------------
RemoteWakeup:
;out wakeup pulse

						snz		bRmtWakeup
						jmp		ToSuspend_again
				
						set		on_usb_clk	
						clr		regulator_off

						set		wakeup_line
						nop
						nop
						nop
						nop
						nop
						nop
						clr		wakeup_line
						set		breseume_s
;------------------------------------------------------------------------------------------
wait_reseume_out:
						clr		wdt
						snz		breseume_s
						jmp		exit_of_resume_mode
						jmp		wait_reseume_out		

;------------------------------------------------------------------------------------------
exit_of_resume_mode:
						snz		suspend_line
						jmp		exit_of_suspend
						jmp		ToSuspend_again

;------------------------------------------------------------------------------------------

exit_of_suspend:
                		CLR     bFLAG_HvRpt 				;reset to nonreport
						call	kb_io_config
						mov		a,kb_led
						call	setled
						set		timer1_on
						jmp		mainloop
;----------------------------------------------------------------------------------------------


				
public			main_start
public			exit_of_examine_kb_state
						
END

⌨️ 快捷键说明

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