سلام دوستان من یه ویو پلیر دانلود کرده و ساختم اما وقتی مموری رو داخلش قرار میدم رو search card میمونه ضمننا مطمینم مموری رو درست وصل کردم
مشکل از کجا میتونه باشه اینم برنامه
$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 64
$swstack = 64
$framesize = 64
Config Lcdpin = Pin , Db4 = Pind.2 , Db5 = Pind.3 , Db6 = Pind.4 , Db7 = _
Pind.5 , E = Pind.1 , Rs = Pind.0
Config Lcd = 16 * 2
Cursor Off : Cls
Deflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 31 , 31 , 32
Deflcdchar 1 , 32 , 32 , 18 , 26 , 30 , 26 , 18 , 32
Deflcdchar 2 , 32 , 32 , 2 , 6 , 14 , 6 , 2 , 32
Deflcdchar 3 , 32 , 32 , 8 , 12 , 14 , 12 , 8 , 32
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
Const Msbl = 0
Dim Indat(512) As Byte
Dim Dat As Byte
Dim Resp As Byte
Dim I As Word
Dim Addr As Long
Dim Address As Long
Dim Fat As String * 5
Dim Firstaddr As Long
Dim Play As Bit
Cs Alias Portc.5
Clk Alias Portc.3
Miso Alias Pinc.2
Mosi Alias Portc.4
Declare Sub Minit
Declare Sub Mread(byval Addr As Long)
Declare Sub Msearch
Declare Sub Mfirstfile
Declare Sub Menu
Config Pinc.5 = Output
Config Pinc.3 = Output
Config Pinc.4 = Output
Config Pinc.2 = Input
Waitms 300
Config Spi = Soft , Din = Pinc.2 , Dout = Portc.4 , Ss = Portc.5 , Clock = Portc.3
Spiinit
Config Pind.6 = Input
Config Pind.7 = Input
Config Pinb.2 = Input
Config Pinb.3 = Input
Portd.6 = 1
Portd.7 = 1
Portb.2 = 1
Portb.3 = 1
First_key Alias Pind.6
Play_key Alias Pind.7
Prev_key Alias Pinb.2
Next_key Alias Pinb.3
For I = 1 To 100
Pwm1a = 0
Waitms 1
Pwm1a = 64
Waitms 1
Next I
Cls : Lcd " Search Card..."
Call Minit
Call Msearch
Call Mfirstfile
Call Menu
Xloop:
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
End
Sub Minit
Set Cs
Dat = &HFF
For I = 1 To 10
Shiftout Mosi , Clk , Dat , Msbl
Next I
Resp = 255
Reset Cs
Cmd0:
Dat = &H40
Shiftout Mosi , Clk , Dat , Msbl
Addr = &H00000000
Shiftout Mosi , Clk , Addr , Msbl
Dat = &H95
Shiftout Mosi , Clk , Dat , Msbl
While Resp <> &H01
Shiftin Miso , Clk , Resp , Msbl
Wend
Set Cs
Waitms 50
Reset Cs
Dat = &HFF
Cmd1:
While Resp <> &H00
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
Reset Cs
Dat = &H41
Shiftout Mosi , Clk , Dat , Msbl
Addr = 0
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
Wend
Dat = &HFF
Set Cs
End Sub
Sub Mread(byval Addr As Long)
Set Cs
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
Reset Cs
Dat = &H51
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
While Resp <> 0
Shiftin Miso , Clk , Resp , Msbl
Wend
While Resp <> &HFE
Shiftin Miso , Clk , Resp , Msbl
Wend
Dim Stn As Byte , A As String * 20 , C As Byte , J1 As Byte
For I = 1 To 512
Shiftin Miso , Clk , Resp , Msbl
Indat(i) = Resp
If Play = 1 Then
Pwm1a = Resp
Waitus 30
End If
Next I
Shiftin Miso , Clk , Resp , Msbl
Shiftin Miso , Clk , Resp , Msbl
Set Cs
End Sub
Sub Msearch
Address = 0
Do
Call Mread(address)
For I = 1 To 512
If Indat(i) = "M" Then Exit Do
Next I
Address = Address + 512
Home L : Lcd "Addr:" ; Address
Loop
Cls : Lcd "MMC OK"
Lowerline
Lcd "MMC FAT: "
For I = 55 To 59
Fat = Fat + Chr(indat(i))
Next I
If Fat = "FAT16" Then
Lcd "FAT16"
End If
For I = 83 To 87
Fat = Fat + Chr(indat(i))
Next I
If Fat = "FAT32" Then
Lcd "FAT32"
End If
Wait 2
End Sub
Sub Mfirstfile
Cls : Lcd " Search File..."
Address = 0
Do
Call Mread(address)
For I = 1 To 512
If Indat(i) = "1" And Indat(i -1) = "F" Then Exit Do
Next I
Address = Address + 512
Home L : Lcd "Addr:" ; Address
Loop
Cls : Lcd "First File:"
Lowerline
Lcd Address
Firstaddr = Address
Wait 2
End Sub
'____________________________________________ ___________________________________
Sub Menu
Address = Firstaddr
Play = 1
Cls : Lcd " Wave Player"
Lowerline
Lcd Chr(0) ; Spc(4) ; Chr(1) ; Spc(4) ; Chr(2) ; Spc(4) ; Chr(3)
Do
If Play_key = 0 Then
Waitms 300
Do
If Play_key = 0 Then Exit Do
Loop
Waitms 300
End If
If First_key = 0 Then Address = Firstaddr
If Prev_key = 0 Then
If Address > Firstaddr Then Address = Address - 1048576
Waitms 50
End If
If Next_key = 0 Then
Address = Address + 1048576
Waitms 50
End If
Call Mread(address)
Address = Address + 512
Loop
End Sub
مشکل از کجا میتونه باشه اینم برنامه
$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 64
$swstack = 64
$framesize = 64
Config Lcdpin = Pin , Db4 = Pind.2 , Db5 = Pind.3 , Db6 = Pind.4 , Db7 = _
Pind.5 , E = Pind.1 , Rs = Pind.0
Config Lcd = 16 * 2
Cursor Off : Cls
Deflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 31 , 31 , 32
Deflcdchar 1 , 32 , 32 , 18 , 26 , 30 , 26 , 18 , 32
Deflcdchar 2 , 32 , 32 , 2 , 6 , 14 , 6 , 2 , 32
Deflcdchar 3 , 32 , 32 , 8 , 12 , 14 , 12 , 8 , 32
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
Const Msbl = 0
Dim Indat(512) As Byte
Dim Dat As Byte
Dim Resp As Byte
Dim I As Word
Dim Addr As Long
Dim Address As Long
Dim Fat As String * 5
Dim Firstaddr As Long
Dim Play As Bit
Cs Alias Portc.5
Clk Alias Portc.3
Miso Alias Pinc.2
Mosi Alias Portc.4
Declare Sub Minit
Declare Sub Mread(byval Addr As Long)
Declare Sub Msearch
Declare Sub Mfirstfile
Declare Sub Menu
Config Pinc.5 = Output
Config Pinc.3 = Output
Config Pinc.4 = Output
Config Pinc.2 = Input
Waitms 300
Config Spi = Soft , Din = Pinc.2 , Dout = Portc.4 , Ss = Portc.5 , Clock = Portc.3
Spiinit
Config Pind.6 = Input
Config Pind.7 = Input
Config Pinb.2 = Input
Config Pinb.3 = Input
Portd.6 = 1
Portd.7 = 1
Portb.2 = 1
Portb.3 = 1
First_key Alias Pind.6
Play_key Alias Pind.7
Prev_key Alias Pinb.2
Next_key Alias Pinb.3
For I = 1 To 100
Pwm1a = 0
Waitms 1
Pwm1a = 64
Waitms 1
Next I
Cls : Lcd " Search Card..."
Call Minit
Call Msearch
Call Mfirstfile
Call Menu
Xloop:
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
End
Sub Minit
Set Cs
Dat = &HFF
For I = 1 To 10
Shiftout Mosi , Clk , Dat , Msbl
Next I
Resp = 255
Reset Cs
Cmd0:
Dat = &H40
Shiftout Mosi , Clk , Dat , Msbl
Addr = &H00000000
Shiftout Mosi , Clk , Addr , Msbl
Dat = &H95
Shiftout Mosi , Clk , Dat , Msbl
While Resp <> &H01
Shiftin Miso , Clk , Resp , Msbl
Wend
Set Cs
Waitms 50
Reset Cs
Dat = &HFF
Cmd1:
While Resp <> &H00
Set Cs
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
Reset Cs
Dat = &H41
Shiftout Mosi , Clk , Dat , Msbl
Addr = 0
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
Wend
Dat = &HFF
Set Cs
End Sub
Sub Mread(byval Addr As Long)
Set Cs
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
Reset Cs
Dat = &H51
Shiftout Mosi , Clk , Dat , Msbl
Shiftout Mosi , Clk , Addr , Msbl
Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl
While Resp <> 0
Shiftin Miso , Clk , Resp , Msbl
Wend
While Resp <> &HFE
Shiftin Miso , Clk , Resp , Msbl
Wend
Dim Stn As Byte , A As String * 20 , C As Byte , J1 As Byte
For I = 1 To 512
Shiftin Miso , Clk , Resp , Msbl
Indat(i) = Resp
If Play = 1 Then
Pwm1a = Resp
Waitus 30
End If
Next I
Shiftin Miso , Clk , Resp , Msbl
Shiftin Miso , Clk , Resp , Msbl
Set Cs
End Sub
Sub Msearch
Address = 0
Do
Call Mread(address)
For I = 1 To 512
If Indat(i) = "M" Then Exit Do
Next I
Address = Address + 512
Home L : Lcd "Addr:" ; Address
Loop
Cls : Lcd "MMC OK"
Lowerline
Lcd "MMC FAT: "
For I = 55 To 59
Fat = Fat + Chr(indat(i))
Next I
If Fat = "FAT16" Then
Lcd "FAT16"
End If
For I = 83 To 87
Fat = Fat + Chr(indat(i))
Next I
If Fat = "FAT32" Then
Lcd "FAT32"
End If
Wait 2
End Sub
Sub Mfirstfile
Cls : Lcd " Search File..."
Address = 0
Do
Call Mread(address)
For I = 1 To 512
If Indat(i) = "1" And Indat(i -1) = "F" Then Exit Do
Next I
Address = Address + 512
Home L : Lcd "Addr:" ; Address
Loop
Cls : Lcd "First File:"
Lowerline
Lcd Address
Firstaddr = Address
Wait 2
End Sub
'____________________________________________ ___________________________________
Sub Menu
Address = Firstaddr
Play = 1
Cls : Lcd " Wave Player"
Lowerline
Lcd Chr(0) ; Spc(4) ; Chr(1) ; Spc(4) ; Chr(2) ; Spc(4) ; Chr(3)
Do
If Play_key = 0 Then
Waitms 300
Do
If Play_key = 0 Then Exit Do
Loop
Waitms 300
End If
If First_key = 0 Then Address = Firstaddr
If Prev_key = 0 Then
If Address > Firstaddr Then Address = Address - 1048576
Waitms 50
End If
If Next_key = 0 Then
Address = Address + 1048576
Waitms 50
End If
Call Mread(address)
Address = Address + 512
Loop
End Sub
دیدگاه