M A N U Á L    M O D U L Ů    PROFA
Obsah:

 1.Vlastnosti
    1.1 Možnosti využití
    1.2 Popis modulu PROFA-m
    1.3 Popis modulu PROFA-t
    1.4 Popis modulu rozšíření PROFA-r
vzhled modulu PROFA-t     1.5 Rozdělení paměti
    1.6 Reálný čas
    1.7 Hlášení chyb
    1.8 Propojení a komunikace
    1.9 Výměna dat s PC
    1.10 Česká diakritika
    1.11 Odstraňování poruch
    1.12 Přerušení
 2.Popis jazyka
    2.1 Instrukce BASIC
    2.2 Podrobnosti kompilátoru
    2.3 Příklad programování modulu
    2.4 Ladění programu
    2.5 Aritmetické možnosti
    2.6 Adresace modulu rozšíření PROFA-r
    2.7 Inkrementální čítač polohy
    2.8 Generátor pulzů a řízení krokových motorů
    2.9 Nápověda
 3.Podprogramy
    3.1 start
    3.2 startm
    3.3 zámek (ochrana dat)
 4.Instrukce displeje HD44780

1.1 Možnosti využití
    Systém PROFA zahrnuje několik malých vzájemě komunikujících modulů. Mohou provádět jednoduché výpočty s 2 bytovými čísly, linearizovat průběhy, ukládat data (až 64KB), komunikují s PC, případně i s jiným zařízením po RS232. Všechny vícefunkční linky lze využívat jako obousměrné CMOS linky (s možností rozšíření jejich počtu), ke komunikaci, nebo, při doplnění minimálním počtem součástek, jako napěťový výstup nebo k měření elektrických veličin. Snadné programování v BASIC je doplněno možností krokování v programu. Moduly mají reálný čas a elektricky nezávislou paměť EEPROM. Díky malé spotřebě proudu dobře poslouží i v aplikacích s bateriovým napájením.
    Modul PROFA-t pracuje navíc s textovým displejem a čtyřmi tlačítky a lze ho využít i jako inteligentní terminál, v některých případech např. na místo komplikovaného nasazení PC.

1.2 Popis modulu PROFA-m
    Obvod je na desce 30x31mm jako výměnný modul s 11-pinovým konektorem (délka desky s konektorem je 40mm, výška 10mm).Univerzální linky zde nejsou chráněny odpory!(vstupy jsou chráněny pouze uvnitř mikrořadiče)
    Technické parametry modulu PROFA-m:
rozměry:        30x40x10mm vč.konektoru
napájení:        6 až 18V
spotřeba:        0,09 až 3mA
hardw.linky:   8 univerzálních pro měření, vstup, výstup a komunikaci
vlastnosti vstupu:   hranice mezi log.0 a 1 je 1.4V; vstupní odpor min 100Mohm
vlastnosti výstupu: log.0/1=0V/Unapájecí; Imax=10mA
měřené veličiny:       trvání impulsu nebo stavu,perioda,frekvence,odpor,kapacita
reálný čas:              sekunda až letopočet, max.chyba 8s za den
komunikace:            RS232 upravená pro 1 vodič a zem, rychlost 500 Byt/sec s eliminací chyb valstním protokolem, příp. síťovou ardesou
velikost EEPROM:    32KB
rychlost čtení EEPROM:    1Byt/0.1ms

Zapojení vývodů při pohledu na stranu součástek, konektorem dolů:
modul PROFA-m






P0,...P7,out+5V,GND,+U

1.3 Popis modulu PROFA-t
    Obvod je funkční obdobou PROFA-m s konstrukcí uzpůsobenou jako terminál. Má navíc čtyři tlačítka a samostatný konektor pro textový displej! Tlačítka i displej jsou zabudovány nezávisle na univerzálních linkách a mají vlastní instrukce pro jednoduchou obsluhu. Univerzální linky jsou přes ochranné odpory 470 ohm vyvedené na svorkovnici. Napájení z vnějšího zdroje se připojuje též na svorkovnici. Pořadí vývodů je, při pohledu na displej konektorem vpravo, od shora: +U(napájení), kostra, výstup +5V, PORT 7 až PORT 0. Vývody jsou také popsány na svorkovnici.

    Technické parametry modulu PROFA-t:
rozměry:              95x58x20mm
napájení:            6 až 18V z vnějšího zdroje
spotřeba:            0,15 až 2mA
hardw.linky:        8 univerzálních pro měření, vstup, výstup a komunikaci
vlastnosti vstupu:   hranice mezi log.0 a 1 je 1.4V; vstupní odpor min 100Mohm
vlastnosti výstupu: log.0/1=0V/Unapájecí; Imax=5mA
měřené veličiny:    trvání impulsu nebo stavu,perioda,frekvence,odpor,kapacita
reálný čas:           sekunda až letopočet, max.chyba 8s za den
komunikace:         RS232 upravená pro 1 vodič a zem, rychlost 500 Byt/sec s eliminací chyb vlastním protokolem, příp. síťovou adresou
velikost EEPROM:          64KB
rychlost čtení EEPROM: 1Byt/0.1ms

Zapojení vývodů odpovídá obvodu PROFA-m, jen konektor je nahrazen svorkovnicí.

1.4 Popis modulu rozšíření PROFA-r
    Obvod slouží k zvětšení počtu vstupně/výstupních linek, k sledování polohy inkrementálního snímače, k řízení krokových motorů, ke generování pulzů nastavitelné délky a mezery. Na jednu univerzální linku modulu PROFA-t nebo PROFA-m lze připojit až 30 rozšiřujících modulů. Každý má vlastní adresu, a komunikuje po sběrnici 1 vodič + zem. Čtení i zápis I/O linek se provádí přímo BASIC instrukcí z modulu PROFA-t nebo PROFA-m, viz BASIC - ROZŠIŘUJÍCÍ MODULY.

    Technické parametry modulu PROFA-r:
rozměry:     30x40x10mm vč.konektoru
napájení:     9 až 18V
spotřeba:    4 mA
počet linek: 8 x vstup/výstup, 1 x datová sběrnice
mezní rychlosti
     inkrementální čítač: 0až10KHz
     pulzní denerátor: 11,5Hz až 7,14kHz
     řízení krokových motorů: 22,98Hz až 14,28kHz
