Falls Feitzi noch mitliest: Deine Leseroutine kannst Du vielleicht etwas optimieren, so wie hier:

Code:
      Dlc0 = Canread(rxb0dlc)
      Print "RxB0DLC=" ; Bin(canread(rxb0dlc))
      Print "RxB0CTRL=" ; Bin(canread(rxb0ctrl))
      Spi_read_buff(1) = Cmd_read
      Spi_read_buff(2) = Rxb0d0
      Reset Mcp_cs
      Waitus 1
      Spiout Spi_read_buff(1) , 2
      Spiin Can_rxd_data(1) , Dlc0
      Waitus 1
      Set Mcp_cs
      For N = 1 To Dlc0
         M = N - 1
         Print "0D" ; M ; "=" ; Can_rxd_data(n) ; "-"
      Next N
      Canmod Canintf , &B00000001 , &B00000000
      Canmod Eflg , &B01000000 , &B00000000
natürlich noch ohne Fehlerauswertung, aber deutlich übersichtlicher. Diese Routine liest so lange Register aus, wie der DLC lang ist und legt sie automatisch in einem maximal 8 Byte langen Array ab. Braucht deutlich weniger Hilfsvariablen (eine nur zur Anzeige) und eine deutlich kleinere Schleife - und diese auch nur zum Anzeigen.