
' Mikrocontroller "Definitionsdatei"
'------------------------------------
$regfile = "m32def.dat"
'Quarz: 3.6864 MHz
$crystal = 3686400
'------------------------------------



'Variablen deklarieren...
'--------------------------------------------------------
Dim Wert_senden(10) As Byte
Dim Startpunkt As Word
Dim Endpunkt As Word
Dim Auswahl As Byte
Dim Display_on As Bit

'--------------------------------------------------------

'Unterprogramme festlegen...
'--------------------------------------------------------
Declare Sub Play_isd()
Declare Sub Play_isd_from_to()
Declare Sub Playpointer_isd()
Declare Sub Next_track()
Declare Sub Record_isd()
Declare Sub Stop_isd()
Declare Sub Reset_isd()
'ISD Chip aufwecken/schlafen legen...
Declare Sub Power_up()
Declare Sub Power_down()
Declare Sub Isd_funktion()
'--------------------------------------------------------


'Ausgangsport(s) festlegen..
'--------------------------
Ddrb.0 = 1
'--------------------------
'Eingangsports festlegen...
Ddrb.1 = 0
Ddrb.2 = 0
'--------------------------


'-------------------------------------------------------------

 '--- Konfiguration des LCD Displays ---
 Config Lcd = 16 * 2
 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.7 , Rs = Portc.6

'--------------------------------------------------------------


'SPI Schnittstelle konfigurieren / Portb.4 = SS, Portb.5 = MOSI,Portb.6 = MISO, Portb.7 = SCK
'-----------------------------------------------------
Config Spi = Hard , Interrupt = Off , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 128 , Noss = 0


'Initialisierung...
Spiinit


'Pull up Port B.1
Portb.1 = 1
Portb.2 = 1

Auswahl = 1

' Power Up...
'----------------------------
 Wert_senden(1) = 1
 Wert_senden(2) = 0

 Spiout Wert_senden(1) , 2
'----------------------------


Do

  ' Entprellung, logisch 0,  Sprungmarke isd_funktion
Debounce Pinb.1 , 0 , Isd_funktion , Sub


        Select Case Auswahl


         Case 1

           If Display_on = 1 Then


            Cls
            Locate 1 , 1
            Lcd "Play_isd"

            Display_on = 0


           End If

            'Ausführung Unterprogramm...
           '-----------------------------
            If Pinb.2 = 0 Then

            Waitms 100

            Call Play_isd()

            End If
           '-----------------------------



         Case 2

         If Display_on = 1 Then


            Cls
            Locate 1 , 1
            Lcd "ISD Play from to"

            Display_on = 0


           End If

            'Ausführung Unterprogramm...
           '-----------------------------
            If Pinb.2 = 0 Then

            Waitms 100

            Call Play_isd_from_to()

            End If
           '-----------------------------


         Case 3

            If Display_on = 1 Then


            Cls
            Locate 1 , 1
            Lcd "Next_track"

            Display_on = 0


           End If

            'Ausführung Unterprogramm...
           '-----------------------------
            If Pinb.2 = 0 Then

            Waitms 100

            Call Next_track()

            End If
           '-----------------------------



         Case 4

           If Display_on = 1 Then


            Cls
            Locate 1 , 1
            Lcd "Stop_isd"

            Display_on = 0


           End If

            'Ausführung Unterprogramm...
           '-----------------------------
            If Pinb.2 = 0 Then

            Waitms 100

            Call Stop_isd()

            End If
           '-----------------------------

         Case 5

           If Display_on = 1 Then


            Cls
            Locate 1 , 1
            Lcd "Playpointer"

            Display_on = 0


           End If

            'Ausführung Unterprogramm...
           '-----------------------------
            If Pinb.2 = 0 Then

            Waitms 100

            Call Playpointer_isd()

            End If
           '-----------------------------


         Case Else


      End Select


Loop



'Programmende
End


'Unterprogramme...
'-------------------------------------------------------------------------------
'Funktionsauswahl ISD 1760 Sprachchip

Sub Isd_funktion()

Display_on = 1

Auswahl = Auswahl + 1

If Auswahl = 6 Then Auswahl = 1

End Sub
'--------------------------------------------------------------------------

'--------------------------------------------------------------------------
'ISD Play

 Sub Play_isd()

'2 Bytes, Kommando 0x40

 Wert_senden(1) = &H40
 Wert_senden(2) = 0

 'LED ein...
 Portb.0 = 1

 'MOSI- Sequenz
 Spiout Wert_senden(1) , 2

 'MISO- Sequenz Antwort
 Spiin Wert_senden(1) , 2

 'LED aus...
 Portb.0 = 0

    If Wert_senden(1).0 = 0 Then

     Locate 2 , 1
     Lcd "ok"

     Else

     Locate 2 , 1
     Lcd "fail"

    End If

  End Sub