trvání zápisu/čtení: 3ms

Rozmístění vývodů (pohled na stranu součástek,konektor dolů)
modul PROFA-r






P0,..,P7,COM,GND,+U

1.5 Rozdělení paměti u PROFA-t a -m
    Moduly mají elektricky nezávislou paměť EEPROM a rychlejší "neopotřebitelnou" pracovní paměť RAM. Program je umístěn v EEPROM která slouží i pro záznam hodnot (naměřené výsledky, přenášené bloky dat atd.).Její obsah lze programem měnit avšak její životnost je asi 1 milion zápisů.
    Pro sekundy a minuty reálného času, a uživatelské proměnné slouží paměť RAM která se při výpadku napájení "vynuluje". Paměti jsou takto rozděleny:

RAM
 Adresa   Obsah (ostatní bity jsou použity systémem)
    #0        0.až 6.bit = časovač posouvaný po 7,8ms (1s/128)
                9./13.bit = příznak posunu celé sekundy/minuty
    #1        0.až 3.bit = ukazatel zásobníku (hodnota 0 až 7)
    #2        0.až 7.bit = příznakový registr (pro BRANCH a KEYGOTO)
    #3 a #4 využity systémem
    #5        adresa právě vykonávané instrukce (2Byty)
    #6        sekundy a minuty (2Byty) 14.bit zapíná přrušení sekundou na adresu 9.
    #7        TRIS=nastavení vstupu/výstupu pro univerzální linky(1Byt)
    #8 až #23 uživatelské proměnné BASIC. (16 x 2Byty)
    #24až #31 zásobník návratů instrukce GOSUB -> RET. (8 x 2Byty)
    #A,#B    aritmetické registry (2 x 2Byty)

EEPROM
 Adresa     Význam
    0       Start programu po připojení napájení
    3       Přerušení při posunu celé hodiny - obsluhu ukončit "RET"!
             Je provedeno jen při instrukcích GOTO,GOSUB,BRANCH a THEN
             Skok bez přerušení lze provézt pomocí zápisu #5=adresa
    6       Přerušení chybou(přeplnění zásobníku,neznámá instrukce, nebo adresa mimo EEPROM)
V registru #B je adresa instrukce která chybu způsobila (lze ji dohledat ve výpisu kódů: "Soubor:Výpis kódů")
    9       Maskovatelné sekundové přerušení. Povolí ho #6,14=1. Návrat je pomocí RET. Při obsluze blížící se trváním 1 sekundě je potřeba toto přerušení zakázat!.

1.6 Reálný čas
    Je dostupný v proměnných "sec" (sekundy) a "min" (minuty).Hodiny a další hodnoty kalendáře lze umístit v EEPROM, např.vložením souboru START.PRF u PROFA-t (nebo STARTM.PRF u PROFA-m) který vše obstará.
např.    INCLUDE start    'vloží soubor "start.prf"
Potom hodina=B(hod),den=B(den),měsíc=B(měsíc),den v týdnu=B(denvt), a rok=W(rok).Posun celé sekundy je signalizován nastavením bitu #0,9 a posun celé minuty #0,13. Tyto bity jsou systémem pouze nastavovány a lze je použít k časování pravidelných dějů.
např.    IF #0,9=1 THEN #0,9=0:GOSUB podprogram    'provedení 1 za sekundu

1.7 Hlášení chyb
    Chyba při kompilaci je vyznačena kurzorem v textu a její důvod je vypsán červeně na informačním spodním řádku. Umístění kurzoru na chybě nemusí být přesné, proto, při nejasnostech, je třeba podrobnosti k požadovanému zápisu insrukce a parametrů vyhledat v nápovědě (F1) nebo v tomto manuálu.

    Chyby za běhu programu jsou ošetřeny skokem na adresu 6, kde je třeba programem chybu uložit nebo zobrazit na displeji (běžně to obstarává soubor "start.prf", vložený na začátek vašeho programu pomocí INCLUDE), případně ignorovat, a znovu spustit program od adresy 0. V registru #B je, při přerušení chybou, adresa na které k chybě došlo. Kód který chybu způsobil lze dohledat ve výpisu kódů -viz nabídka editoru Soubor- Výpis kódů (výpis se obnovuje po každé kompilaci!).
KÓD    PŘÍČINA CHYBY
2    Přetečení zásobníku při skoku do podprogramu pomocí GOSUB. Pro skok do podprogramu lze využít jen 8 vložených úrovní mezi GOSUB .. RET.
43    Podčerpání zásobníku instrukcí RET. Program se tedy nemá kam "vrátit". Může vzniknout např návratem opakovaným ve smičce.
44    Přetečení zásobníku odložením proměnné pomocí PUSH#B. Je nutno omezit skoky do podprogramu GOSUB, nebo zamezit odložení proměnné, např jiným zápisem vzorce,např. použitím další proměnné.
46    Podčerpání zásobníku instrukcí pro vyčtení odložené hodnoty POP#A. Chyba může být také v nesprávném opakování RET, a podobně.
63    Nepoužitá instrukce. Program pravděpodobně zkolaboval a "unikl" kontrole. Příčinu zbloudění lze vystopovat jednině odebíráním jednotlivych, naposledy přidaných částí. Pokud k této chybě dochází jen občas, její pravděpodobná příčina bude skok na adresu zadanou číslem, nikoli návěštím, nebo skok na návěští před instrukcí DATA nebo FILL. Další příčinou chybného skoku může být zápis nekontrolované hodnoty do programového čítače #5=... Kód 63 je také použit ke krokování programem.
120,121,122,123    Použití asdesy mimo EEPROM insrukcemi ..=B(adr),..=W(adr),B(adr)=..,W(adr)=.. K tomu může dojít při osazení 32KB a pokusu o čtení nebo zápis do adresy nad 32768.
(Chyba "dělení nulou" není modulem hlášen a je nutno ji ošetčit programově.)

1.8 Propojení a komunikace
    Pro komunikaci s PC lze použít COM1 nebo COM2 PC, nastavený na 9600Bd, 2stopbity, bez paritního bitu. Oba směry jsou svedeny do jednoho vodiče diodou 1N4148. Konektor CANON 9 pinů je zapojen takto:

