These are the files i'm working with ( main code and descriptor )
The descriptor is from a different thread ( http://www.picbasic.co.uk/forum/showthread.php?t=2872 )

Main:

Code:
buffer	Var	Byte[8]
loopcnt	Var	Byte
state	Var	Byte

DEFINE OSC 48
@ __CONFIG   _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
@ __CONFIG   _CONFIG1H, _FOSC_HSPLL_HS_1H
@ __CONFIG    _CONFIG2H, _WDT_OFF_2H & _WDTPS_512_2H
@ __CONFIG    _CONFIG3H, _PBADEN_OFF_3H & _MCLRE_OFF_3H 
@ __CONFIG    _CONFIG4L, _LVP_OFF_4L & _ICPRT_OFF_4L &_XINST_OFF_4L

TRISB=%11111111

B1	     VAR	PORTB.0	'
B2	     VAR	PORTB.1	'
B3	     VAR	PORTB.2	'
B4	     VAR	PORTB.3	'
B5	     VAR	PORTB.4	'
B6	     VAR	PORTB.5	'
B7	     VAR	PORTB.6	'
B8	     VAR	PORTB.7	'


'	Include	"DESCKB.ASM"	' Include the HID descriptors
'	INCLUDE "USB_ASM_Service.pbp"  ; USB Init and Service interrupt routines
	Pause 10

	USBInit
	
	buffer[0] = 0
	buffer[1] = 0
	buffer[2] = 0
    buffer[3] = 0
    buffer[4] = 0
	buffer[5] = 0
	buffer[6] = 0
    buffer[7] = 0

MAIN:

IF B1=1 THEN   
  
    buffer[0] = 0   '1st byte = modifier keys (i.e. ctrl, alt, shift)
	buffer[1] = 0   '2nd byte
	buffer[2] = $14 '3rd byte = q character  
    buffer[3] = 0
    
ENDIF

IF B2=1 THEN

    buffer[0] = $2  '1st byte = modifier keys (i.e. ctrl, alt, shift)
	buffer[1] = 0   '2nd byte
	buffer[2] = $14 '3rd byte = Q character  
    buffer[3] = 0

ENDIF

IF (B1=0) AND (B2=0) THEN

    buffer[0] = 0  
	buffer[1] = 0  
	buffer[2] = 0  
    buffer[3] = 0

ENDIF

endgame:
	USBService	' Must service USB regularly
	USBOut 1, buffer, 8, endgame  ' Send buffer to endpoint 1
	while(1)
	wend
Goto MAIN	' Do it forever
Descriptor:

Code:
; KBDDESC.ASM
;
; This file contains a set of descriptors for a standard keyboard.

#define	EP0_BUFF_SIZE		8	; 8, 16, 32, or 64
#define	MAX_NUM_INT		1	; For tracking Alternate Setting
#define	MAX_EP_NUMBER		1	; UEP1
#define	NUM_CONFIGURATIONS	1
#define	NUM_INTERFACES		1

#define	MODE_PP			_PPBM0
#define	UCFG_VAL		_PUEN|_TRINT|_FS|MODE_PP	; Full-speed
;#define	UCFG_VAL		_PUEN|_TRINT|MODE_PP	; Low-speed

;#define USE_SELF_POWER_SENSE_IO
;#define USE_USB_BUS_SENSE_IO

; DEVICE CLASS USAGE
#define USB_USE_HID

; HID
; Endpoints Allocation
#define	HID_INTF_ID		0x00
#define	HID_UEP			UEP1
#define	HID_BD_OUT		ep1Bo
#define	HID_INT_OUT_EP_SIZE	8
#define	HID_BD_IN		ep1Bi
#define	HID_INT_IN_EP_SIZE	8
#define	HID_NUM_OF_DSC		1

; ******************************************************************
; This table is polled by the host immediately after USB Reset has been released.
; This table defines the maximum packet size EP0 can take.
; See section 9.6.1 of the Rev 1.0 USB specification.
; These fields are application DEPENDENT. Modify these to meet
; your specifications.
; ******************************************************************
DeviceDescriptor
	retlw	(EndDeviceDescriptor-DeviceDescriptor)/2	; bLength Length of this descriptor
	retlw	DSC_DEV		; bDescType This is a DEVICE descriptor
	retlw	0x10		; bcdUSBUSB Revision 1.10 (low byte)
	retlw	0x01		; high byte
	retlw	0x00		; bDeviceClass
	retlw	0x00		; bDeviceSubClass
	retlw	0x00		; bDeviceProtocol
	retlw	EP0_BUFF_SIZE	; bMaxPacketSize for EP0
	retlw	0xD8		; idVendor - 0x04D8 is Microchip Vendor ID (low byte)
	retlw	0x04		; (high byte)
	retlw	0x02		; idProduct (low byte)
	retlw	0x00		; (high byte)
	retlw	0x01		; bcdDevice (low byte)
	retlw	0x00		; (high byte)
	retlw	0x01		; iManufacturer
	retlw	0x02		; iProduct
	retlw	0x03		; iSerialNumber
	retlw	NUM_CONFIGURATIONS	; bNumConfigurations
EndDeviceDescriptor

; ******************************************************************
; This table is retrieved by the host after the address has been set.
; This table defines the configurations available for the device.
; See section 9.6.2 of the Rev 1.0 USB specification (page 184).
; These fields are application DEPENDENT. 
; Modify these to meet your specifications.
; ******************************************************************
; Configuration pointer table
USB_CD_Ptr
Configs
	db	low Config1, high Config1
	db	low Config1, high Config1

; Configuration Descriptor
Config1
	retlw	(Interface1-Config1)/2	; bLength Length of this descriptor
	retlw	DSC_CFG		; bDescType2 = CONFIGURATION
Config1Len
	retlw	low ((EndConfig1-Config1)/2)	; Length of this configuration
	retlw	high ((EndConfig1-Config1)/2)
	retlw	0x01		; bNumInterfaces Number of interfaces
	retlw	0x01		; bConfigValue Configuration Value
	retlw	0x04		; iConfigString Index for this config = #01
	retlw	0xA0		; bmAttributes attributes - bus powered
	retlw	0x50		; Max power consumption (2X mA)
Interface1
	retlw	(HIDDescriptor1-Interface1)/2	; length of descriptor
	retlw	DSC_INTF
	retlw	0x00		; number of interface, 0 based array
	retlw	0x00		; alternate setting
	retlw	0x01		; number of endpoints used in this interface
	retlw	0x03		; interface class - assigned by the USB
	retlw	0x01		; boot device
	retlw	0x01		; interface protocol - keyboard
	retlw	0x05		; index to string descriptor that describes this interface
HIDDescriptor1
	retlw	(Endpoint1-HIDDescriptor1)/2	; descriptor size (9 bytes)
	retlw	0x21		; descriptor type (HID)
	retlw	0x01		; HID class release number (1.00)
	retlw	0x01
	retlw	0x00		; Localized country code (none)
	retlw	0x01		; # of HID class descriptor to follow (1)
	retlw	0x22		; Report descriptor type (HID)
ReportDescriptor1Len
	retlw	low ((EndReportDescriptor1-ReportDescriptor1)/2)
	retlw	high ((EndReportDescriptor1-ReportDescriptor1)/2)
Endpoint1
	retlw	(EndConfig1-Endpoint1)/2	; length of descriptor
	retlw	DSC_EP
	retlw	0x81		; EP1, In
	retlw	0x03		; Interrupt
	retlw	0x08		; This should be the size of the endpoint buffer
	retlw	0x00
	retlw	0x0A		; polling interval (10ms)
EndConfig1

ReportDescriptor1
	retlw   0x05
	retlw   0x01    ; usage page (generic desktop)
	retlw   0x09
	retlw   0x06    ; usage (keyboard)
	retlw   0xA1
	retlw   0x01    ; collection (application)
	retlw   0x05
	retlw   0x07    ;   usage (Key codes)
	retlw   0x19
	retlw   0xE0    ;   usage minimum (224)
	retlw   0x29
	retlw   0xE7    ;   usage minimum (231)
	retlw   0x15
	retlw   0x00    ;     logical minimum (0)
	retlw   0x25
	retlw   0x01    ;     logical maximum (1)
	retlw   0x75
	retlw   0x01    ;     report size (1)
	retlw   0x95
	retlw   0x08    ;     report count (8)
	retlw   0x81
	retlw   0x02    ;     Input (data,variable,absolute)
	retlw   0x95
	retlw   0x01    ;     report count (1)
	retlw   0x75
	retlw   0x08    ;     report size (8)
	retlw   0x81
	retlw   0x01    ;     Input (constant)
	retlw   0x95
	retlw   0x05    ;     report count (5)
	retlw   0x75
	retlw   0x01    ;     report size (1)
	retlw   0x05
	retlw   0x08    ;     usage page (page# for leds)
	retlw   0x19
	retlw   0x01    ;     Usage minimum (1)
	retlw   0x29
	retlw   0x05    ;     Usage maximum (5)
	retlw   0x91
	retlw   0x02    ;     output (data,variable,absolute)
	retlw   0x95
	retlw   0x01    ;     report count (1)
	retlw   0x75
	retlw   0x03    ;     report size (3)
	retlw   0x91
	retlw   0x01    ;     output (constant)
	retlw   0x95
	retlw   0x06    ;     report count (6)
	retlw   0x75
	retlw   0x08    ;     report size (8)
	retlw   0x15
	retlw   0x00    ;     logical minimum (0)
	retlw   0x25
	retlw   0x65    ;     logical maximum (101)
	retlw   0x05
	retlw   0x07    ;     usage page (keycodes)
	retlw   0x19
	retlw   0x00    ;     usage minimum (0)
	retlw   0x29
	retlw   0x65    ;     usage maximum (101)
	retlw   0x81
	retlw   0x00    ;     input (data, array)	
	retlw   0xC0    ;   end collection
EndReportDescriptor1


langids
	retlw   low lang_1
	retlw   high lang_1
	retlw   low lang_2      ; String indexes of different languages
	retlw   high lang_2

lang_1				; English
	retlw   low  String0    ; LangIDs
	retlw   high String0
	retlw   low  String1_l1    
	retlw   high String1_l1
	retlw   low  String2_l1
	retlw   high String2_l1
	retlw   low  String3_l1
	retlw   high String3_l1
	retlw   low  String4_l1
	retlw   high String4_l1
	retlw   low  String5_l1
	retlw   high String5_l1

lang_2
	retlw   low  String0    ; Also point to LangID
	retlw   high String0
	retlw   low  String1_l2
	retlw   high String1_l2
	retlw   low  String2_l2
	retlw   high String2_l2
	retlw   low  String3_l2
	retlw   high String3_l2
	retlw   low  String4_l2
	retlw   high String4_l2
	retlw   low  String5_l2
	retlw   high String5_l2

; String pointer table
USB_SD_Ptr
Strings
	db	low String0, high String0
	db	low String1_l1, high String1_l1
	db	low String2_l1, high String2_l1
	db	low String3_l1, high String3_l1
	db	low String4_l1, high String4_l1
	db	low String5_l1, high String5_l1

String0
	retlw   (String1_l1-String0)/2	; Length of string 
	retlw   DSC_STR		; Descriptor type 3
	retlw   0x09		; Language ID (as defined by MS 0x0409)
	retlw   0x04
	retlw   0x04		; Some other language ID for testing
	retlw   0x08

String1_l1
	retlw   (String2_l1-String1_l1)/2	; Length of string
	retlw   DSC_STR		; Descriptor type 3
	retlw   'L'
	retlw   0x00
	retlw   'o'
	retlw   0x00
	retlw   'r'
	retlw   0x00
	retlw   'd'
	retlw   0x00
	retlw   ' '
	retlw   0x00
	retlw   'N'
	retlw   0x00
	retlw   'i'
	retlw   0x00
	retlw   'k'
	retlw   0x00
	retlw   'o'
	retlw   0x00
	retlw   'n'
	retlw   0x00
String2_l1
	retlw   (String3_l1-String2_l1)/2
	retlw   DSC_STR
	retlw   'K'
	retlw   0x00
	retlw   'B'
	retlw   0x00
	retlw   'DX'
	retlw   0x00
	retlw   ' '
	retlw   0x00
	retlw   'E'
	retlw   0x00
	retlw   'N'
	retlw   0x00
	retlw   'C'
	retlw   0x00
	retlw   'O'
	retlw   0x00
	retlw   'D'
	retlw   0x00
	retlw   'E'
	retlw   0x00
	retlw   'R'
	retlw   0x00
String3_l1
	retlw   (String4_l1-String3_l1)/2
	retlw   DSC_STR
	retlw   'V'
	retlw   0x00
	retlw   '1'
	retlw   0x00
	retlw   '.'
	retlw   0x00
	retlw   '1'
	retlw   0x00
	retlw   '0'
	retlw   0x00
	retlw	'F'
	retlw	0x00
	retlw	'S'
	retlw	0x00
String4_l1
	retlw   (String5_l1-String4_l1)/2
	retlw   DSC_STR
	retlw   'C'
	retlw   0x00
	retlw   'f'
	retlw   0x00
	retlw	'g'
	retlw   0x00
	retlw	'1'
	retlw   0x00
String5_l1
	retlw   (String6_l1-String5_l1)/2
	retlw   DSC_STR
	retlw   'E'
	retlw   0x00
	retlw   'P'
	retlw   0x00
	retlw   '1'
	retlw   0x00
	retlw   'I'
	retlw   0x00
	retlw   'n'
	retlw   0x00
String6_l1

String1_l2			; Language 2, Chinese. Strings can be totally different than english
	retlw   (String2_l2-String1_l2)/2	; Length of string
	retlw   DSC_STR		; Descriptor type 3
	retlw   'L'
	retlw   0x00
	retlw   'o'
	retlw   0x00
	retlw   'r'
	retlw   0x00
	retlw   'd'
	retlw   0x00
	retlw   ' '
	retlw   0x00
	retlw   'N'
	retlw   0x00
	retlw   'i'
	retlw   0x00
	retlw   'k'
	retlw   0x00
	retlw   'o'
	retlw   0x00
	retlw   'n'
	retlw   0x00
String2_l2
	retlw   (String3_l2-String2_l2)/2
	retlw   DSC_STR
	retlw   'K'
	retlw   0x00
	retlw   'B'
	retlw   0x00
	retlw   'D'
	retlw   0x00
	retlw   ' '
	retlw   0x00
	retlw   'E'
	retlw   0x00
	retlw   'N'
	retlw   0x00
	retlw   'C'
	retlw   0x00
	retlw   'O'
	retlw   0x00
	retlw   'D'
	retlw   0x00
	retlw   'E'
	retlw   0x00
	retlw   'R'
	retlw   0x00
String3_l2
	retlw   (String4_l2-String3_l2)/2
	retlw   DSC_STR
	retlw   'V'
	retlw   0x00
	retlw   '1'
	retlw   0x00
	retlw   '.'
	retlw   0x00
	retlw   '1'
	retlw   0x00
	retlw	'F'
	retlw	0x00
	retlw	'S'
	retlw	0x00
String4_l2
	retlw   (String5_l2-String4_l2)/2
	retlw   DSC_STR
	retlw   'C'
	retlw   0x00
	retlw   'f'
	retlw   0x00
	retlw   'g'
	retlw   0x00
	retlw   '1'
	retlw   0x00
String5_l2
	retlw   (String6_l2-String5_l2)/2
	retlw   DSC_STR
	retlw   'E'
	retlw   0x00
	retlw   'P'
	retlw   0x00
	retlw   '1'
	retlw   0x00
	retlw   'I'
	retlw   0x00
	retlw   'n'
	retlw   0x00
String6_l2
The mcu is a 18F2550.
When trying to compile i get alot of errors and i dont undestand why