'--------------------------------------------------------------------------

'--------------------------------------------------------------------------
'ISD read Playpointer

 Sub Playpointer_isd()

'4 Bytes, Kommando 0x06

 Wert_senden(1) = 6
 Wert_senden(2) = 0
 Wert_senden(3) = 0
 Wert_senden(4) = 0

 'LED ein...
 Portb.0 = 1

 'MOSI- Sequenz
 Spiout Wert_senden(1) , 4

 'MISO- Sequenz Antwort
 Spiin Wert_senden(1) , 4

 'LED aus...
 Portb.0 = 0

    If Wert_senden(1).0 = 0 Then

     Locate 2 , 1
     Lcd "Playpt" ; Hex(wert_senden(4)) ; Hex(wert_senden(3))

     Else

     Locate 2 , 1
     Lcd "fail"

    End If

  End Sub
'--------------------------------------------------------------------------

'--------------------------------------------------------------------------
'ISD Play from to

 Sub Play_isd_from_to()

'7 Bytes, Kommando 0x80

Startpunkt = 16
Endpunkt = 50

'Befehl Play from to senden...
  Wert_senden(1) = &H80
  Wert_senden(2) = 0
  'Startpunkt...
  Wert_senden(3) = Low(startpunkt)
  Wert_senden(4) = High(startpunkt)
  'Endpunkt...
  Wert_senden(5) = Low(endpunkt)
  Wert_senden(6) = High(endpunkt)

  Wert_senden(7) = 0

 'LED ein...
 Portb.0 = 1

 'MOSI- Sequenz
 Spiout Wert_senden(1) , 7
 'letztes empfangenes Byte
 Wert_senden(1) = Spdr

 'LED aus...
 Portb.0 = 0

    If Wert_senden(1).0 = 0 Then

     Locate 2 , 1
     Lcd "ok"

     Else

     Locate 2 , 1
     Lcd "fail"

    End If

  End Sub
'--------------------------------------------------------------------------

'--------------------------------------------------------------------------
'ISD Record

 Sub Record_isd()

'2 Bytes, Kommando 0x41

 Wert_senden(1) = &H41
 Wert_senden(2) = 0

 'LED ein...
 Portb.0 = 1

 'MOSI- Sequenz
 Spiout Wert_senden(1) , 2

 'MISO- Sequenz Antwort
 Spiin Wert_senden(1) , 2

 'LED aus...
 Portb.0 = 0

    If Wert_senden(1).0 = 0 Then

     Locate 2 , 1
     Lcd "ok"

     Else

     Locate 2 , 1
     Lcd "fail"

    End If

  End Sub
'--------------------------------------------------------------------------

'--------------------------------------------------------------------------
'ISD Next_Track

 Sub Next_track()

'2 Bytes, Kommando 0x48

 Wert_senden(1) = &H48
 Wert_senden(2) = 0

 'LED ein...
 Portb.0 = 1

 'MOSI- Sequenz
 Spiout Wert_senden(1) , 2
 'letztes empfangenes Byte
 Wert_senden(1) = Spdr

 'LED aus...
 Portb.0 = 0

    If Wert_senden(1).0 = 0 Then

     Locate 2 , 1
     Lcd "ok"

     Else

     Locate 2 , 1
     Lcd "fail"

    End If

  End Sub
'--------------------------------------------------------------------------

'--------------------------------------------------------------------------
'ISD Stop

 Sub Stop_isd()

'2 Bytes, Kommando 0x02

 Wert_senden(1) = 2
 Wert_senden(2) = 0

 'LED ein...
 Portb.0 = 1

 'MOSI- Sequenz
 Spiout Wert_senden(1) , 2
 'letztes empfangenes Byte
 Wert_senden(1) = Spdr

 'LED aus...
 Portb.0 = 0

    If Wert_senden(1).0 = 0 Then

     Locate 2 , 1
     Lcd "ok"

     Else

     Locate 2 , 1
     Lcd "fail"

    End If

  End Sub
'--------------------------------------------------------------------------

'--------------------------------------------------------------------------
'ISD Power up

 Sub Power_up()

 '2 Bytes, Kommando 0x01
 Wert_senden(1) = 1
 Wert_senden(2) = 0

 Spiout Wert_senden(1) , 2


 End Sub


'--------------------------------------------------------------------------
'ISD Power down

 Sub Power_down()

'2 Bytes, Kommando 0x07
 Wert_senden(1) = 7
 Wert_senden(2) = 0

 Spiout Wert_senden(1) , 2


 End Sub

'--------------------------------------------------------------------------

'--------------------------------------------------------------------------
'ISD Reset

 Sub Reset_isd()

'2 Bytes, Kommando 0x03
 Wert_senden(1) = 3
 Wert_senden(2) = 0

 Spiout Wert_senden(1) , 2


 End Sub

'--------------------------------------------------------------------------