CANON    připojení
    2.pin    P7 modulu a katoda diody (katoda je značena pruhem).
                 Tento pin je potřeba uzemnit odporem 47Kohm na kostru.
    3.pin    anoda diody
    5.pin    V0 (kostra modulu)
(Červený vodič propojovacího kabelu na P7, černý na 0V)

    Po resetu modulu je vždy na 7.pinu testován signál. Lze tak natáhnout nový program z PC do paměti EEPROM.
    Vzájemné propojení modulů je provedeno přímým spojením libovolných linek. Na vstupech je třeba použít ochranné sériové odpory 470ohm (PROFA-t tyto odpory má) Při více modulech na jedné lince je nutné v instrukci přenosu rozlišit síťovou adresu přijímacího nebo cílového modulu. Společnou datovou linku je nutno uzemnit jedním odporem 4K7 až 47Kohm!
    Přenosový protokol instrukce BASIC zabezpečí rozdělení bloku na úseky vhodné pro zápis do EEPROM, kontrolou i případné opakováním úseků (max.16krát) a podá zprávu o kompletnosti viz PŘENOS DAT. Pro důkladné ověření zápisu lze případně porovnat výsledek instrukce MEMSUM pořízený na vysílací a přijímací straně a následně žádat opakování nebo hlásit chybu apod.
    Případné přerušení přenosu může být způsobeno rušením linky, nebo, při komunikaci s PC, přílišným počtem spuštěných aplikací.
    Při síťové adrese 0 je čekání na každý byt (stejně jako vždy čekání na signál) 240ms. (Při síťové komunikaci je začátk přenosu odlišen min. 10ms klidem a dále je tolerována nejvýš 5ms mezera mezi byty.)
    Instrukce SERIN a SEROUT umožní přenos 1 až 32 bytu s jiným zařízením. Zde je možné použít pro každý směr odděleně jednu linku. Čekání klidu linky je u SERIN 1ms, a čekání na signál 240ms.Úspěch příjmu lze také kontrolovat
např.    BRANCH 0,opakuj:nula=0:SEROUT 7,nula,1    'opakuje nebo potvrdí příjem

1.9 Výměna dat s PC
    K příjmu dat slouží nabídka "nÁstroje/načíst Data". K jejímu využití je nutno vložit do hlavní smyčky modulu instrukce k odeslání, např.:
        RECV 7,0:BRANCH 0,nic    'čeká po 200ms žádost o data (=např. 123)
        IF #8=123 THEN SENDB 7,0,začátek,délka    'odešle data
nic:    'pokračuje smyčka
K odeslání dat lze využít běžné instrukce, např.
        ORG 6000            'adresa umístění bloku dat v modulu
        DATA "abc",1,2,3,10000    'data k odeslání
Spuštěním kompilace budou data nabídnuta k přenesení do modulu, ve kterém musí být instrukce pro příjem, např.:
        RECB 7,0,4000    'čeká po 200ms data na 7.pinu.(uloží od adresy 4000, pokud by nebyla uvedena, uloží na adr.shodnou s vysílací stranou)
        BRANCH /0,příjem_ok    'úspěch může být hlášen
Pro výměnu dat s jinými moduly lze navíc použít síťovou adresu>0. Pokud pak nesouhlasí síť.adresa přijímací a vysílací strany, přenos neproběhne.

1.10Česká diakritika
    Pro správnou funkci české diakritiky editoru je nutné nainstalovat češtinu v DOSu a přepnout anglickou klávesnici DOS příkazem "keyb us".Přepínání češtiny monitoru i klávesnice pak probíhá zároveň pomocí levého ALT+SHIFT.

    Displej modulu dovoluje použít 8 uživatelských znaků, což je využito pro omezenou část české diakritiky nabídnuté v souboru START.PRF. Přímé psatní českých znaků do textových řetězců (na místo kódů uživatelské tabulky displeje) umožní jejich předchozí definice v BASIC např.: "í"=2 která je ve zmíněném souboru též provedena. Ke změně podoby znaku je potřeba vyměnit pomocí apostrofů řádky s příslušnými ("DISPL..") ve START.PRF .
např. "á"=0:"é"=1 'definice textových konstant
tabzn1:  WRDI=64   'nastaví zápis do tabulky znaků displeje od pozice 0
        DISPL 2, 4,14, 1,15,17,15,0    'grafická podoba "á"
        DISPL 2, 4,14,17,31,16,14,0    'grafická podoba "é"
        PRINT "dlouhé á"    'výpis znaků s diakritikou na displej
    Pro více než 8 českých znaků je nutno znaky vhodně měnit nebo požít diplej s anglickou tabulkou ASCII která má v horní části (kódy > 127) i znaky použitelné pro češtinu.

1.11 Odstraňování poruch        (Projev chyby - důvod a způsob nápravy)
Modul je propojen s PC a přesto nekomunikuje.
    -Ve WINDOWS95(nebo vyš.) používá COM jiný program. Je nutno jej ukončit. Jinak překontrolujte propojení, napájení modulu a nastavení pořadí COM v nabídce "nÁstroje/Přenos po COMn".
Dochází k přerušení přenosu případně chybnému natažení dat.
     -Používáte modul s verzí "g"(na mikrořadiči) a nižší, nebo kompilátor nižší než 6.3. Problém odstraníte změnou verze nebo spuštěním PC pouze v DOS.
Program v modulu se občas zhroutí.
    -Příliš velká zátěž výstupů - lze napravit snížením zátěže, pžíp.zesílením zdroje nebo lepším vyhlazením pomocí kondenzátorů. Příčinou může být i natočení trimru pro kontrast displeje na pravý doraz! Další příčinou může být přepsání programového kódu,provádění kódu mimo tělo programu, skok programu do oblasti dat, a podobné programátorské chyby. Např.
        w(1)=0        'přepíše rozběhovou adresu, což způsobí zhroucení při příštím startu!
        goto adr1    'skok do oblasti dat způsobí zhroucení programu!
adr1: data 1,2,3
        print;"AHOJ":end    'program pokračuje mimo programový kód s nepředvídatelným chováním!

