Code:
$regfile = "m16def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 8000000
$baud = 19200
Declare Sub Mc_init()
Declare Sub Mc_write()
Declare Sub Mc_read()
Dim Dout As Byte
Dim Din As Byte
Dim A As Word
Dim Cmd(6) As Byte
Dim Buffer(515) As Byte
Dim Tmp As Long
Dim Sector As Long
Mcs Alias Portb.4
Mosi Alias Portb.5
Miso Alias Pinb.6
Sck Alias Portb.7
Config Pinb.4 = Output
Config Pinb.5 = Output
Config Pinb.6 = Input
Config Pinb.7 = Output
Waitms 255
Buffer(1) = &HFE
Buffer(514) = &HFF
Buffer(515) = &HFF
For A = 2 To 513
Buffer(a) = 14
Next
Call Mc_init()
Sector = 0
Call Mc_write()
For A = 2 To 513
Buffer(a) = 15
Next
Call Mc_init()
Sector = 1
Call Mc_write()
For A = 2 To 513
Buffer(a) = 16
Next
Call Mc_init()
Sector = 2
Call Mc_write()
Print
Print
Wait 1
' auslesen
Wait 1
Call Mc_init()
Sector = 0
Call Mc_read()
For A = 2 To 30
Print "wert: " ; Buffer(a)
Waitms 50
Next
'auslesen
Wait 1
Call Mc_init()
Sector = 1
Call Mc_read()
For A = 2 To 30
Print "wert: " ; Buffer(a)
Waitms 50
Next
'auslesen
Wait 1
Call Mc_init()
Sector = 2
Call Mc_read()
For A = 2 To 30
Print "wert: " ; Buffer(a)
Waitms 50
Next
End
Sub Mc_init()
Set Mcs
Dout = &HFF
For A = 0 To 10
Shiftout Mosi , Sck , Dout , 1 , 8 , 0
Next
Anfang:
Reset Mcs
Cmd(1) = &H40
Cmd(2) = 0
Cmd(3) = 0
Cmd(4) = 0
Cmd(5) = 0
Cmd(6) = &H95
For A = 1 To 6
Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 0
Next
Dout = &HFF
Shiftout Mosi , Sck , Dout , 1 , 8 , 0
Shiftin Miso , Sck , Din , 1 , 8 , 0
If Din <> 1 Then
Goto Anfang
End If
Print "idle-modus " ; Din
Anfang1:
Reset Mcs
Cmd(1) = &H41
Cmd(2) = 0
Cmd(3) = 0
Cmd(4) = 0
Cmd(5) = 0
Cmd(6) = &HFF
For A = 1 To 6
Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 0
Next
Dout = &HFF
Shiftout Mosi , Sck , Dout , 1 , 8 , 0
Shiftin Miso , Sck , Din , 1 , 8 , 0
If Din <> 0 Then
Goto Anfang1
End If
Print "betriebs-modus " ; Din
Set Mcs
End Sub
Sub Mc_read()
Set Mcs
Cmd(1) = &H51
Cmd(2) = 0
Cmd(3) = 0
Cmd(4) = 0
Cmd(5) = 0
Cmd(6) = &HFF
Shift Sector , Left , 9
Tmp = Sector And &HFF000000
Shift Tmp , Right , 24
Cmd(2) = Tmp
Tmp = Sector And &H00FF0000
Shift Tmp , Right , 16
Cmd(3) = Tmp
Tmp = Sector And &H0000FF00
Shift Tmp , Right , 8
Cmd(4) = Tmp
Anfang3:
Reset Mcs
For A = 1 To 6
Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 0
Next
Dout = &HFF
Shiftout Mosi , Sck , Dout , 1 , 8 , 0
Shiftin Miso , Sck , Din , 1 , 8 , 0
If Din <> 0 Then
Goto Anfang3
End If
Print "read-modus " ; Din
Dout = &HFF
Shiftout Mosi , Sck , Dout , 1 , 8 , 0
Dout = &HFF
Shiftout Mosi , Sck , Dout , 1 , 8 , 0
Shiftin Miso , Sck , Din , 1 , 8 , 0
If Din <> &HFE Then
Goto Ende
End If
For A = 2 To 515
Shiftin Miso , Sck , Buffer(a) , 1 , 8 , 0
Next
Ende:
Set Mcs
End Sub
Sub Mc_write()
Set Mcs
Cmd(1) = &H58
Cmd(2) = 0
Cmd(3) = 0
Cmd(4) = 0
Cmd(5) = 0
Cmd(6) = &HFF
Shift Sector , Left , 9
Tmp = Sector And &HFF000000
Shift Tmp , Right , 24
Cmd(2) = Tmp
Tmp = Sector And &H00FF0000
Shift Tmp , Right , 16
Cmd(3) = Tmp
Tmp = Sector And &H0000FF00
Shift Tmp , Right , 8
Cmd(4) = Tmp
Anfang2:
Reset Mcs
For A = 1 To 6
Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 0
Next
Dout = &HFF
Shiftout Mosi , Sck , Dout , 1 , 8 , 0
Shiftin Miso , Sck , Din , 1 , 8 , 0
If Din <> 0 Then
Goto Anfang2
End If
Print "write-modus " ; Din
Dout = &HFF
Shiftout Mosi , Sck , Dout , 1 , 8 , 0
For A = 1 To 515
Shiftout Mosi , Sck , Buffer(a) , 1 , 8 , 0
Waitus 10
Next
Dout = &HFF
Shiftout Mosi , Sck , Dout , 1 , 8 , 0
Set Mcs
End Sub
Lesezeichen