Sodele, also schreiben klappt jetzt ganz hervorragend, ich habe den code erstmal auf das nötigste reduziert. Nachdem ich nun den Prescaler geändert habe, wollte ich das Register CANCTRL auslesen - das klappt irgendwie nicht. Muss ich dann noch irgendwie Nullen senden ? In der Help von SPIIN steht irgendwie so etwas, aber das verstehe ich nun überhaupt nicht. Jedenfalls bleibt die MISO Leitung high. Wenn ich da nochmal um einen Tip bitten dürfte ?

Code:
'*******************************************************************************
'*
'*
'* Projekt: CAN Testboard
'* Zielhardware: CAN Testboard V1.0
'* Stand: 03.03.2008
'*
'* CAN Test10.bas
'*
'*******************************************************************************

'Inspirationsliste
'
'

'**** Deklarationen ************************************************************
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 8                                                'default use 10 for the SW stack
$framesize = 24                                             'default use 40 for the frame space
$regfile = "m8def.dat"                                      'Chipdefinition
$crystal = 16000000                                         'Ext. crystal Osc. Speed 16Mhz
$baud = 2400                                                'Speed COM1

Declare Sub Mcpinit()
Declare Sub Canwrite(byval Reg_add As Byte , Byval Reg_val As Byte)
Declare Sub Canmod(byval Reg_add As Byte , Byval Reg_mask As Byte , Byval Reg_val As Byte)
Declare Function Canread(byval Reg_add As Byte ) As Byte

'**** Portinitialisierung ******************************************************
Portb = &H00                                                'Port B hochohmig schalten
Portc = &H00                                                'Port C hochohmig schalten
Portd = &H00                                                'Port D hochohmig schalten

Config Portb.0 = Output                                     'LED gelb
Led_gelb Alias Portb.0
Led_gelb = 0
Config Portb.1 = Output                                     'LED rot
Led_rot Alias Portb.1
Led_rot = 0
Config Portb.2 = Input                                      '/SS Eingang
Config Portc = Output                                       'Aux
Config Pind.2 = Input                                       'MCP Interrupt MCP2515 /INT
Config Portd.4 = Output                                     'MCP_CS
Mcp_cs Alias Portd.4
Set Mcp_cs                                                  'low aktiv

Config Portd.6 = Input                                      'Taster S1
Portd.6 = 1                                                 'Pullup für S1
S1 Alias Pind.6
Config Portd.7 = Input                                      'Taster S2
Portd.7 = 1                                                 'Pullup für S2
S2 Alias Pind.7

Led_rot = 1                                                 'Resetmerker und Zeit zum ISP Stecker abziehen ;)
Wait 3
Led_rot = 0



'**** Variablen deklarieren ****************************************************
Const Cmd_read = &H03                                       'Read Command
Const Cmd_write = &H02                                      'Write Command
Const Cmd_bitmodify = &H05                                  'Bit-modify Command
Const Cmd_reset = &HC0                                      'Reset Command
Const Canctrl = &H0F                                        'Control Register


Dim Data_tmp As Byte                                        'Temp Datenbyte
Dim Canstatus As Byte                                       'Statuswort

Dim Spi_write_buff(3) As Byte                               'Sendebuffer
Dim Spi_mod_buff(4) As Byte                                 'Modbuffer
Dim Spi_read_buff(2) As Byte                                'empfangsbuffer


'**** Schnittstellen konfigurieren *********************************************

'SPI
Config Portb.3 = Output                                     'MOSI
Config Portb.4 = Input                                      'MISO
Config Portb.5 = Output                                     'SCK
Config Portb.2 = Output                                     '/SS - /CS

Config Spi = Hard , Data Order = Msb , Master = Yes , Noss = 0 , Clockrate = 4
Spiinit

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

Print " "
Print "Neustart !"
Print " "

Print "Call mcpinit..."

Call Mcpinit()

Print "MCP init done!"

Data_tmp = Canread(canctrl)
Print "Canctrl=" ; Bin(data_tmp)

'*******************************************************************************
'* Hauptprogramm                                                               *
'*******************************************************************************
Do

If S1 = 0 Then
   Led_rot = 1
   Waitms 500
   Led_rot = 0
End If

If S2 = 0 Then
   Led_rot = 1
   Waitms 500
   Led_rot = 0
End If


Loop

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

Sub Mcpinit()
   Local Can_tmp As Byte                                    'Lokale Variable

   Print "Reset 2515..."                                    'MCP Resetten
   Can_tmp = Cmd_reset
   Reset Mcp_cs
   Waitus 1
   Spiout Data_tmp , 1
   Waitus 1
   Set Mcp_cs
   Waitus 20                                                   'Warten bis Reset erledigt, evtl. Abfrage MCP einbauen ?
   Print "done!"

   Print "change prescaler..."
   Spi_write_buff(1) = Cmd_write
   Spi_write_buff(2) = Canctrl
   Spi_write_buff(3) = &B00000100                              'Prescaler auf Takt/1
   Reset Mcp_cs
   Waitus 1
   Spiout Spi_write_buff(1) , 3
   Waitus 1
   Set Mcp_cs
   Print "done!"
End Sub

Sub Canwrite(reg_add , Reg_val)                             'Subroutine "schreiben"
   Spi_write_buff(1) = Cmd_write
   Spi_write_buff(2) = Reg_add
   Spi_write_buff(3) = Reg_val
   Spiout Spi_write_buff(1) , 3
End Sub

Sub Canmod(reg_add , Reg_mask , Reg_val)
   Spi_mod_buff(1) = Cmd_bitmodify
   Spi_mod_buff(2) = Reg_add
   Spi_mod_buff(3) = Reg_mask
   Spi_mod_buff(4) = Reg_val
   Spiout Spi_mod_buff(1) , 4
End Sub

Function Canread(reg_add)
   Spi_read_buff(1) = Cmd_read
   Spi_read_buff(2) = Reg_add
   Spiout Spi_read_buff(1) , 2
   Spiin Canread , 1
End Function

End