привет хочу понятьалгоритм работы кода джостика и собрать его от кода до запуска.
нашел вот это:
http://eleccelerator.com/tutorial-about ... scriptors/https://os.mbed.com/users/wim/notebook/ ... ck-device/это весь код который необходимый для программы джостика (тот что ниже)?и что еще подключено вот это в код?
Include "Th_hid_desc.bas" ' ------- этот же код вроде есть в конце ниже
'Include "modedefs.bas" ' ------- это вообще не понял что такое
PBP Code-----------------------------------
Include "Th_hid_desc.bas" ' Include the HID descriptors
'Include "modedefs.bas" ' Include serial modes
DEFINE OSC 48
DEFINE LOADER_USED 1
DEFINE RESET_ORG 1100h ' For Microchip USB Bootloader
DEFINE INTERRUPT_ORG 1108h ' For Microchip USB Bootloader 'LED var PORTC.0
' Define ADCIN parameters
Define ADC_BITS 8 ' Set number of bits in result
Define ADC_CLOCK 3 ' Set clock source (3=rc)
Define ADC_SAMPLEUS 100 ' Set sampling time in uS
'Define LCD_DREG PORTB ' LCD data pin port
'Define LCD_DBIT 0 ' LCD data pin bit
'Define LCD_RSREG PORTC ' LCD register select pin port
'Define LCD_RSBIT 6 ' LCD register select pin bit
'Define LCD_EREG PORTC ' LCD enable pin port
'Define LCD_EBIT 7 ' LCD enable pin bit
'Define LCD_BITS 4 ' LCD number of data bits
'Define LCD_LINES 2 ' LCD number of lines
'define HSER_RCSTA 090h
'define HSER_TXSTA 0A4h
'define HSER_BAUD 115200
'define HSER_CLROERR
USBBufferSizeMax con 10 ' maximum buffer size
USBBufferSizeTX con 10 ' input
USBBufferSizeRX con 10 ' output
' the USB buffer...
USBBuffer Var Byte[USBBufferSizeMax]
USBBufferCount Var Byte
temp var byte
' ************************************************** **********
' * Port configuration: *
' * PORTD.0-7 are digital inputs *
' * AN0,AN5 active as analog inputs *
' ************************************************** **********
PORTA = 0
PORTB = 0
PORTC = 0
PORTD = 0
PORTE = 0
TRISA = %11111111
TRISB = %11111111
TRISC = %11111111
TRISD = %11111111
TRISE = %11111111
ADCON1 = %00001001
' ************************************************** **********
' * main program loop - remember, you must keep the USB *
' * connection alive with a call to USBService every couple *
' * of milliseconds or so... *
' ************************************************** **********
USBInit ' initialise USB...
ProgramStart:
'gosub DoUSBIn
ADCIN 0,USBBuffer[0]
ADCIN 1,USBBuffer[1]
ADCIN 2,USBBuffer[2]
USBService
ADCIN 3,USBBuffer[3]
ADCIN 4,USBBuffer[4]
ADCIN 5,USBBuffer[5]
GoSub DoUSBOut ' keep connection alive
ADCIN 6,USBBuffer[6]
ADCIN 7,USBBuffer[7]
temp = 255-PORTD
USBBuffer.0(64) = temp.4
USBBuffer.0(65) = temp.5
USBBuffer.0(66) = temp.6
USBBuffer.0(67) = temp.7
temp = 255-PORTB
USBBuffer.0(68) = temp.0
USBBuffer.0(69) = temp.1
USBBuffer.0(70) = temp.2
USBBuffer.0(71) = temp.3
USBBuffer.0(72) = temp.4
USBBuffer.0(73) = temp.5
USBBuffer.0(74) = temp.6
USBBuffer.0(75) = temp.7
'GoSub DoUSBOut
USBBufferCount = USBBufferSizeTX ' TX buffer size
USBService ' keep connection alive
USBOut 1, USBBuffer, USBBufferCount, DoUSBOut2 ' if bus available, transmit data
DoUSBOut2:
GoTo ProgramStart
DISCRIPTOR code----------------------------------------------------------------
ReportDescriptor1
RETLW 0x05
RETLW 0x01 ; USAGE_PAGE (Generic Desktop)
RETLW 0x09
RETLW 0x04 ; USAGE (Joystick)
RETLW 0xa1
RETLW 0x01 ; COLLECTION (Application)
RETLW 0x05
RETLW 0x01 ; USAGE_PAGE (Generic Desktop)
RETLW 0x09
RETLW 0x04 ; USAGE (Joystick)
RETLW 0xa1
RETLW 0x00 ; COLLECTION (Physical)
RETLW 0x09
RETLW 0x30 ; USAGE (X)
RETLW 0x09
RETLW 0x31 ; USAGE (Y)
RETLW 0x09
RETLW 0x32 ; USAGE (Z)
RETLW 0x09
RETLW 0x33 ; USAGE (Rx)
RETLW 0x09
RETLW 0x34 ; USAGE (Ry)
RETLW 0x09
RETLW 0x35 ; USAGE (Rz)
RETLW 0x09
RETLW 0x36 ; USAGE (Ry)
RETLW 0x09
RETLW 0x37 ; USAGE (Rz)
RETLW 0x75
RETLW 0x08 ; REPORT_SIZE (8)
RETLW 0x95
RETLW 0x08 ; REPORT_COUNT (8)
RETLW 0x35
RETLW 0x00 ; PHYSICAL_MINIMUM (0)
RETLW 0x46
RETLW 0xff
RETLW 0x00 ; PHYSICAL_MAXIMUM (255)
RETLW 0x15
RETLW 0x00 ; LOGICAL_MINIMUM (0)
RETLW 0x26
RETLW 0xff
RETLW 0x00 ; LOGICAL_MAXIMUM (255)
RETLW 0x81
RETLW 0x02 ; INPUT (DataVarAbs)
RETLW 0xc0 ; END_COLLECTION
RETLW 0x05
RETLW 0x09 ; USAGE_PAGE (Button)
RETLW 0x19
RETLW 0x01 ; USAGE_MINIMUM (Button 1)
RETLW 0x29
RETLW 0x10 ; USAGE_MAXIMUM (Button 16)
RETLW 0x15
RETLW 0x00 ; LOGICAL_MINIMUM (0)
RETLW 0x25
RETLW 0x01 ; LOGICAL_MAXIMUM (1)
RETLW 0x45
RETLW 0x00 ; PHYSICAL_MAXIMUM (0)
RETLW 0x75
RETLW 0x01 ; REPORT_SIZE (1)
RETLW 0x95
RETLW 0x10 ; REPORT_COUNT (16)
RETLW 0x81
RETLW 0x02 ; INPUT (Data Var Abs)
RETLW 0xc0 ; END_COLLECTION
EndReportDescriptor1