$regfile = "m644def.dat" $crystal = 16000000 $baud = 19200 Dim Tmp As Byte Dim I As Byte Dim J As Integer Dim Cmdval1 As Byte Dim Cmdval2 As Byte Dim Cmdval3 As Byte Dim Cmdval4 As Byte Dim Cmdval5 As Byte Dim Cmdval6 As Byte Dim Return_value As Byte Dim Buffer(512) As Byte Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , Rs = Portb.2 Config Lcdbus = 4 Config Portb.5 = Input 'DI Config Portb.7 = Output 'SCK Config Portb.6 = Output 'DO Config Portb.4 = Output 'SS Mega644 Config Portb.0 = Output 'CS SC-Karte Portb.0 = 0 'Karte auf Slave-Mode setzen For I = 1 To 200 nop Next I Config Spi = Hard , Interrupt = Off , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1 Spiinit Declare Sub Sc_write_byte(s As Byte) Declare Function Sc_write_command(t1 As Byte , T2 As Byte , T3 As Byte , T4 As Byte , T5 As Byte , T6 As Byte) As Byte Declare Sub Bufferdump Cls Cursor Off Noblink Locate 1 , 1 Lcd "Initialisierung" Waitms 500 Cls Print " " : Print "Initialisierung" : Print " " Tmp = &HFF For I = 1 To 15 Call Sc_write_byte(tmp) Next I Cmdval1 = &H40 : Cmdval2 = &H00 : Cmdval3 = &H00 : Cmdval4 = &H00 : Cmdval5 = &H00 : Cmdval6 = &H95 Do Return_value = Sc_write_command(cmdval1 , Cmdval2 , Cmdval3 , Cmdval4 , Cmdval5 , Cmdval6) Loop Until Return_value = &H01 Cls Locate 1 , 1 Lcd "CMD0 erfolgreich" Cmdval1 = &H41 : Cmdval2 = &HFF Do Return_value = Sc_write_command(cmdval1 , Cmdval2 , Cmdval3 , Cmdval4 , Cmdval5 , Cmdval6) Loop Until Return_value = &H00 Cls Locate 1 , 1 Lcd "CMD1 erfolgreich" 'Erhöhung der SPI-Geschwindigkeit auf Maximum Config Spi = Hard , Interrupt = Off , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1 Spiinit 'Jetzt einen Block lesen: Cmdval1 = &H51 'Read Block Cmdval2 = &H00 Cmdval3 = &H00 Cmdval4 = &H00 Cmdval5 = &H00 Return_value = Sc_write_command(cmdval1 , Cmdval2 , Cmdval3 , Cmdval4 , Cmdval5 , Cmdval6) If Return_value <> 0 Then Cls Locate 1 , 1 Lcd "Error on CMD17" End End If Do Spiin Tmp , 1 Loop Until Tmp = &HFE For J = 0 To 511 Spiin Buffer(j) , 1 Next J Spiin Tmp , 1 Spiin Tmp , 1 Cls Locate 1 , 1 Lcd "512 Bytes read" Call Bufferdump End Sub Sc_write_byte(s As Byte) Spdr = S Do nop Loop Until Spsr.7 = 1 End Sub Sub Sc_write_command(t1 As Byte , T2 As Byte , T3 As Byte , T4 As Byte , T5 As Byte , T6 As Byte) Tmp = &HFF Portb.0 = 1 Call Sc_write_byte(tmp) Portb.0 = 0 Call Sc_write_byte(t1) Call Sc_write_byte(t2) Call Sc_write_byte(t3) Call Sc_write_byte(t4) Call Sc_write_byte(t5) Call Sc_write_byte(t6) Do Spiin Tmp , 1 Loop Until Tmp <> &HFF Sc_write_command = Tmp End Sub Sub Bufferdump Print " "; For I = 0 To 15 'Kopfzeile Print Hex(i) ; " " ; Next I Print " " I = 16 For J = 0 To 511 If I = 16 Then I = 0 Print " " Print "XX" ; " "; End If Incr I Print Hex(buffer(j)) ; " " ; Next J End Sub