Hi,
Im trying to interface my ps2(playstation2) wireless controller with pic16f688 using picbasic pro 2.46. I copied this code from BS2 and converted it to pbp. Serial communication to my pc for debugging has no problem, but buff(5) is always null. Here is my code.

@ DEVICE PIC16F688, WDT_ON
@ DEVICE PIC16F688, PROTECT_OFF
@ DEVICE PIC16F688, MCLR_OFF

include "modedefs.bas"
DEFINE OSC 8
DEFINE HSER_RCSTA 90h ' enable hardware serial port
DEFINE HSER_TXSTA 24h ' enable high speed transmit

' Set baud rate
DEFINE HSER_BAUD 19200
DEFINE HSER_CLROERR 1

PsxAtt vAR portc.3 ' PSX joystick interface
PsxClk VAR portc.2
PsxCmd VAR portc.1
PsxDat VAR portc.0

LED var PORTA.0

buff VAR Byte[9]
tmpout VAR byte
idx VAR byte
idy VAR BYTE

HIGH LED
pause 1000
Hserout ["Test",13]

GOSUB PS2Init 'Set up Playstation for analog

MAIN:

HIGH LED
GOSUB Get_PSX_Buttons
Hserout ["Byte5=",buff[5],13]
LOW LED
pause 500

goto MAIN

' -----[ Subroutines ]-----------------------------------------------------
Get_PSX_Buttons:
OUTPUT PsxCmd
INPUT PsxDat

HIGH PsxClk
LOW PsxAtt
FOR idy = 0 TO 8
LOOKUP idy,[$01,$42,$00,$00,$00,$00,$00,$00,$00],tmpout
GOSUB BitSend
buff[idy]=tmpout
NEXT
HIGH PsxAtt
RETURN

BitSend:
FOR idx = 0 TO 7
PsxCmd=tmpout.LOWBIT[idx]
tmpout.LOWBIT[idx]=PsxDat
PULSOUT PsxClk,1
NEXT
RETURN

PS2Init:

PAUSE 500 'give controller time to initialize
OUTPUT PsxCmd
INPUT PsxDat
HIGH PsxClk

'[$01,$43,$00,$01,$00,$00,$00,$00,$00]'config mode enter
LOW PsxAtt
FOR idy = 0 TO 8
LOOKUP idy,[$01,$43,$00,$01,$00,$00,$00,$00,$00],tmpout
GOSUB BitSend
NEXT
HIGH PsxAtt
PAUSE 1

'[$01,$44,$00,$00,$03,$00,$00,$00,$00]'set digital mode
'[$01,$44,$00,$01,$03,$00,$00,$00,$00]'set analog
LOW PsxAtt
FOR idy = 0 TO 8
LOOKUP idy,[$01,$44,$00,$01,$03,$00,$00,$00,$00],tmpout
GOSUB BitSend
NEXT
HIGH PsxAtt
PAUSE 1

'[$01,$4F,$00,$FF,$FF,$03,$00,$00,$00]'Set Native Mode
LOW PsxAtt
FOR idy = 0 TO 8
LOOKUP idy,[$01,$4F,$00,$FF,$FF,$03,$00,$00,$00],tmpout
GOSUB BitSend
NEXT
HIGH PsxAtt
PAUSE 1

'[$01,$4D,$00,$00,$01,$ff,$ff,$ff,$ff]'Vibration Enable
LOW PsxAtt
FOR idy = 0 TO 8
LOOKUP idy,[$01,$4D,$00,$00,$01,$FF,$FF,$FF,$FF],tmpout
GOSUB BitSend
NEXT
HIGH PsxAtt
PAUSE 1

'[$01,$43,$00,$00,$5A,$5A,$5A,$5A,$5A]'EXIT DS2 NATIVE
LOW PsxAtt
FOR idy = 0 TO 8
LOOKUP idy,[$01,$43,$00,$00,$5A,$5A,$5A,$5A,$5A],tmpout
GOSUB BitSend
NEXT
HIGH PsxAtt
PAUSE 1

'[$01,$43,$00,$00,$00,$00,$00,$00,$00],'config mode exit
LOW PsxAtt
FOR idy = 0 TO 8
LOOKUP idy,[$01,$43,$00,$00,$00,$00,$00,$00,$00],tmpout
GOSUB BitSend
NEXT
HIGH PsxAtt
PAUSE 1
RETURN