$regfile = "8535def.dat"

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1
Config Timer0 = Timer , Prescale = 1024                     ' DEVIDES CLOCK BY 1024
Config Portb = Output
Config Porta = Input
Config Portd = Output

Fifoadr0 Alias Portd.0
Fifoadr1 Alias Portd.1
Fifo_full Alias Pind.2
Fifo_empty Alias Pind.3
Sloe Alias Portd.4
Slrd Alias Portd.5
Slwr Alias Portd.6
Pktend Alias Portd.7
Fifodata Alias Porta
Enable_control_buffer Alias Portb.2
Control_buffer_direction Alias Portb.3
Enable_data_buffer Alias Portc.2
Data_direction Alias Portc.3
Controlport Alias Portd

Declare Sub Initialpinset()
Declare Function Readdata(byval Epname As String) As Byte
Declare Sub Writedata(byval Epname As String , Byval Data2write As Byte)

Call Initialpinset()
Dim A As Byte
Config Lcd = 16 * 2                                         'configure lcd screen
Cls                                                         'clear the LCD display
Lcd "Starting..."                                           'display this at the top line
Waitms 300
Home

Enable Interrupts
Enable Timer0
Enable Ovf0
On Ovf0 Blink_led
Dim C As Byte
C = 0
Do
  Home
  Lcd "Reading data "
  Select Case C
  Case 0 :
      Lcd "|"
      C = 1

  Case 1 :
      Lcd "/"
      C = 2

  Case Else :
      Lcd "-"
      C = 0

  End Select

  Dim Dt As Byte
  Dt = Readdata( "ep2")
  Lowerline
  Lcd "Data = "
  Lcd Dt
  Lcd "      "
  Waitms 300


Loop

Blink_led:
   Toggle Portb.0

Return



End                                                         'end program
Sub Initialpinset()
   Config Controlport = Output
   Reset Fifoadr0
   Reset Fifoadr1                                           ' select ep2
   Config Pinb.2 = Output
   Config Pinb.3 = Output

   Reset Enable_control_buffer                              ' enable control buffer
   Reset Control_buffer_direction                           ' set control buffer direction B to A
   Set Enable_data_buffer                                   ' disable data buffer
   Set Data_direction                                       ' set data buffer direction A to B
   Set Sloe                                                 ' deasert SLOE
   Set Slrd                                                 ' DeAsert SLRD
   Set Slwr                                                 ' DeAsert SLWR
   Set Pktend                                               ' DeAsert PKTEND
End Sub

Function Readdata(epname As String ) As Byte
   Config Controlport = Output
   Config Pinb.2 = Output
   Config Pinb.3 = Output

   Select Case Epname
      Case "ep2" :
         Reset Fifoadr0
         Reset Fifoadr1                                     ' select ep2

      Case "ep4":
         Set Fifoadr0
         Reset Fifoadr1                                     ' select ep4

      Case "ep6":
         Reset Fifoadr0
         Set Fifoadr1                                       ' select ep6

      Case "ep8":
         Set Fifoadr0
         Set Fifoadr1                                       ' select ep8

       End Select

   Reset Enable_data_buffer                                 ' enable data buffer
   Reset Data_direction                                     ' set data buffer direction A to B

   Reset Enable_control_buffer                              ' enable control buffer
   Reset Sloe                                               'assert sloe
   Config Controlport = Input
   If Fifo_empty = 1 Then
      Config Controlport = Output
      Readdata = Pina                                       ' sample data
      Reset Slrd                                            ' assert slrd
      Set Slrd                                              ' DeAssert SLRD
   Else
      Readdata = 0
   End If
End Function

Sub Writedata(byval Epname As String , Byval Data2write As Byte)

   Config Controlport = Output
   Config Pinb.2 = Output
   Config Pinb.3 = Output
   Select Case Epname
      Case "ep2" :
         Reset Fifoadr0
         Reset Fifoadr1                                     ' select ep2

      Case "ep4":
         Set Fifoadr0
         Reset Fifoadr1                                     ' select ep4

      Case "ep6":
         Reset Fifoadr0
         Set Fifoadr1                                       ' select ep6

      Case "ep8":
         Set Fifoadr0
         Set Fifoadr1                                       ' select ep8

   End Select


   Reset Enable_data_buffer                                 ' enable data buffer
   Set Data_direction                                       ' set data buffer direction A to B

   Reset Enable_control_buffer                              ' enable control buffer

   Config Controlport = Input
   If Fifo_full = 1 Then
      Config Controlport = Output
      Config Porta = Output
      Porta = Data2write
      Set Slwr
      Reset Slwr
      Set Slwr
      


   End If

End Sub