1.12 Přerušení
Modul provádí tato přerušení (viz též 1.5 Rozdělení paměti)
a)Při posunu celé hodiny na adresu 3 (určeno k posunu kalendáře). Může k němu dojít jen při skocích
  (kvůli zachování aritmetických registrů). Návrat se provádí pomocí RET.
b)Při chybě za běhu na adresu 6 (viz 1.7 Hlášení chyb).
c)Při posunu celé sekundy na adresu 9(Od verze "j" -značeno na mikrořadiči). Je povoleno jen při #6,14=1.
  (Vypíná se také zápisem min=...!). Návrat se provádí pomocí RET. Trvá-li jeho obsluha více než sekundu,
  je třeba ho během obsluhy zakázat! Provádí se (stejně jako IRQ hodiny) jen při skocích - nikterak při pause a sleep!

2.1 Instrukce BASIC
   Profa BASIC je přizpůsoben k použití začátečníkem a při tom nebrání složitějším konstukcím, tvorbě jednoduchých databází, využití při řízení strojů a podobně.
   Instrukce jsou vykonávány ve směru psaní textu. První řádek by měl obsahovat "INCLUDE start" čímž zajistíte vložení základních funkcí modulu. Dále lze psát více instrukcí na jeden řádek a oddělovat je dvojtečkou. Každý řádek může být pojmenován, toto "návěští" musí být na levé straně řádku a vždy ukončené dvojtečkou. Je přehledné vkládat před první instrukci každého řádku tabelátor, a za poslední instrukci doplnit za apostrof vysvětlivku ke smyslu celého řádku.
např:
             INCLUDE start
řádek1:  CLS:PRINT "psaný text"      'smaže displej, vypíše text
             PAUSE 10:PRINT "jiný text" 'čeká 10s,vypíše text
řádek2:   ...
   K větvení programu slouží IF podmínka THEN, které vykoná instrukce následující v tomto jediném řádku. Dalším způsobem větvení je podmíněný skok BRANCH bit,adresa,bit,adresa... který testuje výsledek předchozí operace, viz popis této instrukce.
např:
zobrazpin:  IF PORT,0=1 THEN PRINT "1":GOTO čekej 'zobrazí log.stav=1 na nejnišším vstupním pinu a skočí na "čekej"
                 PRINT "0"    'zobrazí log.stav=0
čekej:        PAUSE 30:BRANCH 0,zobrazpin  'čeká 30s,při stisku levého tlačítka zobrazí pin
                 GOTO čekej   'opakuje čekání
   Na konci celého programu je nutno zabránit pokračování do nepoužité oblasti paměti, např. instrukcí skoku.

Následující seznam instrukcí je rozdělen podle účelu. Nutno dodržet způsob zápisu instrukcí vč.závorek, čárek a středníku, jen [parametr] lze vynechat -bude nahrazen implicitní hodnotou.

    ŘÍZENÍ PROGRAMU
GOTO adresa     Skok na zadanou adresu nebo návěští
GOSUB adresa    Skok do podprogramu na zadané návěští (uloží adr.návratu)
RETURN   Navrát z podprogramu (skok za instrukci GOSUB). Zápis lze zkrátit na RET.
BRANCH bit,adr1,bit,adr2,...    Větvení programu dle příznaku (po PAUSE a SLEEP)
        test bitů (tlačítek) lze logicky násobit i negovat
např.
adr0: PAUSE 3        'čeká na stisk tlačítka max.3sekundy
        BRANCH /0123,adr0    'skok při nestisklém žádném tlačítku
        BRANCH 03,adr1,/2,adr2    'tlačítko 0 i 3 stisklé zároveň: skok na adr1
        'tlačítko 2 nestisklé: skok na adr2
KEYGOTO adresa   Skok při nenulovém příznakovém registru (skok při stisku libovolného tlačítka)
IF podmínka THEN ...    Podmíněné provedení řádku (lze testovat i jednotlivý bit, např.:x1,0=1)
např.    IF x1=5 THEN x1=x1+1    'zvětšuje x1 po hodnotu 5

    DISPLEJ (týká se jen modulu PROFA-t)
CLS    Vymaže displej
PRINT [pozice];"text"    Výpis textu od zadané pozice
PRINT [pozice],[poč.znaků],[poč.desetin];aritm.tvar    Výpis čísla
WRID=aritm. tvar    Zapíše instrukci displeje
        (viz 4.Instrukce displeje HD44780)
DISPL=aritm. tvar    Zapíše znak na displej a posune pozici kurzoru
DISPL n1,n2,...    přenese znaky do displeje na předem nastavenou pozici
(Oživení displeje je provedeno v souboru "start.prf", a lze ho obnovit instrukcí GOSUB inicd.)

    TLAČÍTKA (týká se jen modulu PROFA-t)
