📄 bal.lst
字号:
0416 907EC0 =1 731 MOV DPTR, #EP0OutBuffer ; Point to the Report
0419 E0 =1 732 MOVX A, @DPTR ; Get the Data
041A F548 =1 733 MOV LEDValue, A ; Update the local variable
041C 22 =1 734 RET
=1 735
041D =1 736 CreateInputReport: ; Called from TIMER which detected the need
=1 737 ; The report is only one byte long in this first example
=1 738 ; It contains a new value for the Buttons
041D 907E80 =1 739 MOV DPTR, #EP1InBuffer ; Point to the buffer
0420 F0 =1 740 MOVX @DPTR, A ; Update the Report
0421 907FB7 =1 741 MOV DPTR, #IN1ByteCount
0424 7401 =1 742 MOV A, #1
0426 F0 =1 743 MOVX @DPTR, A ; Endpoint 1 now 'armed', next IN will get data
0427 22 =1 744 RET
=1 745
746 $INCLUDE(Timer.A51)
=1 747 ; This module services the real time interrupt
=1 748 ; It is also responsible for the "real world" buttons and lights
=1 749 ;
A51 MACRO ASSEMBLER BAL 21/07/99 16:17:43 PAGE 13
=1 750 ; CHANGE SINCE THE BOOK TEXT WAS FINALIZED: Idle_Time is used by the Operating System
=1 751 ; to override the report times defined in the Endpoint Descriptor. A device driver
=1 752 ; will modify Idle_Time to change the reporting characteristics of a HID device.
=1 753 ; During initialization the OS sets Idle_Time = 0 which turns reporting OFF unless
=1 754 ; a change is detected; an application that starts to poll a HID device will appear
=1 755 ; to hang. While it is possible to write extra PCHost application code to re-enable
=1 756 ; Idle_Time is it simpler to defeat this mechanism by IGNORRING the Idle_Time value.
=1 757 ;
=1 758 ; Get a Real Time interrupt every One millisecond (using SOF interrupt)
=1 759 ;
=1 760 ; HID devices work on a 4 millisecond timer
=1 761 ; We have one task
=1 762 ; a) Strobe the LEDs (only one is ever really on, saves power)
0428 =1 763 ServiceTimerRoutine:
0428 D54926 =1 764 DJNZ Msec_counter, Done ; Only need to check every 4msec
042B 754904 =1 765 MOV Msec_counter, #4 ; Reinitialize
=1 766 ;
=1 767 ; LED task
=1 768 ; Light the next LED in sequence
042E E547 =1 769 MOV A, LEDStrobe ; Get the current enabling pattern
0430 23 =1 770 RL A
0431 F547 =1 771 MOV LEDStrobe, A ; Save for next time
0433 5548 =1 772 ANL A, LEDValue ; Get the LED image
0435 12044C =1 773 CALL WriteLEDs ; Update the real world
=1 774 ;
=1 775 ; Create an Input Report from the Buttons value
=1 776 ; This will be continually overwritten while the PCHost is not polling for data
0438 12043D =1 777 CALL ReadButtons
043B 80E0 =1 778 JMP CreateInputReport ; RETurn via CreateInputReport
=1 779
=1 780 ; Talk to the "real world" buttons and lights
043D =1 781 ReadButtons:
043D 907F9A =1 782 MOV DPTR, #PortB_Pins
0440 E0 =1 783 MOVX A, @DPTR
0441 54F0 =1 784 ANL A, #0F0H ; Get upper nibble
0443 F540 =1 785 MOV Temp, A
0445 A3 =1 786 INC DPTR ; Point to PortC_Pins
0446 E0 =1 787 MOVX A, @DPTR
0447 540F =1 788 ANL A, #0FH ; Get lower nibble
0449 4540 =1 789 ORL A, Temp ; Merge both halves together
044B 22 =1 790 RET
044C =1 791 WriteLEDs:
044C F4 =1 792 CPL A ; 0 = LED on
044D 907F96 =1 793 MOV DPTR, #PortA_Out
0450 F0 =1 794 MOVX @DPTR, A
0451 22 =1 795 Done: RET
=1 796
797
798 END
A51 MACRO ASSEMBLER BAL 21/07/99 16:17:43 PAGE 14
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC . . . . . . . . . . . D ADDR 00E0H A
B . . . . . . . . . . . . D ADDR 00F0H A
BADREQUEST. . . . . . . . C ADDR 01C6H A
BUMPDPTR. . . . . . . . . C ADDR 01CCH A
BUTTONSANDLIGHTS. . . . . N NUMB -----
CLEARINT2 . . . . . . . . C ADDR 0119H A
COMMANDTABLE. . . . . . . C ADDR 01FAH A
CONFIGLENGTH. . . . . . . N NUMB 0022H A
CONFIGURATIONDESCRIPTOR . C ADDR 02D7H A
CONFIGURED. . . . . . . . B ADDR 0020H.0 A
COPYRB. . . . . . . . . . C ADDR 01A0H A
COPYSD. . . . . . . . . . C ADDR 02B7H A
CORRECTSUBROUTINE . . . . C ADDR 01D5H A
CREATEINPUTREPORT . . . . C ADDR 041DH A
DECONFIGURED. . . . . . . C ADDR 0278H A
DEVICEDESCRIPTOR. . . . . C ADDR 02C5H A
DEVICE_CLEAR_FEATURE. . . C ADDR 023AH A
DEVICE_GET_STATUS . . . . C ADDR 0267H A
DEVICE_SET_FEATURE. . . . C ADDR 023AH A
DONE. . . . . . . . . . . C ADDR 0451H A
DPH . . . . . . . . . . . D ADDR 0083H A
DPL . . . . . . . . . . . D ADDR 0082H A
DPS . . . . . . . . . . . D ADDR 0086H A
EI. . . . . . . . . . . . D ADDR 00A8H A
EICON . . . . . . . . . . D ADDR 00D8H A
EIE . . . . . . . . . . . D ADDR 00E8H A
ENDOFDESCRIPTORS. . . . . C ADDR 03AFH A
ENDPOINTDESCRIPTOR. . . . C ADDR 02F2H A
ENDPOINT_CLEAR_FEATURE. . C ADDR 023CH A
ENDPOINT_GET_STATUS . . . C ADDR 026BH A
ENDPOINT_SET_FEATURE. . . C ADDR 023AH A
ENDPOINT_SYNC_FRAME . . . C ADDR 023AH A
EP0CONTROL. . . . . . . . N NUMB 7FB4H A
EP0INBUFFER . . . . . . . N NUMB 7F00H A
EP0IN_ISR . . . . . . . . C ADDR 0118H A
EP0OUTBUFFER. . . . . . . N NUMB 7EC0H A
EP0OUT_ISR. . . . . . . . C ADDR 0118H A
EP1INBUFFER . . . . . . . N NUMB 7E80H A
EP1IN_ISR . . . . . . . . C ADDR 0118H A
EP1OUT_ISR. . . . . . . . C ADDR 0118H A
EP2IN_ISR . . . . . . . . C ADDR 0118H A
EP2OUT_ISR. . . . . . . . C ADDR 0118H A
EP3IN_ISR . . . . . . . . C ADDR 0118H A
EP3OUT_ISR. . . . . . . . C ADDR 0118H A
EP4IN_ISR . . . . . . . . C ADDR 0118H A
EP4OUT_ISR. . . . . . . . C ADDR 0118H A
EP5IN_ISR . . . . . . . . C ADDR 0118H A
EP5OUT_ISR. . . . . . . . C ADDR 0118H A
EP6IN_ISR . . . . . . . . C ADDR 0118H A
EP6OUT_ISR. . . . . . . . C ADDR 0118H A
EP7IN_ISR . . . . . . . . C ADDR 0118H A
EP7OUT_ISR. . . . . . . . C ADDR 0118H A
EXIF. . . . . . . . . . . D ADDR 0091H A
EXITISR . . . . . . . . . C ADDR 014BH A
EXPIRED_TIME. . . . . . . D ADDR 0042H A
FIXUPTHENREPLY. . . . . . C ADDR 02B1H A
FLAGS . . . . . . . . . . D ADDR 0020H A
GET_CLASS_DESCRIPTOR. . . C ADDR 029FH A
GET_CONFIGURATION . . . . C ADDR 0264H A
GET_DESCRIPTOR. . . . . . C ADDR 027BH A
A51 MACRO ASSEMBLER BAL 21/07/99 16:17:43 PAGE 15
GET_IDLE. . . . . . . . . C ADDR 025DH A
GET_INTERFACE . . . . . . C ADDR 023AH A
GET_PROTOCOL. . . . . . . C ADDR 023AH A
GET_REPORT. . . . . . . . C ADDR 0250H A
HANDSHAKE . . . . . . . . C ADDR 01ADH A
HIDDESCRIPTOR . . . . . . C ADDR 02E9H A
I2CCONTROL. . . . . . . . N NUMB 7FA5H A
I2CDATA . . . . . . . . . N NUMB 7FA6H A
I2CDATABYTE . . . . . . . D ADDR 0046H A
I2C_ISR . . . . . . . . . C ADDR 0118H A
IDLE_TIME . . . . . . . . D ADDR 0041H A
IN07IEN . . . . . . . . . N NUMB 7FACH A
IN07IRQ . . . . . . . . . N NUMB 7FA9H A
IN0BYTECOUNT. . . . . . . N NUMB 7FB5H A
IN1BYTECOUNT. . . . . . . N NUMB 7FB7H A
INITIALIZE4MSECCOUNTER. . C ADDR 03CEH A
INITIALIZEINTERRUPTSYSTEM C ADDR 03EEH A
INITIALIZEIOSYSTEM. . . . C ADDR 03D2H A
INT0_ISR. . . . . . . . . C ADDR 0118H A
INT1_ISR. . . . . . . . . C ADDR 0118H A
INT4_ISR. . . . . . . . . C ADDR 0118H A
INT5_ISR. . . . . . . . . C ADDR 0118H A
INT6_ISR. . . . . . . . . C ADDR 0118H A
INTERFACEDESCRIPTOR . . . C ADDR 02E0H A
INTERFACE_CLEAR_FEATURE . C ADDR 023AH A
INTERFACE_GET_STATUS. . . C ADDR 026BH A
INTERFACE_SET_FEATURE . . C ADDR 023AH A
INVALID . . . . . . . . . C ADDR 023AH A
ISDESCRIPTOR. . . . . . . B ADDR 0020H.3 A
LEDBUFFER . . . . . . . . D ADDR 0046H A
LEDSTROBE . . . . . . . . D ADDR 0047H A
LEDVALUE. . . . . . . . . D ADDR 0048H A
LIGHTVALUES . . . . . . . D ADDR 0046H A
LOADSUDPTR. . . . . . . . C ADDR 01B8H A
MAIN. . . . . . . . . . . C ADDR 0402H A
MONITORSPACE. . . . . . . D ADDR 0021H A
MORE. . . . . . . . . . . C ADDR 040BH A
MSEC_COUNTER. . . . . . . D ADDR 0049H A
NEXTDPTR. . . . . . . . . C ADDR 01CBH A
NEXTSTRING. . . . . . . . C ADDR 0291H A
NOTB5 . . . . . . . . . . C ADDR 0181H A
NOT_USED. . . . . . . . . C ADDR 0118H A
OLD_BUTTONS . . . . . . . D ADDR 0046H A
OUT07IEN. . . . . . . . . N NUMB 7FADH A
OUT07IRQ. . . . . . . . . N NUMB 7FAAH A
OUT0BYTECOUNT . . . . . . N NUMB 7FC5H A
OVERLAY . . . . . . . . . D ADDR 0046H A
PAGEREG . . . . . . . . . D ADDR 0092H A
PCON. . . . . . . . . . . D ADDR 0087H A
PORTA_CONFIG. . . . . . . N NUMB 7F93H A
PORTA_OE. . . . . . . . . N NUMB 7F9CH A
PORTA_OUT . . . . . . . . N NUMB 7F96H A
PORTA_PINS. . . . . . . . N NUMB 7F99H A
PORTB_CONFIG. . . . . . . N NUMB 7F94H A
PORTB_OE. . . . . . . . . N NUMB 7F9DH A
PORTB_PINS. . . . . . . . N NUMB 7F9AH A
PROCESSOUTPUTREPORT . . . C ADDR 0416H A
PSW . . . . . . . . . . . D ADDR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -