ich bin selbst noch am zweifeln ob es daran liegen kann!

Ich habe jetzt so viel an dem Programm rumgebastelt dass es selbst ohne LCD nicht mehr läuft.
Bisher starte die Initialisierung wenigstens, jetzt hängt selbst sie sich auf und ich muss die Spannung kompl. wegnehmen.

Ich habe meinen Code jetzt mal auf das wesentliche gekürzt.
Hat jemand ne Idee wo hier der Fehler steckt?

Code:
$regfile = "m32def.dat"
$crystal = 7372800
$baud = 9600


$hwstack = 32
$swstack = 8
$framesize = 24


Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Noss = 1 , Clockrate = 16
Spiinit



 Dim Mcphilf As Byte

 Dim Id As Integer
 Dim Idh As Byte
 Dim Idl As Byte
 Dim Dfl As Byte
 Dim Idi As Byte
 Dim Canin As Byte
 Dim Db0(8) As Byte
 Dim Canstat As Byte

 Dim T As Integer
 Dim L As Byte

 Dim Verify As Byte
 Verify = 10

 Dim Hilf1 As Word
 Dim Hilf2 As Word
 Dim Absender As Byte


 Const Spi_reset = &HC0
 Const Spi_write = &H02
 Const Spi_read = &H03
 Const Spi_rts0 = &H81
 Const Spi_rts1 = &H82
 Const Spi_rts2 = &H84
 Const Spi_read_status = &HA0
 Const Spi_bit_modify = &H05

 Const Rxb0ctrl = &H60
 Const Rxb1ctrl = &H70

 Const Rxm0sidh = &H20
 Const Rxm0sidl = &H21
 Const Rxm1sidh = &H24
 Const Rxm1sidl = &H25

 Const Rxf0sidh = &H00
 Const Rxf0sidl = &H01
 Const Rxf1sidh = &H04
 Const Rxf1sidl = &H05


 Const Bfpctrl = &H0C
 Const Txrtsctrl = &H0D
 Const Canctrl = &H0F

 Const Txb0ctrl = &H30                                      ' Transmit Buffer 0 Control Register
 Const Txb0sidh = &H31                                      ' Transmit Buffer 0 Std Identifier High
 Const Txb0sidl = &H32                                      ' Transmit Buffer 0 Std Identifier Low
 Const Txb0dlc = &H35                                       ' Transmit Buffer 0 Data Length Code
 Const Txb0d0 = &H36                                        ' Transmit Buffer 0 Data Byte 0
 Const Txb0d1 = &H37                                        ' Transmit Buffer 0 Data Byte 1
 Const Txb0d2 = &H38                                        ' Transmit Buffer 0 Data Byte 2
 Const Txb0d3 = &H39                                        ' Transmit Buffer 0 Data Byte 3
 Const Txb0d4 = &H3A                                        ' Transmit Buffer 0 Data Byte 4
 Const Txb0d5 = &H3B                                        ' Transmit Buffer 0 Data Byte 5
 Const Txb0d6 = &H3C                                        ' Transmit Buffer 0 Data Byte 6
 Const Txb0d7 = &H3D                                        ' Transmit Buffer 0 Data Byte 7

 Const Txb1ctrl = &H40                                      ' Transmit Buffer 1 Control Register
 Const Txb1sidh = &H41                                      ' Transmit Buffer 1 Std Identifier High
 Const Txb1sidl = &H42                                      ' Transmit Buffer 1 Std Identifier Low
 Const Txb1dlc = &H45                                       ' Transmit Buffer 1 Data Length Code
 Const Txb1d0 = &H46                                        ' Transmit Buffer 1 Data Byte 0
 Const Txb1d1 = &H47                                        ' Transmit Buffer 1 Data Byte 1
 Const Txb1d2 = &H48                                        ' Transmit Buffer 1 Data Byte 2
 Const Txb1d3 = &H49                                        ' Transmit Buffer 1 Data Byte 3
 Const Txb1d4 = &H4A                                        ' Transmit Buffer 1 Data Byte 4
 Const Txb1d5 = &H4B                                        ' Transmit Buffer 1 Data Byte 5
 Const Txb1d6 = &H4C                                        ' Transmit Buffer 1 Data Byte 6
 Const Txb1d7 = &H4D                                        ' Transmit Buffer 1 Data Byte 7

 Const Txb2ctrl = &H50                                      ' Transmit Buffer 2 Control Register
 Const Txb2sidh = &H51                                      ' Transmit Buffer 2 Std Identifier High
 Const Txb2sidl = &H52                                      ' Transmit Buffer 2 Std Identifier Low
 Const Txb2dlc = &H55                                       ' Transmit Buffer 2 Data Length Code
 Const Txb2d0 = &H56                                        ' Transmit Buffer 2 Data Byte 0
 Const Txb2d1 = &H57                                        ' Transmit Buffer 2 Data Byte 1
 Const Txb2d2 = &H58                                        ' Transmit Buffer 2 Data Byte 2
 Const Txb2d3 = &H59                                        ' Transmit Buffer 2 Data Byte 3
 Const Txb2d4 = &H5A                                        ' Transmit Buffer 2 Data Byte 4
 Const Txb2d5 = &H5B                                        ' Transmit Buffer 2 Data Byte 5
 Const Txb2d6 = &H5C                                        ' Transmit Buffer 2 Data Byte 6
 Const Txb2d7 = &H5D                                        ' Transmit Buffer 2 Data Byte 7

 Const Rxb0sidh = &H61
 Const Rxb0sidl = &H62
 Const Rxb0dlc = &H65
 Const Rxb1sidh = &H71
 Const Rxb1sidl = &H72
 Const Rxb1dlc = &H75


 Const Cnf1 = &H2A
 Const Cnf2 = &H29
 Const Cnf3 = &H28
 Const Caninte = &H2B
 Const Canintf = &H2C


 Declare Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
 Declare Sub Mcp2515_read_register(byval Adress As Byte )
 Declare Sub Mcp2515_bitmodify(byval Reg_add As Byte , Byval Reg_mask As Byte , Byval Reg_val As Byte)



 Config Pind.3 = Input
 Mcpint Alias Pind.3                                        ' Mcpint Alias Pind.3
 Css Alias Portd.4
 Config Css = Output


 Set Css
 Wait 1

 Absender = 106
 Id = 105


 Gosub Mcp2515_init
 Print "init o.k."

 Idi = 10