Jsou číslovaná z leva:0123 a výsledek je uložen (do reg. #2) pro testování instrukcí BRANCH nebo KEYGOTO.
PAUSE trváni[,filtr,stav portu] Čeká stisk tlačítka,případně změnu portu
SLEEP trváni[,filtr,stav portu] Vypne displej a čeká stisk tlačítka, případně změnu portu.
např.
adr1:    PAUSE 5:BRANCH /0123,adr1 'čeká 5sekund,
        'při nestisklém tl.opakuje čekání

    ÚSPORNÝ REŽIM (týká se jen modulu PROFA-m)
SLEEP trváni[,filtr,stav portu] Sníží spotřebu a čeká zadanou dobu, případně kontroluje změnu portu.

    MĚŘÍCÍ FUNKCE
...=FREQ(pin[,trvání])    Změří frekvenci max.20kHz.Trvání:8=2s,7=1s...
        (implicitní trvání=6 -výsledek je v Hz)
...=RSIZE(pin[,maxt])    Změří vybíjecí čas seriového RC členu(R<100K)
        Následující se liší u PROFA-t:krok=0,061ms PROFA-m:krok=0,01ms
...=PULSIN(stav,pin[,maxt])    Čeká požad.stav a změří jeho trvání
...=PIN(stav,pin[,maxt])        Změří trvání stavu pinu
...=ISIZE(pin[,maxt])        Vybije C a změří čas nabíjení(měření I nebo U)
...=CSIZE(pin[,maxt])        Změří vybíjecí čas paralelního RC členu(R>10k)
stav=stav pinu 0 nebo 1
pin=pořadí I/O linky 0 až 7
maxt=maximální výsledek (omezení trvání) na 256*(2^maxt)-1 kroků:
0 pro 255, 1 pro 511, 2 pro 1023,..., 8 pro 65535
implicitně maxt=0
např.    x1=PULSIN(1,2,3)    'změří trvání jedničky na 2.pinu.Výsledek dá do x1
            'při hodnotě 1023 měření ukončí

    VSTUPY A VÝSTUPY
TRIS=...    Nastaví linky portu (1=vstup, 0=výstup)
...=TRIS    Přečte nastavení vstupů/výstupů
PORT=...    Zápis na port (1=5V a 0=0V) (týká se jen výstupů)
...=PORT    Přečte port (hranice mezi 1 a 0 je 1,4V)
např.:    TRIS=%00000001    'nastaví 0. pin jako vstup, ostatní jako výstupy
              IF port,0=1 THEN goto adr0    'při kladném napětí na 0.pinu skok do adr0
PWM(pin[,poč.per.])=..    Vyrobí signál 1,3KHz s požad.poměrem impulsu a mezery (rozsah 0:256 až 255:1) z něhož lze RC filtrem vytvořit analogový výstup (tedy řídit napětí). U=N x 5/256 kde N=hodnota pravé strany přiřazení.
            Poč.per=8 až 0, implicitně 4. Počet kmitů=2^Poč.per .
např.    PWM(0,5)=128    'nastaví na RC členu na P0 U/2,tedy 2,5V
SOUND pin,trvání,perioda vyrobí tón na požadovaném pinu (nebo krátkou pauzu)
    t=trvání*3.9ms; frekvence(KHz)=156/perioda
    perioda=0 až 255, 0 neovlivní výstup (= jen pauza)

    ROZŠIŘUJÍCÍ MODULY
TRIS(pin,adrd)=0až255    Výběr logických vstupů/výstupů (1=vstup 0=výstup).
    Např. TRIS(1,7)=%10000000 nastaví, u modulu s adresou 7 připojeném na PORT,1 profa-t(m),
    na 7.pin vstup, na ostatní piny výstupy.
APPEND(pin,adrd)=0až255  Nastavení logických 1/0 na výstupech (= +5V/0V)
...=APPEND(pin,adrd)   Přečte stavy vstupů (i výstupů). Hranice mezi 1 a 0 u vstupů je asi 1,4V.
...=POS(pin,adrd)    Přečte inkrementální čítač polohy
TRIS(pin,adrd)=n Nastaví režim modulu (viz 2.8 Generátor pulzů a řízení krokových motorů)

    PŘENOS DAT
RECV [pin],[síť.adr.] Příjem do proměnné určené vysílací stranou
RECB [pin],[síť.adr.],[adresa umístění] Příjem bloku dat
REC [pin],[síť.adr.] Příjem bloku dat i hodnoty
SENDV [pin],[síť.adr.],cílová proměnná Odešle proměnnou
SENDB [pin],[síť.adr.],začátek bloku,délka bloku Odešle blok dat
pin=pořadí linky 0 až 7 použité pro přenos (implicitně 7)
síť.adr.= číslo 1 až 31 k rozlišení adresy vlastního nebo cílového modulu
        v síti. Adresa 0 nerozlišuje modul a je určena jen pro 1 modul a PC, nebo
        pro 2 moduly. (Nikoli pro síť.) Dovoluje také přerušení komunikace až na 200ms.
SERIN pin,proměnná,poč.bytů -Přijme jeden až 32 bytů z RS232 a uloží je do RAM
        od zadané proměnné. Nejprve čeká klid linky v trvání alespoň 1ms, kvůli rozlišení začátku
        sekvence, pak během 200ms očekává signál. Použitý pin nastaví trvale jako vstup.
        Proto je vhodné zajistit před sekvencí signálu z protější strany asi 2ms pauzu,
        jinak nemusí být příjem úspěšný.
SEROUT pin,proměnná,poč.bytů -Odešle jeden až 32 bytů, začínajících
        zadanou proměnnou,po RS232. Použitý pin nastaví trvale jako výstup.
Po proběhnutí instrukce přenosu (krom SEROUT) zůstanou nastaveny příznaky:
#2,0=neúspěch přenosu
#2,1=obsazená linka (detail chyby)
#2,2=přerušení započatého přenosu (detail chyby)
#2,3=přenos bloku
Ověřit kompletnost přenosu lze: "BRANCH 0,opakuj,3,blok"
pr1:    SENDV 3,5,x1    'odešle hodnotu z x1 po 3.pinu do x1 desky č.5
            BRANCH 0,pr1    'opakuje až do potvrzení od přijímací strany
            RECV 3,8        'přijme hodnotu do proměnné určené vysílací stranou
pr2:    SERIN 6,#8,3:branch 0,pr2 'čeká příjem 3 B na 6.pinu
            serout 5,#8,1    'potvrdí odesláním 1. obdrženého

    PRÁCE S EEPROM
B(adresa)=...      Zapíše 1 byt do EEPROM na danou adresu.Trvání je 10 až 15ms
W(adresa)=...    Zapíše 2 byty    -||-
...=B(adresa)      Přečte 1 byt z EEPROM z dané adresy. Ttrvání je asi 1ms.
...=W(adresa)    Přečte 2 byt    -||-
Adresa zde může být zastoupena proměnnou nebo i výpočtem.Při zápisu mimo EEPROM dojde ke skoku na chybové hlášení (adresa 6)
DATA konstanta1,konstanta2,...    Vloží tabulku konstant do EEPROM
    (rozlišuje 1/2B a text dle "Kompilátor-Způsoby zápisu hodnot" !)
...=MEMSUM(zač.bloku,délka bloku)    Kontrolní součet bloku EEPROM
SEARCH proměnná s adresou, délka bloku, hledaný znak/2znaky/číslo
    Hledá v bloku EEPROM jeden nebo dva byty. Nastaví příznak #2,0 (ověření:BRANCH /0,ok) a proměnná s adresou je posunuta za hledaný znak (znaky).

    OSTATNÍ INSTRUKCE
HI(proměnná)=..     Zápis do vyššího bytu proměnné
LO(proměnná)=..    Zápis do nižšího bytu proměnné
...=HI(proměnná)    Čtení vyššího bytu proměnné
...=LO(proměnná)   Čtení nižšího bytu proměnné
...=RND       Funkce vyrobí náhodné číslo 0 až 65535
NOP            Prázdná instrukce (0,1ms)

2.2 Podrobnosti kompilátoru

        PARAMETRY A HARDW.NÁROKY KOMPILÁTORU
Tato verze je dosovská aplikace ovládaná pouze klávesnicí! Nepracuje v operačním systému Windows NT ! Požadavky na PC jsou velmi malé (min.386, 1MB RAM, 300KB místa na HDD). Kompilátor umožňuje použít max.350 návěští nebo konstant. Editor pracuje jen se soubory v současném adresáři a lze jím zpracovávat text do velikosti 45KB (větší zdrojový kód lze rozdělit pomocí vkládání souborů - viz INCLUDE )!

        PŘÍKAZY KOMPILÁTORU
ORG xx Adresa umístění následujícího kompilovaného bloku v EEPROM modulu.Další instrukce budou
        ukládány od této adresy. Lze použít nejvýš 8 bloků, 1.blok od adresy 0 je umístěn automaticky (není-li
        určen tímto příkazem jinam).
OffMove Vypne přenesení právě kompilovaného bloku do EEPROM. Příkaz je užitečný pokud jsou
        v EEPROM data která nechcete přepsat, ale jejich pozice (návěští) program používá.
PROFA-M Zapne kontrolu odlišných instrukcí (PROFA-M má méně instrukcí než PROFA-t).
TEMPADR xx Nastaví imaginární adresu pro následující návěští. Je určeno k přemístění
        programového bloku na jinou pozici v EEPROM.(Např. přenesení programu pomocí dalšího modulu)
        Ukončí se novým ORG.
INCLUDE soubor.prf
        Vložení souboru s programem -vložený program bude jakoby součástí zdrojového textu.
REM (=apostrof)    Poznámka - zbytek řádku není kompilován
END            Ukončí kompilaci a další text ponechá bez kontroly

    TECHNIKA ZÁPISU ČÍSELNÝCH HODNOT
číslo 0 až 255    -dekadický zápis do 1Bytu
číslo>255 nebo 4až6 místné číslo (např.0000)    -dekadický zápis do 2Bytů
%01                -binární zápis (1 až 8 míst=1Byt;9 až 16 míst=2Byty)
$0123456789ABCDEF    -hexadecimální zápis(1 až 2 místa=1Byt;3 až 4místa=2Byty)
"text" / návěští        -zápis ASCII znaků / 2bytové adresy

DEFINICE PROMĚNNÝCH A KONSTANT
    Proměnné uchovávají hodnotu kterou lze programem měnit.Má rozsah 0 až 65535. Jejich definice není povinná, k založení dojde i při prvním zápisu hodnoty do proměnné (např.x1=7). Jakmile je však v programu jediná proměnné založena následující definicí, zakládat pouhým přiřazením už nelze (zabrání se tak obtížně odhalitelným chybám způsobeným překlepy).
@jméno=#            -založí BASIC proměnnou na nejnižší volné adrese RAM
@jméno=#adresa    -založí BASIC proměnnou na zadané adrese RAM

    Konstanty jsou pojmenovaná čísla (usnadní změny při vícenásobném výskytu stejné hodnoty).
"1znak"=1B "2znaky"=1B -založí textovou konstantu pro náhradu znaku v PRINT
            např.pro českou diakritiku.Max.počet textových konstant je 16.
Např.:    "á"=0    'definuje kód 0 pro znak "á" (K definicím lze užít i direktivu SYMBOL.)

    PŘEDDEFINOVANÉ KONSTANTY
getsec      Dosadí aktuální sekundy dle vnitřních hodin PC (0až59)
getmin      Dosadí minuty (0až59)
gethour    Dosadí hodiny (0až23)
getdw       Dosadí den v týdnu (0až6 =pondělí až neděle)
getday      Dosadí den v měsíci (1až31)
getyear     Dosadí letopočet (např.2001)

    PŘEDDEFINOVANÉ PROMĚNNÉ (="registry"-nezabírají místo v uživatelských proměnných.)
sec    pro sekundy reálného času
min    pro minuty reálného času
tris    určuje nastavení linky jako výstup nebo vstup
port    stav vstupů/výstupů

    BITOVÉ OPERACE
    PROFA BASIC umožňuje použít samostatné bity uživatelských proměnných jako "přepínače". (Týká se i registrů MIN,SEC,TRIS a PORT, i u rozšíření APPEND.) Tím zjednoduší práci a může i zkrátit velikost výsledného kódu a zvýšit jeho rychlost. Bit se uvádí jménem proměnné a jeho pořadím odděleným čárkou. Hodnota bitu je pouze 0 nebo 1.
např.    PORT,7=1    'nastaví poslední pin portu do +5Volt
        IF #0,9=1 THEN #0,9=0:GOTO adr1 'při posunu sekundy vynuluje
        'její příznak a skočí na adr1

2.3. Příklad programování modulu
    Program pro výpis a nastavení hodin a kalendáře je drobnou ukázkou práce s modulem PROFA-t. Vyžaduje modul s displejem zasunutým v konektoru, komunikační kabel propojující modul a PC, a správně nastavený COM port editoru (alt+A,Přenos po COM..).
    Otevřete soubor "kalendar.prf" (Alt+S,O), zkompilujte jej (Alt+R) a připojte napájení k modulu. Proběhne přenos dat a na displeji se objeví datum a čas který lze po stisku tlačítka nastavit.
    Čas je dostupný v proměnných sec a min. Aktuální hodina je v EEPROM dostupná pomocí b(hod) a datum pomocí b(den),b(měsíc),b(denvt)(=0 až 6 pro pondělí až neděli) a letopočet naleznete ve w(rok).
např.    x1=b(měsíc)    'opíše aktuální měsíc do x1

2.4 Ladění programu
    Po zapnutí napájení modul nejprve zkontroluje signál na 7.pinu pro případné natažení nového programu (pokud není v programu vložen zámek). Dále pokračuje čtením instrukcí od nulté adresy, kde musí být umístěn skok na začátek programu (viz podprogram start.prf).
    Verze 6.6 umožňuje trasování programem za provozu. Lze ho aktivovat vložením "!n:" na začátek řádku, kde n=počet krokovaných řádků od aktuálního (pro jeden řádek lze "n" vypustit). Zastavovacích bodů může být více, celkem lze krokovat maximálně 50 řádků. Na PC jsou při tom zobrazeny hodnoty všech použitých proměnných a formát výpisu každé z nich (dekadicky, hexadecimálně, binárně nebo znaky) lze zvolit pomocí šipek. V textu je pruhem označen řádek kde program právě čeká, mezerníkem nebo klávesou ENTER ho lze posunovat. Při krokování nesmí být 7. pin použit pro jiné účely!     Po dokončení ladění programu je nutné odstranit krokovací instrukce ze zdrojového textu a program znovu natáhnout do modulu.

2.5 Aritmetické možnosti
    Modul nabízí, kromě násobení, dělení, sčítání, odčítání, logických operací a výpisu hodnot na displej ve dvoubajtových číslech (rozsah 0až 65535), také další možnosti:

-Rozšířené dělení
    #4,var1=#4,var2/var3    'nutno zapnout pomocí #1,6=1.
    kde var1=libovolná proměnná,         var2 a 3 = proměnná nebo konstanta
    #4 = 2 vyšší byty dělence a podílu (před dělením vložit hodnotu, po dělení vyzvednout)
např.: x1=x2/x3 kde x1 a x2 jsou čtyřbytová čísla (proměnné s vyššími byty odlišeny přidání "h")
    #4=x2h:#6,1=1    'vloží vyšší byty, zapne rozšířené dělení
      x1=x2/x3          'provede dělení
      x1h=#4             'vyzvedne vyšší 2 byty výsledku
    Registr #4 je měněn ostatními instrukcemi, proto je nutné vepsat hodnotu těsně před dělením a vyčíst ji hned po dělení.Bit #6,1 zůstane po dělení vypnut.

-Přetečení po násobení v #A
např.: var1=var2*var3:var4=#A    'var4=vyšší 2 byty po násobení
-Dělení desetinným číslem viz 3.Podprogramy
-Výpis desetinné tečky    Provede výpis hodnoty s vložením tečky na požadovanou pozici počítanou zprava:
        PRINT pozice,poč.znaků,poč.desetin;aritm.tvar

2.6 Adresace modulu rozšíření PROFA-r
  Výběr adresy pro komunikaci je popsán v kapitole 2.1 Instrukce BASIC/VSTUPY A VÝSTUPY/instrukce APPEND
  Nastavení adresy na modulu rozšíření (je přednastavena dle objednávky) se provádí pomocí odporů na vývodech 1(pa,2) a 2(pa,3)mikrořadiče takto:
adresaR na vývodu 1R na vývodu 2
0 nepřípustná 470R 470R
1 470R 2K2
2 470R 4K7
3 470R 15K
4 470R 33K
5 470R 100K
6 2K2 470R
7 2K2 2K2
8 2K2 4K7
9 2K2 15K
... ... ...


2.7 Inkrementální čítač polohy
    Je trvale připojen na P0 a P1 v modulu PROFA-r pokud jsu použity jako vstupy a nijak nebrání ostatním funkcím. Použití čítače nemá vliv na ostatní piny. Čítač má rozsah 2B(tedy 0 až 65535). Lze ho nulovat příkazem TRIS(pin,adr)=-1 a číst ..=POS(pin,adr) kde adr=adresa modulu rozšíření. Jeho mezní kmitočet je 10KHz. Jeho hodnota není ovlivněna čtením ani jinými kroky.

Použití z BASIC:
...=POS(pin,adrd)    Přečte inkrementální čítač polohy
TRIS(pin,adrd)= -1   Vynuluje inkrementální čítač polohy

!PROZOR! Inkrementální čítač nepracuje při použití generátoru pulzů nebo krokových motorů.

2.8 Generátor pulzů a řízení krokových motorů
Generátor pulzů je vyveden u modulu PROFA-r na 2.pinu (ten zůstává přístupný i pomocí TRIS a APPEND !)
Signály pro řízení krokového motoru jsou na 7.až 4.pinu PROFA-r (tyto piny nereagují na APPEND a TRIS až do zrušení pomocí kódu n= -4). Piny 3.až 0. zůstávají přístupné běžným způsobem.

Použití z BASIC:
TRIS(pin,adrd) = N    kód N má tento význam ( je nutno dodržet znaménko +/- !):
(-1    Vynuluje inkrementální čítač polohy)
-2    Zapne generátor pulzů s nastavitelným poměrem mezera : pulz = ts : tp.
-3    Zapne generátor pulzů se střídou 1:1, T=2*tp a s možností pozvolného rozjezdu a zastavení dle ts=0až127

-4    Zruší výstup pro krokové motory=>uvolní 7. až 4.pin pro běžné využití.
-5    Nastaví jednofázové řízení s plným krokem (postup přepínání 1000,0100,0010,0001).
-6    Nastaví dvoufázové řízení s plným krokem (1100,0110,0011,1001).
-7    Nastaví jednofázové řízení s polovičním krokem (1000,1100,0100,0110,0010,0011,0001,1001)
    Pro bipolární řízení je nutné elektrickým propojením posunout spínání opačné polarity o 2 piny.
-8    Směr otáčení krokového motoru +
-9    Směr otáčení krokového motoru -
+512+tp    Trvání jednoho kroku motoru nebo periody/pulzu generátoru. Rozsah tp=7 až 4351, skutečný čas pulzu=tp*0.01ms.
    Při tp=0až6 modul použije tp=7. Frekvence motoru je tedy 14,28kHz až 22,98Hz a generátoru pulzů 7,14kHz až 11,5Hz.
-20-ts    Pozvolný rozjezd a zastavení pro krokové motory a generátor pulzů s pevnou střídou (při -3), nebo nastavitelná mezera (při -2). Rozsah ts je 7 až 4095 pro délku mezery, nebo 0 až 127 pro rozjezd a zastavení. Při pozvolném rozjezdu se k trvání pulzu přičítá ts*2 (celkový t=(tp+ts*2)*0.01ms) a v každém kroku je ts zmenšován o 1 až po ts=0. Při dojezdu je "ts" zvětšován od 0 tak, aby při posledním pulzu dosáhl původní velikosti.

OUT(pin,adrd)=0až65535 Spuštění generátoru pulzů nebo krokového motoru (po -3 nebo -2 platí pro generátor pulzů, po nastavení režimu -5,-6,-7 platí pro krokový motor). Provede poloviční počet pulzů generátoru nebo zadaný počet kroků motoru. Není-li počet pulzů generátoru sudý, 2.pin dočasně setrvá ve stavu 1 !
POZOR při běhu generátoru nebo krokového motoru je pozastaven inkrementální čítač i komunikace s nadřízeným modulem. Na ukončení lze čekat např. pomocí:
čekej:    #4=APPEND(pin,adrd):BRANCH 0,čekej

2.8 Nápověda
    Stručná nápověda je dostupná v pruhu nabídek nebo klávesou F1. Pro rychlé nalezení instrukce lze umístit kurzor na hledané slovo a stisknout F1.

3 Nabídnuté podprogramy
    Slouží pro usnadnění stavby větších celků (uživatelské nabídky, čeština, záznam dat, atd.). Provádí se vkládáním souborů pomocí instrukce INCLUDE. Je při něm nutné volit jména konstant a návěští tak aby nedošlo k jejich opakování v celém programu. Pro předávání hodnot v nabídnutých podprogramech byly použity proměnné x1,x2 a x3, definované souborem start.prf nebo startm.prf.

3.1.Start.prf
       Obsahuje tyto podprogramy:
1. Česká diakritika (8 znaků použitelných pro výpis na displej)
2. Hlášení chyb vzniklých za běhu programu
3. Kalendář (sekundy až roky, jejich výpis a nastavení uživatelem)
4. Input (uživatelský zápis čísla pomocí tlačítek a displeje)
5. Aritmetické a datové doplňky:
    -5.a) DĚLENÍ DESETINNÝM ČÍSLEM (pro jemné ladění hodnoty, teplotní kompenzace a pod.)
    -5.b) VÝPIS DLOUHÉHO ČÍSLA (4B) NA DISPLEJ
    -5.c) VÝPIS ČISLA V BINÁRNÍM TVARU
    -5.d) VÝPIS ČÍSLA V HEXADECIMÁLNÍM TVARU
    -5.e) 3Bytové POČITADLO (0až 16 777 215) V EEPROM SE ZVÝŠENÍM ŽIVOTNOSTI
    -5.f) PŘENOS DAT DO PC
