ATTiny13 kezdő kérdések
A gosub az szubrutinhívás, azaz elugrik az adott cimkére, és a return-nál vissza, ahonnan meg volt hívva.
A bit esetén lehetséges, hogy a data sorokban amiket felsorolsz, azokat a fordító Byte-ként értelmezi.... és ugye byte-t belegyömöszkölni a bitbe macerás:).
DATA sorban nem is lehet bit-et tárolni - ahogy olvasgatom a Bascom leírásokat....
A bit esetén lehetséges, hogy a data sorokban amiket felsorolsz, azokat a fordító Byte-ként értelmezi.... és ugye byte-t belegyömöszkölni a bitbe macerás:).
DATA sorban nem is lehet bit-et tárolni - ahogy olvasgatom a Bascom leírásokat....
'Programresz:
Kód: Egész kijelölése
For P = 0 To 2 'beolvassa és kiírja az adatokat
Read A
Waitms 10
Portb.p = A 'itt kapcsolja be a labon a LEDet
Next P
Waitms 500 'erre az időre villan fel a led
'mondjuk ez fél sec nem egy villanás
For p = 0 To 3 'törli a kimeneteket
Portb.p = 0 'Itt meg kikapcsolja a LEDet
Next p
Hát ezt elnéztem írtam portb 0-2 ig
aztán töröltem portb0-3 ig
A 3 az már bemenet persze hogy villogott a led !
Mostmár a gombok viszonylag jól működnek , de az adatot mindig csak az elsőt olvassa ki.
Csakazt nem tudom ha kiveszem a figyelési ciklusból a restore-t hogy oldjam meg.
Gondolom e miatt olvashatja mindig csak az első 3-at az adatsorból
Do
If Pinb.4 = 0 Then Strob = Strob + 1 'programválasztás
If Strob > 3 Then Strob = 0
If Pinb.3 = 0 Then Gosub Lep
'ugrik ha van léptető jel
Select Case Strob
Case 0
Restore Data1
Case 1
Restore Data2
Case 2
Restore Data3
Case 3
Restore Data4
End Select
Waitms 10
Loop
Lep:
'végrehajtás
For P = 0 To 2 'beolvassa és kiírja az első 3 adatot
Read A
Waitms 10
Portb.p = A
Next P
Waitms 150 'erre az időre villan fel a led
For X = 0 To 2 'törli a kimeneteket
Portb.x = 0
Next X
Return
Data1:
Data 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0
Data2:
Data 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1
Data3:
Data 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0
Data4:
Data 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1
A select-et kivehetem a do loop közül működni fog a gomb funkciója?
aztán töröltem portb0-3 ig
A 3 az már bemenet persze hogy villogott a led !
Mostmár a gombok viszonylag jól működnek , de az adatot mindig csak az elsőt olvassa ki.
Csakazt nem tudom ha kiveszem a figyelési ciklusból a restore-t hogy oldjam meg.
Gondolom e miatt olvashatja mindig csak az első 3-at az adatsorból
Do
If Pinb.4 = 0 Then Strob = Strob + 1 'programválasztás
If Strob > 3 Then Strob = 0
If Pinb.3 = 0 Then Gosub Lep
'ugrik ha van léptető jel
Select Case Strob
Case 0
Restore Data1
Case 1
Restore Data2
Case 2
Restore Data3
Case 3
Restore Data4
End Select
Waitms 10
Loop
Lep:
'végrehajtás
For P = 0 To 2 'beolvassa és kiírja az első 3 adatot
Read A
Waitms 10
Portb.p = A
Next P
Waitms 150 'erre az időre villan fel a led
For X = 0 To 2 'törli a kimeneteket
Portb.x = 0
Next X
Return
Data1:
Data 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0
Data2:
Data 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1
Data3:
Data 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0
Data4:
Data 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1
A select-et kivehetem a do loop közül működni fog a gomb funkciója?
Az set... megvan a progi elején , csak az lemaradt a részletből. De köszi s figyelmeztetést.
Hibát ír a fordító , és 1 üres sorra panaszkodik . ERROR:61
Most mi lehet a hiba?
A másik dolog amivel nem bírok :
Van 4 subrutin :lep1 , lep2 ,lep...
Gosub ot hogy küldjem oda ha az 1,2 változó mondjuk S ?
Úgy helyes ha azt írom gosub lep(s) ?
Hibát ír a fordító , és 1 üres sorra panaszkodik . ERROR:61
Most mi lehet a hiba?
A másik dolog amivel nem bírok :
Van 4 subrutin :lep1 , lep2 ,lep...
Gosub ot hogy küldjem oda ha az 1,2 változó mondjuk S ?
Úgy helyes ha azt írom gosub lep(s) ?
Teljesen átformáztam a programot .
Valószínűleg egyszerűbben is meg lehetett volna oldani , nekem így sikerűlt .
$regfile = "ATtiny13.dat"
$crystal = 9600000
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Input
Config Portb.4 = Input
Dim A As Byte
Dim P As Byte
Dim X As Byte
Dim S As Byte
Dim B As Byte
Portb.3 = 1
Portb.4 = 1
S = 0
Gosub Olv0
Do 'főprogram
If Pinb.4 = 0 Then Gosub Valaszt 'programválasztás
If Pinb.3 = 0 Then Gosub Lep 'ugrik ha van léptető jel
Waitms 1
Loop
Lep:
If B > 3 Then Gosub Olv0
'végrehajtás
For P = 0 To 2 'beolvassa és kiírja az első 3 adatot
Read A
Waitms 10
Portb.p = A
Next P
Waitms 100 'erre az időre villan fel a led
For X = 0 To 2 'törli a kimeneteket
Portb.x = 0
Next X
B = B + 1
Return
Data1:
Data 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0
Data2:
Data 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1
Data3:
Data 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1
Data4:
Data 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1
Valaszt:
S = S + 1
If S > 3 Then S = 0
Select Case S
Case 0 'adatsor választás
Restore Data1
Case 1
Restore Data2
Case 2
Restore Data3
Case 3
Restore Data4
End Select
Return
Olv0:
B = 1
Select Case S
Case 0
Restore Data1 ' hogy ne menjen át másik adatsorba olvasni
Case 1
Restore Data2
Case 2
Restore Data3
Case 3
Restore Data4
End Select
Return
Valószínűleg egyszerűbben is meg lehetett volna oldani , nekem így sikerűlt .
$regfile = "ATtiny13.dat"
$crystal = 9600000
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Input
Config Portb.4 = Input
Dim A As Byte
Dim P As Byte
Dim X As Byte
Dim S As Byte
Dim B As Byte
Portb.3 = 1
Portb.4 = 1
S = 0
Gosub Olv0
Do 'főprogram
If Pinb.4 = 0 Then Gosub Valaszt 'programválasztás
If Pinb.3 = 0 Then Gosub Lep 'ugrik ha van léptető jel
Waitms 1
Loop
Lep:
If B > 3 Then Gosub Olv0
'végrehajtás
For P = 0 To 2 'beolvassa és kiírja az első 3 adatot
Read A
Waitms 10
Portb.p = A
Next P
Waitms 100 'erre az időre villan fel a led
For X = 0 To 2 'törli a kimeneteket
Portb.x = 0
Next X
B = B + 1
Return
Data1:
Data 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0
Data2:
Data 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1
Data3:
Data 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1
Data4:
Data 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1
Valaszt:
S = S + 1
If S > 3 Then S = 0
Select Case S
Case 0 'adatsor választás
Restore Data1
Case 1
Restore Data2
Case 2
Restore Data3
Case 3
Restore Data4
End Select
Return
Olv0:
B = 1
Select Case S
Case 0
Restore Data1 ' hogy ne menjen át másik adatsorba olvasni
Case 1
Restore Data2
Case 2
Restore Data3
Case 3
Restore Data4
End Select
Return