'Aktivmeldung an CAN Bus

 Gosub Status
 Gosub Senden


Do

   If Mcpint = 0 Then Gosub Mcpempfang


Loop


'*****************************************************************************************
'********* $include "Can_config_V1_beschriftet.bas" **************************************
'*****************************************************************************************

Status:

Print "Status: Senden - " ; Mcpint

If Mcpint = 1 Then



     Gosub Senden


     Else

     Print "MCP Pin=0"

     End If



  Mcp2515_read_register Canintf                             'Spi_rx_status

  Canstat = Canin

  Print "CANINTF: " ; Canstat


  Mcp2515_bitmodify Canctrl , &B11101000 , &B00001000



 Waitms 500
 Return


Senden:

 Print "Senden: Mcp2515_read_register Txb0ctrl  "
 Mcp2515_read_register Txb0ctrl                             '&HA0
 Print "Senden: Mcp2515_read_register Txb0ctrl o.k. "

 'ID auf SIDL und SIDH "verteilen"

 Hilf1 = Id / 8
 Idh = Hilf1
 Hilf1 = Idh * 8
 Hilf1 = Id - Hilf1
 Hilf1 = Hilf1 * 32
 Idl = Hilf1

Print Id

Print "SPI_read_Status0: " ; Canin
 If Canin.3 = 0 Then Gosub Send_buffer0
 Mcp2515_read_register Txb1ctrl                             '&HA0
Print "SPI_read_Status1: " ; Canin



Print "Senden-Ende"

Return

'********senden mit Buffer 0****************************************

Send_buffer0:

Print "Send_buffer0:"
'Priorität einstellen
  Mcp2515_bitmodify Txb0ctrl , &B00000011 , &B00000011


  'Standard ID einstellen
  Mcp2515_write_register Txb0sidh , Idh                     ' Absenderadresse setzen
  Mcp2515_write_register Txb0sidl , Idl                     ' Absenderadresse setzen
  'Nachrichtenlänge einstellen (DFL)
  Mcp2515_write_register Txb0dlc , Dfl
   'Daten
  Mcp2515_write_register Txb0d0 , Db0(1)
  Mcp2515_write_register Txb0d1 , Db0(2)
  Mcp2515_write_register Txb0d2 , Db0(3)
  Mcp2515_write_register Txb0d3 , Db0(4)
  Mcp2515_write_register Txb0d4 , Db0(5)
  Mcp2515_write_register Txb0d5 , Db0(6)
  Mcp2515_write_register Txb0d6 , Db0(7)
  Mcp2515_write_register Txb0d7 , Db0(8)
  'nachricht versenden
  Reset Css
   Waitus 10
   Mcphilf = Spi_rts0
   Spdr = Mcphilf
   Do
   Loop Until Spsr.spif = 1
   Waitus 10
 Set Css
 Print "gesendet Buffer-0"
 Waitms 50
  Return

