Zkusil jsem hodně jednoduchý prográmek v Basicomu a na simulátoru běhal (druhý kód). Tak jsem zkusil trochu složitější a už jsem narazil a nějak nemůžu přijít proč se mu to nelíbí. Co se mu nelíbí je jasný, to vyčtu z error logu. Může mě někdo říct, co dělám špatně? Chyba je asi někde v dimenzování Pin(3). Zkoušel jsem různé datové typy, ale stále špatně… Nějak to nechce vzít pole proměnných.
Také nevím, jak zadefinovat, když chci prozatím použít vnitřní oscilátor.
'---------------------------------------------"
' Ovladani ledek tlacitky v 1.1."
'---------------------------------------------"
'
$regfile = "m48pdef.dat"
$crystal = 1000000
Dim Pr As Byte
Dim Jr As Boolean
Dim Tlac$ As String * 8
Dim Ppin(3) As Integer
Dim Ppin$ As String * 1
Dim Led As Byte
Dim Led$ As String * 8
Dim A As Byte
Dim B As Byte
Config Portc = Input
Config Portd = Output
Pr = 0
Jr = 1
Do
' Zvysovani a snizovani sloupce se 4 led
If Jr = 1 Then Incr Pr
If Jr = 0 Then Decr Pr
If Pr > 4 Then Jr = 0
If Pr < 2 Then Jr = 1
'Nacteni stavu tlacitek
If Pinc.1 = 0 Then Ppin(1) = 0 Else Ppin(1) = 1
Waitms = 10
If Pinc.2 = 0 Then Ppin(2) = 0 Else Ppin(2) = 1
Waitms = 10
If Pinc.3 = 0 Then Ppin(3) = 0 Else Ppin(3) = 1
'Nastaveni hornich 4 bitu
Led$ = ""
Select Case Pr
Case 1 : Led$ = "1111"
Case 2 : Led$ = "0111:"
Case 3 : Led$ = "0011"
Case 4 : Led$ = "0001:"
Case 5 : Led$ = "0000"
End Select
'Nastaveni spodnich 4 bitu
If Ppin(1) = 0 Then Waitms = 300 Else Waitms = 800 ' Pokud je stisknuto tlacitko, beh programu se pribrzdi
If Ppin(2) = 0 And Ppin(3) = 1 Then Led$ = Led$ + "0111"
If Ppin(2) = 1 And Ppin(3) = 0 Then Led$ = Led$ + "1011"
If Ppin(2) = 1 And Ppin(3) = 1 Then Led$ - Led$ + "1101"
If Ppin(2) = 1 And Ppin(3) = 1 Then Led$ = Led$ + "1110"
Portd = Binval(lled$)
Loop[/code]
Přitom původní jednoduší verzi to bere bez připomínek (programově je ok, ale pro chip špatně - špatný porty)
:
[code]regfile = "m48pdef.dat"
$crystal = 4000000
Dim Pr As Byte
Dim Jak As Boolean
Config Portb = Output
Config Portc = Input
Config Portd = Output
Pr = 1
Jak = 0
Do
If Jak = 0 Then Incr Pr 'Pricitej jedna az do 255
If Jak = 1 Then Decr Pr 'Odcitej jedna do 0
If Pr = 255 Then Jak = 1 'Prepni na odcitani
If Pr = 0 Then Jak = 0 'Prepni na pricitani
Portb = Pr 'Rozsvit led na portu B
If Portc = &B1110 Then Portd = &B1110 'tlačítko 1 Rozsvítí Led 1
If Portc = &B0111 Then Portd = &B0111 'Tlačítko 4 rozsvítí led 4
If Portc = &B0110 Then Portd = &B0111 'Tlačítko 1 a součanně 4 rozsvítí led 3
If Portc = &B1111 Then Portd = &B1011 'Pokud není stisknuto žádné tlačítko, svírí led 3
If Portc = &B0111 Then Waitms 300 Else Waitms 1000 'Při stisku tlačítka Y se prodlouží doba změny led na portu A[/code]
Chybové hlášení:
[code]Error 31 line 54 : Invalid datatype [0011] 0= 300]] , in File : C:\Basicom\8inBIiHed I. UBinBBkLedl. I .bas
Error 93 line 54 : Variable not dimensioned 0-> 0] , in File : C:\8asicom\BinBlikLed 1. l\BinBlikLedl. 1 .bas
Error 31 line 54 : Invalid datatype [0011] 0= 800]] , in File : C:\Basicom\BinBlikLed 1. l\BinBlikLedl, 1 .bas
Error 93 line 54 : Variable not dimensioned 0-> 0] , in File : C:\Basicom\BinBlikLed 1. l\BinBlikLedl. 1 .bas
Error 124 line 54 : LOOP expected , in File : C:\Basicom\BinBlikLed 1. l\BinBlikLedl. 1 .bas
Pokud tuto řádku smažu (poslední podmínka pro nastavení spodních 4 bitů) , tak postupně vyhazuje chyby na všch řádcích tohoto bloku.[/code]