Můj první program v Bascomu - nechce chodit

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]

$Regfile = “m48def.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
Loop

Takhle a jede :smiley:
chybělo ($Regfile) a smička (Loop)

Jako první pokus to snad není nejhorší.
Chybí ale na začátku podrobnější vysvětlení kódu.
Co mají dělat tlačítka atd.

$crystal = 1000000 $crystal = 4000000 Dokud jenom testuješ v simulátoru, tak můžeš zkoušet různé hodnoty,
ale až budeš chtít zapsat kód do mproc, musíš uvést skutečnou frekvenci
na které čip běží. Z továrny je nastavený na 1 MHz.

Waitms = 10 Podívej se na správný zápis v helpu u hesla WAITMS.

Case 2 : Led$ = "0111:" Tady nemůže být ve stringu dvojtečka.

Portd = Binval(lled$) To je asi jenom překlep.

Ještě jsem zapomněl:
Piny na kterých jsou tlačítka proti zemi, potřebují zapnout pull-up, aby na nich v rozepnutém stavu byla definovaná úroveň 1.
Pull-up se zapne nastavením příslušného bitu Portx.
Např:

Config portb.1 = input Portb.1 = 1 'zapni pull-up

Jak jsem se díval, tak na to nějak špatně vidím a tak jsem si snížil rozlišení a je to už ok. Jelikož píšu na anglické klávesnici, abych mohl dobře psát potřebné symboly, tak mě dělá problém y/z či =/- apod.

Takže pull-up odpor zapnu tím, že nastavím vstup na hodnotu 1?

Jop (pokud to nemáš globálně zakázaný, což defaultně není). Jen tak mimochodem - tohle všechno je v popsaný v DS.

V Bascomu běž do Menu-Environment-Font-EditorFont a nastav si větší písmo.

Když zkombinuju moji chabou znalost angličtiny s něčím, co jsem nikdy nedělal, s 400 stránkovým datasheetem a 750 stránkovou bichlí k Bascomu, tak mě vyjde, že se občas vyplatí zeptat tady, než to hledat a zkoušet pochopit sám.

Tak jsem vyrobil mezi tím jiný program, jenž je trochu užitečnější, než ten první. Vyrobím synovcům křižovatku jen bude řízená semafory. Tam to už v programu vše funguje jak má. A poznámkama jsem v kódu taky nešetřil. Předtím jsem udělal delší verzi a ta mě zabrala 3,5kb. Což mě vůbec nepotěšilo, jelikož celkem malý prográmek a je už skoro na hranici demoverze Bascomu.
Semafor.rar (1.64 KB)