'********senden mit Buffer 1****************************************
  Send_buffer1:

  Mcp2515_bitmodify Txb1ctrl , &B00000011 , &B00000011


  'Standard ID einstellen
  Mcp2515_write_register Txb1sidh , Idh
  Mcp2515_write_register Txb1sidl , Idl
  'Nachrichtenlänge einstellen (DFL)
  Mcp2515_write_register Txb1dlc , Dfl
   'Daten
  Mcp2515_write_register Txb1d0 , Db0(1)
  Mcp2515_write_register Txb1d1 , Db0(2)
  Mcp2515_write_register Txb1d2 , Db0(3)
  Mcp2515_write_register Txb1d3 , Db0(4)
  Mcp2515_write_register Txb1d4 , Db0(5)
  Mcp2515_write_register Txb1d5 , Db0(6)
  Mcp2515_write_register Txb1d6 , Db0(7)
  Mcp2515_write_register Txb1d7 , Db0(8)
  'nachricht versenden
  Reset Css
   Waitus 10
   Mcphilf = Spi_rts1
   Spdr = Mcphilf
   Do
   Loop Until Spsr.spif = 1
   Waitus 10
 Set Css
 Waitms 50
  Return



Send_buffer2:

Return


'********MCP2515 Initialisieren****************************************

 Mcp2515_init:

  'ID auf SIDL und SIDH "verteilen"


 Hilf1 = Id / 8
 Idh = Hilf1
 Hilf1 = Idh * 8
 Hilf1 = Id - Hilf1
 Hilf1 = Hilf1 * 32
 Idl = Hilf1



 'MCP2515 per Software Reset zurücksetzen
 Mcphilf = Spi_reset
 Print "Mcphilf = Spi_reset    "
 Reset Css
 Print "Reset CSS"
   Waitus 10
   Spdr = Mcphilf
   Do
   Loop Until Spsr.spif = 1
   Waitus 10
 Set Css
 Print "Set Css1"
 'einstellen des Bit Timings
 'CNF1 &H07==>125 kbit/s    &H13==>50 kbit/s

 Mcp2515_write_register Cnf1 , &H13
 Mcp2515_write_register Cnf2 , &H90
 Mcp2515_write_register Cnf3 , &H02

 Print "Timing o.k."

'Interrupt einstellen
 Mcp2515_write_register Caninte , &B00000011


'Einstellen der Filter
 Mcp2515_write_register Rxb0ctrl , &B01100000

'Buffer 1: Empfang aller Nachrichten
 Mcp2515_write_register Rxb1ctrl , &B01100000
'                                     **



'****************************************************************************
'******************       Filter  und Maske einstellen   ********************
'****************************************************************************

'Maske setzen       - alle Bits auf "1" führen zu einem eindeutigen Filtern einer ID
 Mcp2515_write_register Rxm0sidh , &B00111111               '
 Mcp2515_write_register Rxm0sidl , &B11100000               '
 Mcp2515_write_register Rxm1sidh , &B00111111               '
 Mcp2515_write_register Rxm1sidl , &B11100000               '

'Filter setzen         "25"
 Mcp2515_write_register Rxf0sidh , &B00000011
 Mcp2515_write_register Rxf0sidl , &B00100000
 Mcp2515_write_register Rxf1sidh , &B00000011
 Mcp2515_write_register Rxf1sidl , &B00100000

'****************************************************************************
'****************************************************************************
'****************************************************************************



'Einstellen der Pin Funktionen
'Deaktivieren der Pins RXnBF Pins (High Impedance State)
 Mcp2515_write_register Bfpctrl , 0

'TXnRTS Bits als Input schalten
 Mcp2515_write_register Txrtsctrl , 0


'Device zurück in den normalen Modus versetzen
 Mcp2515_bitmodify Canctrl , &B11100000 , &B00000000