6. Převod podle grafu s rozsahem 2B (pro linearizaci průběhů)
7. Tvorba uživatelského menu (max.16 položek v každém menu a 4 úrovně vnoření do podmenu)

Soubor Start.prf musí být umístěn na začátku paměti! Definuje:
-Textové konstanty českých znaků á,č,é,ě,í,ř,ý,ž použitelné přímo v instrukci PRINT (nutná čeština editoru).
-Návěští
  diakr = pozice tabulky osmi znaků české diakitiky
  ediakr =prázdná tabulka znaků(inicializace bez natažení diakritiky:"DINIC ediakr")
  hod,den,denvt,měsíc,rok = umístění aktuálního času (použití: x=B(hod)...W(rok))
-Proměnné x1,x2,x3 -pro pomocné výpočty a k předávání parametrů ve všech nabídnutých podprogramech. Mimo tyto podprogramy je lze jakkoli využívat.

Popis použití, případně příklad, naleznete u každého podprogramu přímo v souboru "start.prf".

3.2.Startm.prf
    Je obdobou souboru "Start.prf" určeným pro modul PROFA-m který nemá displej a tlačítka. Chybu za běhu řeší novým startem, a obsahuje pouze hodnoty kalendáře hod,den,denvt,měsíc,rok a podprogram pro posun kalendáře a dělení desetinným číslem.

