Staram sie napsac program ktory bedzie odpowiadal na zapytania "mastera" zgodnie z pinem zegarowym - nie korzystajc z uartu zaprogramowanym wzorcem... i tak :
Kod: Zaznacz cały
'$sim
$crystal = 16000000
$regfile = "m8def.dat"
Dim Wartosc(256) As Byte 'wzorzec w matrycy
Dim Dana As Byte
Dim Licze As Byte 'do odliczania do osmiu
Dim Licznik As Single
Config Portb.0 = Input ' zczytuj impulsy z tad sygnal clock
Config Portd.2 = Input ' sygnal reset
Config Portb.1 = Output ' Wyjscie danych output
Config Portb.2 = Output ' wyjscie przelacznika
'Set Portb.0 ' ustaw stan wysoki
Set Portd.2 'ustaw stan wysoki
Clok Alias Pinb.0 ' przypisuje nazwy
Rest Alias Pind.2
Outpu Alias Portb.1
Do
If Clok = 1 Then ' jezeli jest juz akcja pownno to byc tak - poberz wartosc z tablicy , zamien na bit wyslij
' Dana = Wartosc(licze)
' gdzie , zegar, co , w jaki sposob , opoznienie w uS
'Shiftout Outpu , Rest , Wartosc(dana) , 0 , 8
Shiftout Outpu , Rest , Wartosc(dana) , 0 , 1 , 20 ' wyplowa jeden bit co 20uS
' obroc to 8 razy i dopiero powieksz
If Licze = 8 Then
Incr Dana ' zwieksz o jeden liczebnik dla ablicy
End If
End If
Loop
End
' wzorzec do przeslania
Wartosc(1) = &HA2 ' pierwsza cyfra
Wartosc(2) = &H13
Wartosc(3) = &H10
Wartosc(4) = &H91
Wartosc(5) = &H46
'(....)
Wartosc(256) = &HFF
ale czy dobrze rozumiem ze w momecie gdy pojawi sie sygnal clk <1 logiczna>
poleceni shiftout wysle mi pierwszy bit z wartosc(n) potem kolejny i kolejny i kolejny ?
czy odrazu wysle caly bajt ?
w helpie jest opisane ze ostatnia wartosc jest to opoznienie w uS ale dla stanu wysokiego czy niskiego ? <tj ile trwa dany stan? >
Przynam sie ze w internecie malo jest informacji na temat shiftout...
[ Dodano: 2008-05-31, 09:14 ]
hmm chyna nie poprawnie zrozumialem jak to polecenie ma dzialac z tego cowidze w sy,ulatorze shiftout sam generuje sygnal zegara - ale mimo to w symulatorze wysylane liczby nie sa poprawne... nie moge dojsc czemu