'  Bit 7 Unimplemented: Lesen als'0 '
'  Bit 6 ABTF: Nachricht Aborted Flag Bit -
'              1 = Nachricht wurde abgebrochen
'              0 = Nachricht erfolgreich abgeschlossene Übertragung
'  Bit 5 MLOA: Nachricht Lost Arbitration Bit -
'              1 = Nachricht verloren, Schiedsverfahren gleichzeitig gesendet
'              0 = Nachricht nicht verloren, während Schiedsverfahren gesendet
'  Bit 4 TXERR: Übermittlung Bit-Fehler erkannt
'              1 = Ein Bus-Fehler ist aufgetreten, während die Nachricht übermittelt wurde,
'              0 = es ist keine Bus-Fehler aufgetreten, während die Nachricht übermittelt wurde,
'  Bit 3 TXREQ: Nachricht Transmit Request-Bit -
'              1 = Buffer ist derzeit zur Übertragung anhängig
'              (MCU setzt dieses Bit auf Anfrage Nachricht übertragen werden - Bit wird automatisch gelöscht, wenn
'               Wird die Nachricht gesendet)
'              0 = Buffer ist derzeit nicht zur Übertragung anhängig
'              (MCU kann dieses Bit klar um eine Nachricht abbrechen)
'               Unimplemented
'  Bit 2:      Lesen als'0 '
'  Bit 1-0 TXP: Sendepuffer Priority
'               11 = Höchste Priorität
'               10 = High Intermediate Priority
'               11 = Low Intermediate Priority
'               00 = Tiefste Message Priority


  Mcp2515_read_register Caninte
 Print "CANINTE: " ; Canin
  Mcp2515_read_register Canintf
 Print "CANINTF: " ; Canintf
  Mcp2515_read_register Canstat
 Print "Canstat: " ; Canstat
  Mcp2515_read_register Canctrl
 Print "CANCTRL: " ; Canctrl
  Mcp2515_read_register Cnf1
 Print "CNF1: " ; Cnf1
  Mcp2515_read_register Cnf2
 Print "CNF2: " ; Cnf2
  Mcp2515_read_register Cnf3
 Print "CNF3: " ; Cnf3
  Mcp2515_read_register Txb0ctrl
 Print "TXB0CTRL: " ; Txb0ctrl
  Mcp2515_read_register Txb1ctrl
 Print "TXB1CTRL: " ; Txb1ctrl
'  Mcp2515_read_register Txb2ctrl
' Print "TXB2CTRL: " ; Txb2ctrl
  Mcp2515_read_register Rxb0ctrl
 Print "RXB0CTRL: " ; Rxb0ctrl
  Mcp2515_read_register Rxb1ctrl
 Print "RXB1CTRL: " ; Rxb1ctrl
  Mcp2515_read_register Bfpctrl
 Print "BFPCTRL: " ; Bfpctrl
  Mcp2515_read_register Txrtsctrl
 Print "TXRTSCTRL: " ; Txrtsctrl




 Return


'********MCP2515  schreiben****************************************

 Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
 'Print "Reg: " ; Adress ; " Val: " ; Daten
 Mcphilf = Spi_write
 Reset Css
 Spdr = Mcphilf
 Do
 Loop Until Spsr.spif = 1
 Waitms 2
 Spdr = Adress
 Do
 Loop Until Spsr.spif = 1
 Spdr = Daten
 Do
 Loop Until Spsr.spif = 1
 Set Css
 End Sub



'********MCP2515  lesen****************************************

 Sub Mcp2515_read_register(byval Adress As Byte )
 Mcphilf = Spi_read
 Reset Css
 Spdr = Mcphilf
 Do
 Loop Until Spsr.spif = 1
 Waitms 2
 Spdr = Adress
 Do
 Loop Until Spsr.spif = 1
 Spdr = 0
   Do
   Loop Until Spsr.spif = 1
   Canin = Spdr
 Set Css
 End Sub



'********MCP2515  bitmodify****************************************

Sub Mcp2515_bitmodify(reg_add , Reg_mask , Reg_val)
   'Local Can_tmp2 As Byte
   Reset Css
   Mcphilf = Spi_bit_modify
   Spdr = Mcphilf                                           'Can_tmp2
   Do
   Loop Until Spsr.spif = 1
   Waitms 2
   Spdr = Reg_add
   Do
   Loop Until Spsr.spif = 1
   Spdr = Reg_mask
   Do
   Loop Until Spsr.spif = 1
   Spdr = Reg_val
   Do
   Loop Until Spsr.spif = 1
   Set Css
End Sub