3.3 Zámek
    K zabránění okopírování případně poškození vašeho software lze použít tento podprogram, který vypne čtení 7.pinu po startu. Tím zamezí případnému natažení krátkého čtecího programu, a pod. Okopírování obsahu po odletování obvodu lze těžko zneužít -obsah je zakódován u každého modulu odlišně.
    ZÁMEK.PRF je nutné vložit ve zdrojovém textu vždy od adresy 0, ještě před podprogram START. Odblokování EERPROM lze provést odesláním hodnoty 155 do první proměnné při startu modulu (nabídka: nÁstroje / načíst Data / žádost do #8=155, -na ostatních hodnotách nezáleží).Načtení se nemusí povést na poprvé, je proto třeba vícekrát modul resetovat, dokud se neobjeví na displeji číselná hodnota.Ta signalizuje přepis dat EEPROM po jehož dokončení bude "čtení po startu" povoleno (na displeji se objeví "O.K.").


4.Instrukce displeje HD44780
    Instrukce se vkládají do displeje příkazem WRDI=kód instrukce. Po zapnutí napájení nebo po instrukci SLEEP je nutné provést inicializaci displeje viz program "start.prf".

 KÓD    Význam
  1         vymaže displej (totéž jako CLS)
  2         kurzor na začátek řádku
  4         posun kurzoru po zápisu znaku vlevo
  5         posun okna displeje po zápisu znaku vlevo
  6         posun kurzoru po zápisu znaku vpravo
  7         posun okna displeje po zápisu znaku vpravo
 12        vypne jakékoli značení kurzoru
 13        zapne označení kurzoru blikáním znaku
 14        zapne označení kurzoru podtržením
 15        zapne označení kurzoru blikáním znaku i podtržením
 16        posun kurzoru vlevo
 20        posun kurzoru vpravo
 24        posun okna displeje vpravo
 28        posun okna displeje vlevo
 64+x     nastavení adresy zápisu do tabulky znaků. x=0 až 63 (1znak=8Bytů)
128+x    nastavení pozice kurzoru. x=0 až 127