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

📄 timer.a51

📁 演示了如何开发WINDOES下I/O口驱动
💻 A51
字号:
; This module services the real time interrupt
; It is also responsible for the "real world" buttons and lights
;
; CHANGE SINCE THE BOOK TEXT WAS FINALIZED: Idle_Time is used by the Operating System
; to override the report times defined in the Endpoint Descriptor.  A device driver
; will modify Idle_Time to change the reporting characteristics of a HID device.
; During initialization the OS sets Idle_Time = 0 which turns reporting OFF unless
; a change is detected; an application that starts to poll a HID device will appear
; to hang. While it is possible to write extra PCHost application code to re-enable
; Idle_Time is it simpler to defeat this mechanism by IGNORRING the Idle_Time value.
;
; Get a Real Time interrupt every One millisecond (using SOF interrupt)
;
; HID devices work on a 4 millisecond timer
; We have one task
;	a) Strobe the LEDs (only one is ever really on, saves power)
ServiceTimerRoutine:
	DJNZ	Msec_counter, Done	; Only need to check every 4msec
	MOV	Msec_counter, #4	; Reinitialize
;
; LED task
; Light the next LED in sequence
	MOV	A, LEDStrobe		; Get the current enabling pattern
	RL	A
	MOV	LEDStrobe, A		; Save for next time
	ANL	A, LEDValue		; Get the LED image
	CALL 	WriteLEDs		; Update the real world
;
; Create an Input Report from the Buttons value
; This will be continually overwritten while the PCHost is not polling for data
	CALL	ReadButtons
	JMP	CreateInputReport	; RETurn via CreateInputReport

; Talk to the "real world" buttons and lights
ReadButtons:
	MOV	DPTR, #PortB_Pins
	MOVX	A, @DPTR
	ANL	A, #0F0H		; Get upper nibble
	MOV	Temp, A
	INC	DPTR			; Point to PortC_Pins
	MOVX	A, @DPTR
	ANL	A, #0FH			; Get lower nibble
	ORL	A, Temp			; Merge both halves together
	RET	
WriteLEDs:
	CPL	A			; 0 = LED on
	MOV	DPTR, #PortA_Out
	MOVX	@DPTR, A
Done:	RET
		

⌨️ 快捷键说明

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