'******** Datenempfang ********************************************

 Mcpempfang:
 Print "Empfangen"
 Mcp2515_read_register Canintf                              'Spi_rx_status
 Canstat = Canin
 Print "CANINTF: " ; Canstat
 If Canstat.0 = 1 Then Gosub Mcp_read_buffer0
 If Canstat.1 = 1 Then Gosub Mcp_read_buffer1
 Return

 '--------   lesen vom Buffer 0
 Mcp_read_buffer0:
 Print "Mcp_read_buffer0:"
 Mcp2515_read_register Rxb0sidh
 Idh = Canin
 Mcp2515_read_register Rxb0sidl
 Idl = Canin
 Mcp2515_read_register Rxb0dlc

 Dfl = Canin
  Id = Idh * 8
  Hilf1 = Idl / 32
  Id = Id + Hilf1

 'Print "ID-0=" ; Id ; "  DFL-0=" ; Dfl
 'Daten
 For L = 1 To 8
 If L = 1 Then Mcp2515_read_register &H66
 If L = 2 Then Mcp2515_read_register &H67
 If L = 3 Then Mcp2515_read_register &H68
 If L = 4 Then Mcp2515_read_register &H69
 If L = 5 Then Mcp2515_read_register &H6A
 If L = 6 Then Mcp2515_read_register &H6B
 If L = 7 Then Mcp2515_read_register &H6C
 If L = 8 Then Mcp2515_read_register &H6D
 Db0(l) = Canin
 Next L
 Mcp2515_bitmodify Canintf , &B00000001 , &B00000000
 Print "Daten Buffer-0:" ; Db0(1) ; "-" ; Db0(2) ; "-" ; Db0(3) ; "-" ; Db0(4) ; "-" ; Db0(5) ; "-" ; Db0(6) ; "-" ; Db0(7) ; "-" ; Db0(8)

  Gosub Auswertung

 Return

'--------   lesen vom Buffer 1   ---------- falls erforderlich
 Mcp_read_buffer1:
 Print "Mcp_read_buffer1:"
 Mcp2515_read_register Rxb1sidh
 Idh = Canin
 Mcp2515_read_register Rxb1sidl
 Idl = Canin
 Mcp2515_read_register Rxb1dlc
 Dfl = Canin
  Id = Idh * 8 : Hilf1 = Idl / 32 : Id = Id + Hilf1
'  Print "ID-1=" ; Id ; "  DFL-1=" ; Dfl
'Daten
 For L = 1 To 8
 If L = 1 Then Mcp2515_read_register &H76
 If L = 2 Then Mcp2515_read_register &H77
 If L = 3 Then Mcp2515_read_register &H78
 If L = 4 Then Mcp2515_read_register &H79
 If L = 5 Then Mcp2515_read_register &H7A
 If L = 6 Then Mcp2515_read_register &H7B
 If L = 7 Then Mcp2515_read_register &H7C
 If L = 8 Then Mcp2515_read_register &H7D
 Db0(l) = Canin
 Next L
 Mcp2515_bitmodify Canintf , &B00000010 , &B00000000
 Print "Daten Buffer-1:" ; Db0(1) ; "-" ; Db0(2) ; "-" ; Db0(3) ; "-" ; Db0(4) ; "-" ; Db0(5) ; "-" ; Db0(6) ; "-" ; Db0(7) ; "-" ; Db0(8)
 Return








'*****************************************************************************************
'*****************************************************************************************
'*********** Auswertung *****************************************
Auswertung:
  Print "Auswerten Daten Buffer-1:" ; Db0(1) ; "-" ; Db0(2) ; "-" ; Db0(3) ; "-" ; Db0(4) ; "-" ; Db0(5) ; "-" ; Db0(6) ; "-" ; Db0(7) ; "-" ; Db0(8)

   If Db0(2) = 140 Then

   Select Case Db0(1)
   Case 101 To 105 : Gosub Schreiben                        'In Knoten schreiben
   Case 150 To 155 : Gosub Lesen                            'aus Knoten lesen
   Case 201 To 208 : Gosub Befehl                           'in Knoten ausführen

   End Select

   Else
      If Db0(2) = 255 Then Gosub Status                     'kann zu Problemen führen wenn alle Knoten gleichzeitig ihren Status senden!!!!!


   End If

   Return


'*********** neue Zeit programmieren *****************************************

Schreiben:                                                  'In Knoten schreiben



Return

'***********    Lesen ausführen    ********************************************

Lesen:                                                      'aus Knoten lesen



Return


'*********** Lesebefehl ausführen ********************************************

Befehl:                                                     'in Knoten ausführen




   Print "Befehl Daten Buffer-1:" ; Db0(1) ; "-" ; Db0(2) ; "-" ; Db0(3) ; "-" ; Db0(4) ; "-" ; Db0(5) ; "-" ; Db0(6) ; "-" ; Db0(7) ; "-" ; Db0(8)
  Return