Conrad Szaküzlet, 1067 Budapest, VI., Teréz krt 23. Tel: 302 3588
C-Control/BASIC vezérlő komputer Rend.sz.: 950572
A garancia és az anyagi felelősség korlátozása A vezérlő komputert MC68HC05B6 mikroprocesszorral és beleépített maszkprogramozott ROM-mal, valamint a hozzátartozó PC szoftverrel szállítjuk. A Conrad Electronic nem garantálja, hogy a készülék teljesítőképessége minden egyéni igénynek megfelel és hogy a PC-szoftver szünetmentesen és hibamentesen fut. A Conrad Electronic garantálja a szállított alkalmazási példák működőképességét a specifikált értékhatárokon belül, ezen túlmenően a vevőt terhel minden garanciális költség, kivéve azokat, amelyek a törvények által megszabott általános szavatosság alá esnek. A Conrad Electronic garanciája a garanciális időn belül a CControl cseréjére vonatkozik, a nyilvánvaló hardver hibák esetében, mechanikus károsodásokra, hibás, hiányzó vagy tévesen elhelyezett elektronikus elemekre, kivéve a foglalatba helyezett integrált áramköröket és a jumpereket.
Rendeltetés A C-Control/BASIC vezérlő komputer életvédelmi törpefeszültségű elektromos vagy elektronikus készülékek programozható vezérlésére szolgál. Adattárolási és -átviteli funkciókkal rendelkezik. A készülékek beépíthetők bármely műszaki rendszerbe, amely nem gyógyászati, egészségügyi vagy életfenntartási felhasználási célt szolgál, illetve amelynek használatából személyeket vagy vagyontárgyakat érintő veszély nem keletkezhet. A vezérlőegység programozásához csak a vele együtt szállított PC-szoftver használható.
Az alkalmazási lehetőségek áttekintése Nyolc analóg bemenet, két analóg kimenet valamint 16, be- és kimenetként is szabadon programozható digitális port áll rendelkezésünkre, amelyekre érzékelőket, kapcsolókat, LEDeket, tranzisztorokat és reléket, stb. csatlakoztathatunk. Néhány soros BASIC programokkal számos feladatot (fűtésszabályozás, egyszerűbb robot vezérlés) meg tudunk oldani. A vezérlő komputeren bemenet áll rendelkezésre egy DCF77órajel vevő számára. Ezzel lehetséges kapcsolási feladatok másodperc pontosságú végrehajtása, valamint akár frekvenciamérés is.
Környezeti feltételek A C-Control megfelel a vonatkozó biztonsági szabványoknak (CE jelzés). Elektromos átütés ellen nincs védve, ezért erősáramú berendezésekben nem használható. A megadott maximális bemeneti értékeket nem szabad túllépni. Ne használjuk olyan helyiségekben, ahol tűzveszélyes, vagy maró hatású gázok, gőzök vagy porok vannak, vagy lehetnek jelen. Ha hidegből meleg helyiségbe vittük, várjunk a bekapcsolással az esetleges páralecsapódás kiszáradásáig. Kerüljük az erős mágneses mezőket, pl.: gépek, hangszórók környékét.
Tápfeszültség Valamennyi - a C-Controlhoz vezető vagy belőle kiinduló elektromos összeköttetést a hálózatra csatlakozás előtt kell létrehozni. A cél-alkalmazás egységeinek működés alatti rávagy lecsatlakoztatása a C-Control vagy a rákapcsolt egység károsodásához vezethet. A C-Controlt 5 V-os stabilizált egyenfeszültséggel kell ellátni. Ehhez csak bevizsgált laboratóriumi tápegységet, vagy stabilizált hálózati dugasztápegységet használjunk. Megfelelő feltöltés mellett 4 db NiCd-utántölthető akkuval is üzemeltethető. Szigorúan tilos a 230 V-os hálózati feszültség rákötése! Az áramforrást csak feszültségmentes körülmények között szabad rácsatlakoztatni. A hálózati egységnek a készülékre való csatlakoztatása előtt húzzuk ki a konnektorból a
tápegység hálózati csatlakozóját, vagy akkumulátorok esetében iktassunk be egy kapcsolót. A tápellátó vezetékek rövidzárlata tűzveszélyt jelent! Feltétlenül vegyük figyelembe a kapcsolási rajzot! A tápellátó vezeték hibás polaritású bekötése tönkreteheti a C-Controlot. A tápfeszültségnek futó alkalmazás esetén nem szabad megszakadni; lekapcsolása előtt reset-et kell végezni. Ha ez nem történik meg, a program sérülhet, és újból be kell vinni. Ha fennáll a veszélye a tápfeszültség kiesésének, figyelő áramkört kell alkalmazni (ld. német útm. 6. o.). Ajánlható a Texas TL 7757-es IC, mely a tápfeszültségnek 4,55V alá esésekor automatikus reset-et hajt végre.
Elektrosztatikus kisülések Szigetelt környezetben az emberi test is elektrosztatikusan feltöltődhet, ezért az elektronikus elemek érintése előtt egy földelt vezetőt (fűtési vezetéket, a PC burkolatát) megérintve vezessük le a töltést.
A C-Control/BASIC felépítése és működése Hardver Beültetési rajz (A 7. oldal ábrájának feliratai:) 1-es jelű hüvelyérintkezős csatlakozó 5 V tápfeszültség Dugós csatlakozóalj DCF77 aktívantenna csatlakoztatásához Rendszer beállító jumperek A soros interfész dugós csatlakozó aljzata TX=adó; RX=vevő Rendszer-jelző LED-ek 2-es jelű csatlakozó hüvelysor A rendszer lelke egy MC68HC05B6 MOTOROLA mikrokontroller. A C-Control egy negyed Európa kártya méretű nyomtatott áramkörre van felépítve. A mikrokontrolleren kívül ezen van egy memóriachip, a soros interfész (RS232) szintátalakító chipje, két rendszervezérlő nyomógomb, továbbá három rendszerállapot-jelző világító dióda (LED). A memóriachip 8 kilobájt kapacitású. Ez a felhasználói program befogadására szolgál, valamint adatok és események rögzítésére is felhasználható. Az EEPROM-ban a tápfeszültség kikapcsolása után is valamennyi információ megőrződik. Valamennyi be- és kimenet, továbbá egyes rendszerjelek két csatlakozó hüvelysoron érhetők el. Ezek útján csatlakozik a CControl a cél-alkalmazáshoz. Szoftver Az általunk írt BASIC programot a fordító (compiler) parancssorozatokká alakítja. Az egyes parancsok és a hozzájuk tartozó paraméter-bájtok átvitelre kerülnek a soros interfészen keresztül a C-Control-ba, ennek az operációs rendszere pedig elhelyezi őket az EEPROM memóriachipbe. A C-Control koncepció révén felhasználói programjaink igen tömörek lesznek. Ezáltal a memóriachipek kapacitásának legnagyobb része rendelkezésre áll adatrögzítés céljára. Az indítógomb megnyomása után az operációs rendszer elkezdi a memóriából a parancsokat egymásután beolvasni és végrehajtani, a vége parancs eléréséig. A PC és a C-Control/BASIC vezérlő közötti kommunikáció A PC és a C-Control közötti soros interfész kétirányú kommunikációra alkalmas. Rajta keresztül a felhasználói program programozásának parancskódjai mellett konfigurálási és vezérlési parancsok, továbbá státusz információk kerülnek átvitelre. Elvileg a PC és a C-Control között összeköttetésre csupán csak a programozás végett van szükség. Ezután már a vezérlő komputer beállítható a cél-alkalmazásba és ott önállóan működik. A PC-vel való kapcsolat azonban ezalatt is fennmaradhat, és felhasználható pl. mérési eredmények továbbítására. Kezelő- és kijelző szervek Nyomógombok • A piros Reset-gomb a C-Control és a rákötött egységek visszaállítására szolgál. Megnyomására valamennyi futó felhasználói program megszakad, a hardver és az operációs rendszer újra inicializálódik.
• A sárga start gombbal a C-Control-ba bevitt felhasználói programok lefuttatását indítjuk el.
LED-ek Három LED tájékoztat a C-Control státuszáról: • A zöld LED („DCF OK") a DCF77 óraidő jel adás megfelelő vételéről informál. Ha másodperces ütemben villog, akkor a DCF-aktívantenna megfelelően van a C-Controlra rákötve és a készülék veszi a rádió jeleket. Erősen rendszertelen villogás vételi zavarokra utal, ami az antenna jobb elhelyezésével, vagy irányba állításával kiküszöbölhető. Olvassuk el az antenna kezelési utasítását. Ha a zöld LED folyamatosan világít, jól vehető az időjel a belső óra számára. Ez akkor is tovább fut, kvarcvezérléssel, ha időszakosan zavarok fordulnak elő a rádióvételben. • A sárga LED („ACTIVE") a program futtatás alatt világít. Ez rendszerint a sárga Start gomb megnyomása után következik be. • A piros („RUN") LED a PC-ből a C-Controlba irányuló adatátvitel alatt - pl. egy program betöltésekor - világít. A futás során ugyanúgy világít, mint a sárga, de a PAUSE (ld. később) parancs végrehajtásakor kialszik; így a ciklusok működése a villogás segítségével követhető. Jumperek a rendszer konfigurálásához Három jumper található a panelen. A tűsorok, amelyekre a jumpereket feltesszük, jelzéssel vannak ellátva. • A LED jumper útján kapják a rendszer állapotát jelző LEDek a tápfeszültséget. Ha a jumper fel van téve, a LED-ek a rendszer állapotát a fent leírt módon mutatják. Ha lehúzzuk a jumpert, a LED-ek ki vannak iktatva. Ilyen módon jelentősen csökkenthető a C-Control energiafelvétele, amely akkumulátoros táplálás esetén két feltöltés között hosszabb üzemeltetési időszakokat enged meg. A LED jumper akár a C-Control működése alatt is feltehető vagy lehúzható. • A 232 jumper útján kapja a soros interfész szintátalakító chipje a tápfeszültséget. Ha fel van téve, a mikrokontroller soros interfészének CMOS-szintjét a szintátalakító chip az RS232-es szabványnak megfelelő pozitív ill. negatív feszültségre váltja át. Ez a feltétele annak, hogy a C-Controlt egy PC-hez csatlakoztathassuk. Ha a jumpert lehúzzuk, úgy a szintátalakítót kiiktatjuk, ezzel a C-Control soros interfésze deaktiválódik, és az áramfelvétel tovább csökken. • Az AST jumper párhuzamosan van kötve a Start gombbal, és autostart-ra használható. Ha fel van téve, közvetlenül a tápfeszültség bekapcsolása, vagy a reset-gomb megnyomása után az operációs rendszer elkezdi a program végrehajtását, úgy, mintha a Start-gombot nyomtuk volna meg. Külső elemek csatlakoztatása Valamennyi felhasználható port, valamint a C-Control néhány rendszer-jele a két húszpólusú hüvelyérintkezős csatlakozóra van kivezetve. A csatlakozó speciális kiképzésének köszönhetően a C-Control más elektronikai részegységre is feltehető, úgy hogy emellett a nyomógombok, a LED-ek, és a csatlakozó tűsorok hozzáférhetőek maradnak. A csatlakozó-kiosztást, valamint néhány kapcsolási példát a kezelési utasítás végén lehet megtalálni.
A digitális portok bekötése Mindegyik digitális port felhúzóellenállással van ellátva.
egy-egy
10
kiloohmos
Digitális portok használata bemenetként A digitális bemeneteket a kapcsolási állapot lekérdezésére lehet használni. Ha egy digitális portot bemenetként használunk, vezérlés nélkül az 1-es állapotban van. Ha például erre a portra egy Reed-relé van kötve, ennek nyitott állapotában a C-Control logikai egyest ("igaz") olvas le a portról, zárt állásban logikai nullát ("hamis"). Feltétlenül ügyeljünk arra, hogy függően a port bekötésétől és logikai kimenetétől - esetleg invertálásra lehet szükség (NOT operátor, ld. később).
Digitális portok használata kimenetként A kimenetként használt digitális portról közvetlenül működtethetők IC-k, tranzisztorok, vagy kisáramú LED-ek.
A maximálisan megengedett terhelő áram 10 mA. Minden esetben gondoskodni kell kielégítő áramkorlátozásról, például egy ellenállással, különben a mikrokontroller tönkremehet. A digitális port bemenetnek vagy kimenetnek való kötése a mikrokontrolleren belül megy végbe a felhasználói program első lefuttatása során. A tápfeszültség rákapcsolása vagy egy reset után a digitális portok elektromosan először bemenetként viselkednek, vagyis a felhúzó ellenálláson keresztül 1-et adnak.
Az analóg portok bekötése Nyolc A/D port és két A/D-átalakító van.
A referencia feszültség bekötése Az A/D bemenetek használatba vétele előtt referencia feszültséget kell a C-Control referencia-feszültség bemenetére kötnünk. A rákötött feszültségérték az A/D átalakítás mérési tartományának felső értékét jelenti és megfelel a 255 ($FF hexadecimális) átalakítási értéknek. Az alkalmazott érték az A/D bemeneteknél felhasznált érzékelők kimeneti feszültségtartományától függ. Rendszerint közvetlenül a tápfeszültség is alkalmazható referenciaként. A referencia feszültség értéke az 5 voltos tápfeszültséget soha nem lépheti túl! Az A/D átalakítási tartomány alsó szélének referenciaértéke a tápfeszültség földpotenciálja (test, "mínusz").
Az A/D bemenetek felhasználása A vezérlő komputer panelen az A/D portok - a mikrokontrollerben lévő A/D átalakítók védelmére - egy 10 kiloohmos előtét ellenállással vannak ellátva. Az A/D portokra bármilyen fajtájú érzékelő ráköthető, amely 0 5 V kimeneti feszültséget ad. Itt leggyakrabban aktív szenzorok kerülnek alkalmazásra, a tényleges érzékelést végző elemből jövő jel erősítésére és a felbontási, linearitási és drift-viselkedéssel kapcsolatos követelmények kielégítésére.
A D/A kimenetek használata A két 8-bites D/A átalakító az impulzusszélesség moduláció elvén működik. Egy 256 rész-időszakaszból álló időszakasz (modulációs intervallum) alatt egy D/A kimenet olyan számú részidőszak idejére megy magasba, amennyi a kimenetként meghatározott 8 bites értéknek megfelel. Egy részidőszak időtartama 2µs, a teljes modulációs intervallumé pedig 512µs (1953Hz). A demodulációhoz, vagyis egy valódi analóg jellé történő alakításhoz általában elégséges egy egyszerű RC-tag. Vegyük azonban figyelembe a maradék hullámosságot és a kimenő jel elérhető maximális értékét. Mindkettő az RC-tag után következő terheléstől függ.
DCF77-aktívantenna csatlakoztatása Az antennát az e célra szánt hárompólusú tűsor (J3) segítségével csatlakoztathatjuk, vagy egy speciális porton keresztül, a két csatlakozó hüvelysor egyikén. A hárompólusú csatlakozó biztosítja az aktívantenna áramellátását is (5V, test) és veszi az antennáról (DCF77) jövő impulzus-jeleket. Ehhez az antennának a testhez nyitott kollektoros kimenete kell legyen, amelyet a vett jel kapcsol (low kapcs.). Az aktív antenna csatlakoztatásához feltétlenül árnyékolt kábelt kell használnunk, mivel egyébként - különösen nagyobb kábelhosszak esetében - zavaró impulzusok vételének veszélye áll fenn. A DCF77 antennával üzemelő C-Control időjel vételi státuszáról a zöld LED informál.
A rendszerjel port bekötése A két csatlakozó hüvelysoron az analóg- és a digitális portokon kívül rendelkezésre állnak a kezelő- és kijelző szervek rendszerjelei is. Így külső elemcsoportok is resetelhetők és indíthatók, vagy kiváltható a resetelésük és az indításuk, vagy a LED jelek felhasználhatók további kijelzésekre vagy szinkronizálási célokra. Valamennyi jel low-active (null-aktív).
Rendszer erőforrások Erőforrásnak nevezzük az olyan belső működési egységeket, melyek nem vezethetők le közvetlenül a mikrokontroller tulajdonságaiból, hanem a chipre maszkprogramozott vezérlő rendszeren keresztül állnak rendelkezésre. A hozzáférést a BASIC programozásnál ismertetjük. 2
Timer (időzítő) Az operációs rendszer hátterében egy 20ms-os jellel vezérelt 16 bites timer fut, melyet bármikor ki lehet olvasni, és felhasználni a BASIC programban időzítésre.
Valósidejű óra A DCF-77 idő- és dátum jelet a rendszer hét belső tárolócellába teszi (év, hó, nap, a hét napja, óra, perc, másodperc), és 20ms-onként továbblépteti a következő szinkronizációig. A hosszúidejű pontosságot két szinkronizáció között a belső 4MHz-es kvarc max. 0,1 promille gyártási szórása és hőfüggése határozza meg. Ez max. óránként 0,36s. A tápfeszültség bekapcsolása és resetelés után az óra 01.01.97, 00:00:00 órára áll. A dátum és idő tárak BASIC-ből is programozhatók, ha nincs DCF vétel. Kisebb pontossági igény esetén, vagy próbafuttatásnál a DCF antenna elhagyható.
Felhasználói bájtok A mikrokontrollernek 240 bájtos RAM-ja van. A C-Control vezérlő ebből a legtöbbet operációs rendszer funkciókra (stack [veremtár], timer, óra, DCF-77 adatpuffer, interfész puffer, átmeneti tár a számolási műveletekhez stb.) használja. 24bájt áll rendelkezésre a felhasználói BASIC programok változóihoz, ld. később a DEFINE parancsnál.
Első üzembe helyezés - lépésről lépésre Szoftver installálás Ehhez tanulmányozza az INSTALL.TXT fájlt.
Tápellátás biztosítása Az 5 V-os (ill. a Starter boardnál 8…12V-os) egyenfeszültséget csupaszított kábelvégeken át lehet csatlakoztatni. Ellenőrizzük, hogy a két kábelvég közül melyik a test ("mínusz") és melyik a feszültség alatti ér. Kapcsoljuk ki a tápforrás áramellátását, és kössük be helyes polaritással a kábelvégeket a C-Control kétpólusú J8 kábelszorítójába ill. a Starter board J5 pontjaira. Vegyük figyelembe a kapcsolási rajzot és a J8 kábelszorító polaritás (+,-) jelöléseit.
A C-Control és a PC összekötése A C-Controltal együtt két interfész kábelt is szállítunk: egy 9pólusú nullmodem kábelt (kb. 1,5 m hosszút) és egy adapterkábelt (kb. 30 cm hosszút). Csatlakoztassuk a nullmodemkábelt a számítógép egyik szabad soros interfészéhez. Sok számítógépnek egy 9-pólusú és egy 25pólusú soros interfésze van. Amennyiben számítógépén már csak a 25-pólusú interfész a szabad, úgy egy külön adapterre is szükség lesz. Kösse össze a nullmodemkábelt az adapterkábellel. Dugja az adapterkábel végén lévő 10-pólusú összekötőt pólushelyesen a C-Control csatlakozólécére. Vegye figyelembe a kapcsolási rajzot, az adapterkábelen lévő piros jelölést és a csatlakozóléc 1. sz. tűjének megjelölését. Az adapterkábelt úgy kell feltenni, hogy a piros jelölés az 1. érintkező felé mutasson.
Példa-program készítés és futtatás Kapcsolja be a tápfeszültséget. Az MS-DOS parancssorból hívja a beépített CCE.EXE standard, menüvel és egérrel ellátott kezelőfelületet BASIC forráskód bevitelére (editor), fordításra (compiler), valamint a C-Control kódok vezérlő komputerbe való betöltésére (lader). Az “Optionen” menüpontból állítsa be, melyik soros porton keresztül (COM1, COM2...) van a C-Control rendszer összekötve a PC-vel. Adja be az editor ablakból a következő CCBASIC szöveget: #nochmal [=újra, “repeat”] PRINT “Hallo!” PAUSE 50 GOTO nochmal Tárolja el a programot TEST1.BAS néven. Válassza az “Entwicklung” [fejlesztés] menüből a “BASIC-compiler” parancsot a program lefordításához. Figyelje a “meldungen” [üzenetek] ablakot, ahol a fordítás folyamata és sikere, ill. az esetleges forrásszöveg hiba jelzése követhető. Sikeres végrehajtás után válassza a Lader (betöltés) parancsot, amire a lefordított kód áttöltődik a C-Control
vezérlőbe. Itt is figyelje az üzenő ablakot. A sikeres betöltés után az “Entwicklung”-ból hívja a Miniterminal parancsot. Ez elindít egy külső programot, amely átveszi a további kommunikációt a C-Control rendszerrel. Most nyomja meg a Control egységen a sárga gombot. A sárga LED jelzi, hogy a C-Control a program futtatás állapotában van. A program a “Hallo” üzenetet íratja ki a PC soros interfészén keresztül. Itt a Miniterminal veszi a szöveget, és kijelzi. Rövid szünet után a tesztprogram ismét lefut. Végtelen ciklus áll elő, melyet csak reseteléssel lehet megállítani. A legtöbb C-Control alkalmazás ezen elv szerint működik. A vezérlő komputeren a piros reset gomb megnyomása után az ESC gombbal lehet a Miniterminal-t befejezni. Ezután elkezdheti módosítgatni a tesztprogramot, és összeállíthat saját kísérleti kapcsolásokat a C-Control számára, vagy használhatja a készletben vagy külön kapható C-Control-Starterboardot (rend.sz. 121037)
Programozás CCBASIC-ben A CCBASIC a C-Control számára kidolgozott Basic programvariáns. Szintaxisa nagyjából megfelel a standard nyelvének, de néhány parancs kifejezetten az itteni hardverhaz illeszkedik. A Basic ún. forrásszöveg sorokból áll, melyek egy vagy több számolási vagy vezérlési utasítást tartalmaznak. A végrehajtás a sorok egymás utáni sorrendje szerint történik. Adott célú programutasítások sorozatát algoritmusnak is nevezik.
Adattípusok A C-Control csak 1, 8 vagy 16 bit hosszúságú egész számokat (“Integer”) tud feldolgozni ill. tárolni. Egy 8 bites változó (byte) a 0…255 közti nemnegatív értékeket veheti fel; a 16 bites (szó) pedig -32768…+32767 lehet. Ügyeljen, nehogy ehhez képest “túlcsordulás” lépjen fel - pl. az a=255+1 művelet eredménye 256 helyett 0 lesz, ha az a csak egy byte-t reprezentál, az a=-32768-1 pedig -32769 helyett 32767 lesz, ha az a egy szót (=2 byte) reprezentál.
A CCBASIC alapelemei Általános Minden programsor egy vagy több utasítást tartalmaz, melyek kettősponttal vannak elválasztva. A régebbi Basic-től eltérően sorszámozásra nincs szükség. Ha mégis adunk sorszámot, ezt ugró utasításhoz lehet használni. A sorszámok nincsenek hatással a végrehajtás sorrendjére, az a sorok “fizikai” sorrendje szerint történik. A megértés könnyítésére kommentet (megjegyzés) lehet a programba írni. A CCBASIC-ben ezt aposztroffal (‘) kell kezdeni, ami jelzi, hogy a sor további része nem tartozik a programhoz.
Azonosítók Betűkből és számokból állhatnak, és objektumokat, úgymint változók és konstansok, jelölhetnek. A címke nevek és az ún. “rezervált szavak” is azonosítók. A nagy- és kisbetűk között nincsen különbség. Az azonosító betűvel vagy aláhúzással kezdődhet, és üres karaktert nem tartalmazhat.
Változók és konstansok Ezek az információ feldolgozás tárgyai. A CCBASIC-ben mindkettő numerikus érték, csak a konstans a program folyamán nem változik. A konstansokat a CCBASIC-ben decimális, hexadecimális és bináris alakban lehet megadni. Példa hexadecimális és bináris szintaxisra, 46-os szám: &H2E ill. &B101110. Ezenkívül DEFINE sorokkal (ld. alább) szimbolikus konstansok is megadhatók. A változókra azonosítójukkal lehet hivatkozni, melyet az első használat előtt DEFINE sorral meg kell adni.
Címkék A program adott pontjainak megjelölésére valók. Algoritmusban az ugró utasítás célpontját jelölik. A CCBASICben a sor elején állnak, és kettős kereszttel kezdődnek, amit szóköz nélkül követ a címke (“label”) neve. Példa címkére és ugrásra: #label1 … 3
GOTO label1
Kifejezések Ezek vagy közvetlenül adhatók meg (változóként vagy konstansként), vagy egy meghatározott érték kiszámításával. Az utasítások részét képezik, és például amikor változónak értéket adunk, az egyenlőségjeltől balra állnak. Operandusok és operátorok kombinációjával állíthatók elő. Példák: 1000 c a+b (ABS(x)-13)*10
Operandusok és operátorok Az operandus alapvetően konstans, változó vagy függvény hívás, de lehet maga is operandusok és operátorok segítségével összeállított kifejezés. Az operátorok számítási műveleteket jelentenek, melyeket a környező operandusokon kell végrehajtani. Meghatározott elsőbbségi sorrendjük van (precedencia), ld. később.
Függvények Meghatározott műveletet, pl. számítást hajtanak végre, és eredményül egy számot adnak. Többnyire egy vagy több argumentumuk (függő változó) van, melyek kerek zárójelek között szerepelnek, és vesszővel vannak elválasztva. Az argumentum nélküli függvénynél nincs kerek zárójel. Példák: ABS(x) MAX(a,b) RAND EOF A CCBASIC-ben minden támogatott függvény előre definiált, azonosítójuk a fenntartott szavak közé tartozik. A felhasználó nem definiálhat függvényeket.
Értékadás Ez a legegyszerűbb utasításforma. Azon változó azonosítója után, melynek értéket akarunk adni, hozzárendelő egyenlőségjelet kell tenni, majd az értéket előállító kifejezés következik, vagyis egy egyszerű matematikai képlet. a = 10 b=x-y c = SQR (a*a + b*b)
Parancsok Az egyszerű értékadások mellett parancs hozzárendelések is vannak a CCBASIC-ben. Ezek fenntartott szóval kezdődnek. Egyesekhez egy vagy több paraméter is szükséges. A paramétereket a parancs azonosító és egy szóköz után lehet megadni, és vesszővel kell elválasztani. (Kivéve a Print [nyomtatás], ld. később.) Kerek zárójel nem kell hozzájuk! RANDOMIZE PAUSE 100 BEEP 440, 50, 50
A progmafutást vezérlő utasítások Ezek a végrehajtás sorrendjét befolyásolják, az információ feldolgozó folyamat bemenő értékeitől függően. Nagy rugalmasságot biztosítanak az algoritmus készítésnél. Egy vagy több fenntartott szóból állnak, és egyéb adatokat is igényelhetnek. GOTO label1 IF a
NEXT
Utasítások a fordítóprogramhoz A CCBASIC forrásszöveg a programutasítások mellett compiler (fordítási) utasításokat is tartalmazhat, pl. adatblokkok (táblázat) készítésére, változók vagy konstansok definiálására. Egy sorban csak egy ilyen utasítás lehet, nem lehet kettősponttal elválasztva többet megadni.
A DEFINE utasítás Ez egy compiler utasítás.
Szimbolikus konstansok definiálása Áttekinthetőbbé teszi a programot, ha számokra való hivatkozás helyett jellemző neveket adunk, pl. “if x <1234”
helyett a névre hivatkozunk. Még jobb a konstansokat globálisként definiálni. Szimbolikus konstans definiálás: DEFINE azonosító érték Az érték decimális, hexadecimális vagy bináris szám lehet. A fenti példában: DEFINE limit 1234 … if x < limit then goto alarm
Változók definiálása A CCBASIC 24 bájtot biztosít RAM-jában a felhasználói program változói számára. Bitenként vagy 16bites egészként (szó) is használhatók. A standard Basic-től eltérően a CCBASIC-ben minden változót definiálni kell az első használatbavételük előtt. Meg kell adni az adattípust (bit, bájt vagy szó (word)), valamint megadható a tárcella száma (bitnél kötelező megadni). A felhasználónak kell figyelni arra, hogy ne legyen átfedés a foglalások között, különben felülírások fordulhatnak elő. Például a bit[18], byte[2], word[1] egyidejű megadásával a 2-es cella egy részét közösen használnánk. Bit változó megadás: DEFINE azonosító BIT[szám] A szám 1…192 lehet (24 bájt egyenként 8 bittel). Bájt változó megadás cellaszámmal: DEFINE azonosító BYTE[szám] A szám 1…24 lehet (24 bájt). Egész változó megadás cellaszámmal: DEFINE azonosító WORD[szám] A szám 1…12 lehet (1 szó = 2 bájt). Ha a bájt- és szó definiálásnál a cella (szám) megadás elmarad, a compiler végzi el a tár felosztását. lehetőleg ne váltogassuk a bájt és szó megadásokat, mert ez rossz tárhely kihasználáshoz vezethet. A compiler az 1-essel kezdi a hozzárendelést. Egy már korábban definiált változó azonosítót nem szabad másodszor is definiálni. Digitális portok definiálása A CCBASIC-ben a portokra változóként kell hivatkozni. A portokat is előre definiálni kell. Egyes port definiálása: DEFINE azonosító PORT[szám] A szám 1…16 lehet. 8 bit terjedelmű digitális port definiálása: DEFINE azonosító BYTEPORT[szám] A szám 1…2 lehet. (1…8 és 9…16 bájtportok) Azonosító definiálása úgy, hogy egyetlen 16 bites portként kezelhessük a 16 portot: DEFINE azonosító WORDPORT[szám] A szám 1 lehet.
Analóg portok definiálása Egyes port definiálása a 8 A/D portból: DEFINE azonosító AD[szám] A szám 1…8 lehet. A 2 D/A port egyikének definiálása: DEFINE azonosító DA[szám] A szám 1…2 lehet.
Az utasítások áttekintése Matematikai és logikai operátorok • alapműveletek: + - * / • modulo operátor: egész osztás maradékát adja Pl. a = 10 MOD 3 eredménye 1. • összehasonlítások: >, <, >=, <=, =, <>(nem egyenlő) Az összehasonlítás eredménye -1 ill. 255 (igaz) vagy 0 (nem igaz). Pl. a = 10 < 3 eredménye 0. • logikai operátorok: NOT, AND, NAND, OR, NOR, XOR (negálás, és kapcsolat, és kapcs. + negálás, vagy kapcsolat, vagy kapcsolat negálással, kizáró vagy). 4
A logikai operátorokat feltételek megadására valamint bináris bájt- és szómanipulációra lehet használni. • eltolási operátorok: SHL, SHR Bit-minták bitenkénti balra- vagy jobbra tolására szolgálnak, bájt- vagy szó változóknál. Az operátortól balra áll az eltolandó érték, jobboldalt a szám, ahány bittel el kell tolni. A balra tolás 2-vel való szorzás, a jobbra tolás osztás. Pl. a = 10 shl 3 a = 10 * 2 * 2 * 2, az eredmény 80.
Matematikai függvények és parancsok Az x és y argumentumok mindig kifejezések (ld. fentebb). • SQR(x): x négyzetgyökének közelítése; a tizedesek le lesznek vágva. • SGN(x): 1, ha x pozitív, -1, ha x negatív, 0, ha x=0. • MAX(x,y): =x, ha x nagyobb, egyébként y. • MIN(x,y): =x, ha x kisebb, egyébként y. • RANDOMIZE x: x-szel kezdve belső pszeudo véletlen generátort indít. Ugyanazon számtól indítva ugyanazt a számsort kapjuk. A RANDOMIZE TIMER speciális forma a generátorba a szabadonfutó időzítő (timer) aktuális értékét tölti be indításul. • A RAND véletlen függvény a pszeudo véletlen generátor következő egész értékét szolgáltatja. A véletlen számok a multiplikatív eljárás és az azt követő modulo osztás szerint képződnek a mindenkori megelőző értékből (ld. egy jobb matematikai szakkönyvben). Operátorok és függvények precedenciája (rangsorrendje) A kifejezések a hagyományos műveleti rangsorrendben lesznek számítva, egyenrangú esetben pedig balról jobbra haladva. A sorrendet zárójelezéssel lehet módosítani. A CCBASIC-ben a zárójelezési mélység legfeljebb 3. Az áttekinthetőség érdekében javasoljuk a sok zárójel helyett inkább több programsor használatát. Precedencia a CCBASIC -ben Rang Operátor 9 () 8 függvényhívás 7 negatív előjel 6 * / MOD SHL SHR 5 +4 > >= < <= = <> 3 NOT 2 AND NAND 1 OR NOR XOR
A program futását vezérlő utasítások • Ciklus FOR változó = kezdet TO vég STEP lépésnagyság …
NEXT A FOR-ciklus addig hajtatja végre a NEXT-ig szereplő utasításokat, míg a változó el nem éri a vége kifejezés értékét. Az első futtatás előtt a kezdet kifejezés értéke ki lesz számítva, és hozzárendelve a lépésnagysághoz. Minden lefutáskor a lépés a ciklusváltozó értékével nő. A FOR változó = kezdet TO vég …
NEXT formánál a lépésnagyság 1. A zárókifejezés és a lépésnagyság kifejezés minden lefutáskor újra számítódik. A FOR ciklusok egymásba ágyazhatók, ennek mélységét csak a ciklusváltozó számára rendelkezésre álló memória korlátozza. A programfutás során minden FOR ciklus csak saját NEXTutasításával futhat (pl. nem lehet ugrással más NEXT-hez küldeni). Egy ilyen program ugyan lefordul és betöltődik, de az eredmény kétséges. Ügyelni kell a ciklusváltozó és a zárókifejezés megengedett értéktartományára is, mivel ennek túllépésekor 0-ról indulhat újra, és végtelen ciklus állhat elő.
• Feltételes végrehajtás IF feltétel THEN utasítás 1 vagy IF feltétel THEN utasítás 1 ELSE utasítás 2 Az IF-THEN-ELSE szerkezet lehetővé teszi a programvégrehajtás illesztését a futás során előálló feltételekhez. Az első esetben a feltétel egy tetszőleges kifejezés; ha ennek értéke nem 0, a feltétel teljesültnek van tekintve, és az 1-es utasítás lesz végrehajtva. Ha ELSE-el egy második utasítást is hozzáfűzünk, akkor a feltétel kifejezés 0 értéke esetén a második utasítás lesz végrehajtva. Az IF-THEN-ELSE szerkezet egyetlen forrássorban kell álljon. THEN és ELSE után nem következhet utasításblokk (több utasítás). • Ugró utasítás GOTO címke A program tetszőleges, címkével jelölt helyétől lehet folytatni a futást. A cél a GOTO előtt is lehet. • Szubrutin hívás és visszatérés GOSUB címke Itt a címke a szubrutin kezdőpontja. Az ún. szubrutinokban programrészek vannak összefogva, melyeket a programfutás során többször ugyanúgy kell végrehajtani. Címkével kezdődik, majd az utasítások sorozata következik, végül a lezárás (RETURN). A RETURN után a program a GOSUB után következő utasítással folytatódk. Minden RETURN-höz egy megelőző GOSUB-nak kell tartozni. Szubrutin hívásnál az egymásba ágyazás megengedett legnagyobb mélysége 4. • Értékvezérelt programelágazás ON változó GOTO címke0, címke1, ...címken ON változó GOSUB címke0, címke1, ...címken A szelektáló változó értékétől függően programelágazás vagy szubrutin hívás következhet 0 értéknél a 0-ás címkéhez stb. ugorva. Ha a változó értéke negatív, vagy nagyobb a felsorolt ugrási célpontoknál, nem történik programelágazás. • Program vége END Ha a komputer a végrehajtás során egy END utasításhoz ér, a program végrehajtás befejeződik, a rendszer inaktív állapotba kerül. Ekkor újabb felhasználói program vihető át, vagy a start gombbal újra lehet indítani a programot. • Várakozási utasítás WAIT feltételkifejezés Megszakítja a futást, amíg a feltétel kiszámítása nem adja ki a 0-tól különböző eredményt. Pl. define key port[9] … WAIT key Itt addig tart a várakozás, míg a 9-es digitális port logikai 1-est nem olvas. A PAUSE parancs meghatározott időre állítja le a programot. A paraméter kifejezéssel 20ms-ot megszorozva kapjuk a várakozási időt, pl. a PAUSE 50 egy másodpercet jelent. A legnagyobb eltérés a valóságos szünetidő és a megadott érték között eszerint +/-20ms lehet.
Kommunikáció a soros interfészen keresztül • Adat kivitel Az adatok a CControl vezérlő soros interfészén át szöveges formában mennek ki. Ha ide interfész kábelen keresztül PC-t kötünk, amelynek terminál programja van, a kiadott adatok megjeleníthetők. A PRINT kifejezés hatására megjelenik a kifejezés kiszámított értéke; PRINT ”szöveg” hatására megjelenik az idézőjelek közötti szöveg. Mindkét esetben soremelés jel adódik az átvitelhez, melynek hatására a terminál program új sorba írja a képernyőn a következő kimenő adatot. A soremelés úgy ikatatható ki, hogy 5
a Print parancsot követő kifejezés vagy szöveg végére pontosvesszőt teszünk, pl.: PRINT ”szöveg”; A CCBASIC több adat kivitelét is támogatja egy Print parancs alatt. Az egyes paramétereket vesszővel vagy pontosvesszővel kell elválasztani. A vessző hatására tabulátor kerül a kimenő adatba, ami a képernyőn hosszabb szóközként jelenik meg. Ha két kimenő adatnak köz nélkül kell egymést követni, akkor a Print parancsban pontosvesszővel kell őket elválasztani: PRINT ”a= ”, a PRINT ”a= ”; a Egyetlen Print parancs paraméter nélkül soremelést eredményez. PRINT • Adat bevitel Az INPUT változó paranccsal egész értéket tud a soros interfész beolvasni, és további feldolgozásra eltárolni. Az értéket terminál programmal lehet PC-be vinni, és innen az enter megnyomása után interfész kábelen át kerül a CControlba. Az Input parancs addig vár, amíg a terminál nem vett egy komplett adatátvitelt. Ha az Input parancsot rákövetkező adatátvitel nélkül hívjuk, a program végtelen időre ebben az állapotban marad, és csak resettel valamint újraindítással lehet ismét használni! • Bájtsoros kommunikáció a soros interfészen A Print és Input rövid karaktersorozatokat továbbít ill. fogad. Kívánatos lehet egyes bájtokat sorosan átvinni. Erre szolgál a CCBASIC PUT és GET parancsa. A PUT kifejezés a kifejezés kiszámított értékét küldi el. Szükség esetén a 0…255 bájt értéktartományra redukálja. A GET változó sorosan fogadott bájtra vár, és az értéket a megadott változókba tárolja. • További interfész parancsok és funkciók Az Input és Get parancsok adott esetben vég nélkül várnak a soros adatra. Ha el akarjuk kerülni a program “kiakadását”, minden Input és Get előtt meg lehet vizsgálni az RXD státus függvény behívásával, hogy van-e továbbítandó adat. Ha van, a függvény értéke -1. Ha az interfész puffer üres, az eredmény 0. …
If RXD then GET thebyte …
A soros interfész beállított adó- és vevő átviteli sebessége 9600 baud. Ezt a BAUD paranccsal meg lehet változtatni, a program által rögzített (1200, 2400, 4800, 9600) vagy egyéb értékre: BAUD R2400 hatására az adó és vevő 2400 bit/s-ra áll. Az adó és vevő sebessége nem kell azonos legyen. A soros interfész átviteli sebessége a CControl mikroprocesszor belső ütemadójából van származtatva. A Baud parancsnak átadandó bájt érték tartalmazza a szükséges Nxx osztási értéket. b7 b6 b5 b4 b3 b2 b1 b0 NP1 NP0 NT2 NT1 NT0 NR2 NR1 NR0 A 7-es és 6-os bit az adó és vevő számára közös NP előosztó. Az NP értéke 1, 3, 4 és 13 lehet. NP1 és NP0 szükséges beállításai: Előosztó NP1 NP0 1 0 0 3 0 1 4 1 0 13 1 1 A 3 és 5 NT bitek valamint a 0…2 NR bitek további osztó értékeket határoznak meg, külön az adóra (NT) ill. a vevőre (NR), a következő kódolás szeint: Osztó NT2 ill. NR2 NT1 ill. NR1 NT2ill. NR2
1 0 0 0 2 0 0 1 4 0 1 0 8 0 1 1 16 1 0 0 32 1 0 1 64 1 1 0 128 1 1 1 Az adó átviteli sebességének számítása: 12500/(NP * NT) A vevőé: 12500/(NP * NR) [T=transmitter, R=receiver] A további interfész paraméterek - 8 adatbit; paritásbit nincs; 1 stop bit - rögzítettek, nem változtathatók. A CCBASIC komputerben az adott alkalmazásnál a handshake jel (RTS, CTS) csatornák nincsenek használva, a programból nem lehet rájuk hivatkozni. Fájl használat Mérési eredményeket vagy egyéb adatokat rögzíthetünk, melyeket tápfeszültség kimaradás után vissza kell tölteni mint programváltozót. Erre a célra az EEPROM chipnek a felhasználói program után következő - többnyire nagyobbik része áll rendelkezésre. A memória tartomány fájlként lesz kezelve, mely a megfelelő attributummal való megnyitással írás és olvasás céljára hozzáférhető. OPEN# FOR WRITE OPEN# FOR APPEND OPEN# FOR READ (megnyitás (felül)íráshoz, hozzáíráshoz, olvasáshoz). Csak egész értékeket lehet beírni vagy kiolvasni. Mindegyik érték két bájtot foglal az EEPROM-ban. Írás ill. olvasás parancsok: PRINT# kifejezés ill. INPUT# változó A fájl beírása és kiolvasása szigorúan sorban történik. Ehhez egy belső fájmutató értéke minden hozzáfordulás után 1-gyel meg lesz növelve. Beírás előtt mindig ellenőrizni kell, van-e elég hely a memóriában, a FILEFREE paranccsal. Ez a szabad tár mennyiségét adja eredményül. Olvasás előtt ellenőrizni kell, hogy van- e még rögzített adat, az EOF (end of file) paranccsal. Ennek eredménye -1, ha nincs a fájlban több hozzáférhető adat, egyébként 0. A fájlkezelés befejezése után a fájlt azonnal be kell zárni (CLOSE# parancs, paraméter nélküli).
Portkezelő parancsok • Átkapcsolás parancs (TOG) Elvileg a komputer portjaihoz változóként lehet hozzáférni. Digitális port be- ill. kikapcsolása: P=1 ill. P=0 A be- ill. kikapcsolás váltogatása: P = NOT P vagy TOG P A TOG (angol toggle-ból (váltogat)) kevesebb memórát igényel, és gyorsabb. TOG-nál a P port változó csak egyes (ld. korábban) digitális portot jelenthet, nem bájt- vagy szó portot. • Port deaktiválás (DEACT) Amint egy port változóhoz első ízben értéket rendelünk, a komputer a processzorban a hozzátartozó hardver struktúrát (tranzisztorok) kimenet állapotba kapcsolja, tehát a csatlakoztatott áramkörnek megfelelően folyik az áram ki vagy be a processzornál (max. 10mA!). A DEACT portvar parancs deaktiválja az adott portot, vagyis nagyohmos állapotba teszi, így az bemenetként működhet. A parancsot egybites digitális portokra vagy bájt portokra lehet alkalmazni. 6
• A PULSE parancs PULSE portvar parancs hatására a kjelölt porton néhány ms-os pulzus megy ki. Ez hasznos lehet pl. külső élvezérelt logikai áramkörökhöz. Ha a parancsot megelőzően a port alacsony (LOW, 0) szinten van, High-pulzus (0-1-0) jön létre, egyébként low pulzus (1-01). PULSE-nál a P port változó csak egybites digitális portot jelenthet, bájt- vagy szó portot nem.
Adattáblázatok definiálása és használata A standard Basic-ben a DATA sorok szolgálnak konstans adatblokkok készítésére, ahol az adatokhoz egymás után hozzá lehet férni. A CCBASIC nem támogatja a DATA sorokat, hanem más rugalmas lehetőséget kínál az adatblokk hozzáféréshez. A konstans adatokat táblázat formájában lehet eltenni. A táblázatok nevet kapnak, és annyi adat tehető bele, amennyit csak enged a memória. A bevitelek (Cx) egészként lesznek letéve, és két bájtot foglalnak. Az adatok közvetlenül megjeleníthetők a forrásszövegben TABLE tablename C0 C1… …Cn TABEND vagy pedig a CCBASIC compilerrel importálható külső szövegfájlból TABLE tablename “tabfilename” Az adattáblázat definícióknak a program végén kell lenni, az END parancs után, mivel az adatok közvetlenül az EEPROMban levő kódbájtok után következnek, és különben esetleg parancsnak is lehetne őket értelmezni. Adattáblázathoz való hozzáférés: LOOKTAB parancs. LOOKTAB táblázatnév, index, változó A név egy érvényes táblázatnév, az index tetszőleges kifejezés lehet, a változó pedig a memória cella, ahova az eredménynek kerülnie kell. Az index értéke nem lehet negatív, és max. N-1-ig terjedhet, ha a táblázatnak N eleme van. Ha az index 0, C0 kerül a változóba, stb. A táblázatok különösen jól használhatók az A/D értékeknek fzikai mennyiségekké való alakításában. Az átváltó táblázatnak rendesen 256 eleme van. A mért A/D érték táblázat indexként szerepel a fizikai mennyiség meghatározásában.
Hozzáférés a valósidejű órához A belső óra olvasásához és állításához szolgáló parancsok: év (0…99) YEAR hó (1…12) MONTH a hó napja (1…31) DAY a hét napja (0=vas., …6=szo) DOW óra (0…23) HOUR perc (0…59) MINUTE másodperc (0…59) SECOND Figyelni kell arra, hogy a hozzáférés során az óra tovább fut, ezért először a másodpercet kell kiolvasni. Ha 59-en áll, a teljes kiolvasás (mikor már az év is megvan) után újra ellenőrizni kell, nem áll- e 0-n. Ebben az esetben a kiolvasást meg kell ismételni, mivel éppen egy perc váltásnál voltunk. (Ez tovább is gyűrűzhet, szélsőséges eset a Szilveszter-nap.) A CControl az évet csak két jeggyel tárolja, az 1999-2000 átmenet 99-0 átmenetet jelent.
Timer A belső 20ms-os órát az előre definiált TIMER azonosítóval lehet kiolvasni. Szabadonfutó, módosítani, visszaállítani nem lehet.
Egyéb parancsok • Hangjelzés (BEEP) A CControlnak van egy kivezetése, a BEEP (a processzor TCMP1 kimenetének felel meg), amely négyszögjel alakú rezgést tud kiadni. Parancs: BEEP hang, thang, tszünet A paraméterek konstansok vagy kifejezések lehetnek. A hang magasságát a hang=2500/frekv.(Hz)
képlet adja, thang a hangjelzés időtartama, tszünet a jelzés után következő szünet. Ha következő jelzést nem kívánunk, ennek értéke 0 lehet. Ha a jelzés hosszára adunk meg 0-t, folyamatos hangjelzést kapunk. A hanggenerátor bekapcsol, és folytatódik a Basic program feldolgozása. Amikor a hang érték 0, a generátor kikapcsol. • Frekvenciamérés (FREQ) Ha a DCF-77 bemenetre nincsen aktív antenna kötve, alternatívaként frekvencia mérésére használhatjuk. Az eredmény tetszőleges időben való lekérdezésére szolgál a FREQ parancs. x = FREQ A mérés 1s kapuidővel történő pulzusszámláláson alapul, és a háttérben zajlik, a Basic program futásával párhuzamosan. A mérési tartomány kb. 5kHz-ig terjed, 1% alatti hibával. Ez után az eredmény egyre pontatlanabb lesz. • Áramtakarékos üzemmód (SLOWMODE) Kisebb számítási igényű alkalmazásoknál a SLOWMODE ON paranccsal a mikroprocesszor belső órája lelassítható (1/16). A “LED” és “232” jumperek levételével tovább csökkenthető a fogyasztás. Ha a program során valahol mégis nagyobb sebesség kell, a SLOWMODE OFF paranccsal visszatérhetünk a kiindulási helyzethez. Figyelem: soros adatátvitelt alkalmazó programoknál nem szabad a SLOWMODE -t aktiválni, mivel az adatátviteli sebesség a processzor órával együtt változik.
Assembler rutinok beiktatása A következő információk a professzionális felhasználóknak szólnak, a Basic programozáshoz nem szükségesek. Feltételezzük az MC68HC05B6 mikrokontroller ismeretét, és szükség van még egy 68HC05 processzor assemblerre, ld. pl. Zekeriya Zengin “Motorola 68HC05” könyvét, Conrad rend.sz.: 919179. Ez tartalmazza a kontroller teljes leírását, és lemezen többek között assemblert valamint számos példát. Nagyobb sebesség igény vagy speciális hardver esetén szükség lehet a külső tár mellett a processzorban rendelkezésre álló további 255 EEPROM bájtra, assembler rutinok tárolása céljából. Ilyen rutint a Basic-ből a SYS adr paranccsal lehet hívni, ahol adr egy konstans, amely az ugrási címet adja meg, pl. &H101, mivel a belső EEPROM tartomány itt kezdődik. Az assembler kódot tehát az ORG paranccsal ide kell letenni. Visszatérés Basic-be: RTS paranccsal. A Basic és az assembler közti adatcserét a SYSADR.INC fájlban felsorolt RAM címeken keresztül lehet bonyolítani. Az assembler kód bejutása a CCBASIC komputerbe: az assemblerben megírt járulékos rutinok külön forrássszöveg fájlban (pl. ADDONS.ASM) lesznek tárolva. Az assembler be lesz híva, és belőle S19 formátumú objektumkód fájl készül (pl. ADDONS.S19). Olvassa el az assembler dokumentációt. Az Ön Basic programja, mely tartalmazza a SYS parancsot, a SYSCODE “ADDONS.S19” paranccsal kell beiktassa a generált kódot. A SYSCODE parancs csak egyszer szerepelhet egy CCBASIC programban, és a végén, már az esetleges táblázatdefiníciók mögött kell lennie.
Táblázatok és ábrák Műszaki adatok Tápfeszültség Ub Áramfelvétel
5 V stabilizált egyenfeszültség, ±0,5 V kb. 30 mA lekapcsolt LED-eknél és RS232interfésznél < 10 mA Méretek kb. 80 mm x 50 mm Mikrokontroller Motorola MC68HC05B6 4 MHz órajel frekvencia 6 kilobyte maszkprogramozott operációs rendszer Microchip 24C65, soros EEPROM I2CTárolóchip a felhasználói program és interfésszel, 8k x 8 bit adatok számára
7
A/D-portok
Digitális portok
D/A átalakító DCF77 bemenet Soros interfész
8 x 8 bit A/D, 0...5 V, a közös testhez képest beállítható referenciafeszültség Uref (normálisan Ub = Uref) Átalakításkor a bemenő áram kb. 10 µA, abszolút hiba ±1 digit (= a mérési tartomány 1/256-od része) + a referenciafeszültség hibája. 16 darab, szabadon be- és kimenetként programozható port, 10 k felhúzó ellenállással Szint (0,2 mA terhelés a kimeneteken): (Ub - 0,3 V) < Uout, high < (Ub - 0,1 V) 0,1 V < Uout, low < 0.3 V (0,7*Ub) < Uin, high < Ub 0 V < Uin, low < (0,2*Ub) maximális megengedett terhelő áram: ± 10 mA Figyelem! Ha ezt a digitálportra kapcsolt áram korlátozás hiányában túllépi, az a mikrokontroller azonnali tönkremeneteléhez vezethet! 2 pulzusszélességmodulált kimenet, PWM-rate 1953 Hz 10k felhúzó-ellenállású digitális port nyitott kollektoros kimenetű DCF77aktívantenna csatlakoztatására RS232, MAX232 szintátalakítóval, vagy ezzel csereszabatos típus Átvitel: 9600 baud, 8 bit, 1 startbit, 1 stopbit, paritásbit nélkül, handshake nincs A PC-vel nullmodemkábel köti össze.
A csatlakozók lábkiosztása Az 1-es jelű érintkezők a beültetési és kapcsolási rajzon és a kártyán feliratozva vannak. A további számozás folyamatos. A jelzések későbbi bővítések számára vannak fenntartva; nem használandók. 1-es csatlakozóhüvely sor: Érintkező ssz. 1 2 3…10 11 12…19 20
szerep test (föld) A/D referencia feszültség 1…8 A/D port BEEP hangjelzés kimenet 9…16 digitális port +5V tápfeszültség
2-es csatlakozóhüvely sor: 1 2…9 10 11 12 13 14 15 16 17 18 19 20
+5V tápfeszültség 1…8 digitális port start bemenet (start gombbal párhuzamos) 2 I C busz adatvezeték (SDA)* 2 I C busz órajel vezeték (SCL)* RUN LED katód ACTIVE LED katód DCF-OK LED katód 1. D/A átalakító 2. D/A átalakító DCF77 bemenet Reset bemenet (reset gombbal párhuzamosan) Test (GND, föld)
További ábrák: Kapcsoló kontaktus csatlakoztatás digitális bemenetre Tranzisztor csatlakoztatás relé vezérléshez Hőmérséklet érzékelő csatlakoztatás A/D portra (Az ábrázolt AD592-es típusú érzékelő egy hőmérsékletfüggő áramforrás, amely 1uA/kelvin áramot ad ki.) A kapcsolás 0…512 kelvin fokot mér, a felbontás 2 kelvin. Átszámítás: T(C)=AD*2-273. [program példa ld. eredet útm.] Igényesebb alkalmazásokra hardver oldalon nem a tápfeszültséget kell referenciaként használni, és a méréshez műveleti erősítő bekötése javasolt; a szoftverben pedig táblázatot kell használni.
A külön rendelhető 121037 rend.sz Conrad “Starter Board”o hoz kétféle hőérzékelő modul kapható: egy a -27…100 C o tartományhoz (rend.sz. 121193), egy pedig a -50…600 C tartományhoz (rend.sz. 121207). A KTY.TAB és a PT100.TAB fájlokban konverziós táblázatok találhatók, melyeket a TABLE és LOOKTAB parancsokkal lehet a Basic programban használni. Ügyelni kell arra, hogy a KTY.TAB-ban levő tizedesjegyeket a CCBASIC nem veszi figyelembe. Ha az érzékelők felbontását ki akarja használni, távolítsa el a tizedeseket pl. egy szövegszerkesztő “keresés és törlés” parancsával, és számoljon a megtízszerezett értékekkel. RC tag kapcsolása D/A portra Egyszerű kapcsolás látható a hullámosság szűrésére; nagyobb igényekhez bonyolultabb elektronikára lehet szükség. Utasítások Az alábbi táblázat ABC rendben összefoglalja a CCBASIC fenntartott szavait, rövid szintaktikai leírással. Jelentés x abszolút értéke, x: kifejezés AD[i] A/D portot specifikál a DEFINEnál, i: 1…8 AND logikai és bitenkénti ÉS kapcsolat APPEND fájl megnyitás adatok hozzátétele céljából BAUD rate soros interfészek adatátviteli sebessége érték: konstans BEEP t, d, p hangjelzés kiadása t: hang = 250000/frekv. d: tartam = d*20ms p: szünet = p*20ms BIT[i] user (felhasználói) bit megadás DEFINE-nál, i: 1…192 BYTE[i] userbájt megadás DEFINE-nál, i: 1…24 BYTEPORT[ 8 bites digitális port specifikálás i] define-nál, i: 1…2 &B… bináris szám megadása CLOSE# fájl bezárása DAY nap érték a valósidejű óra szerint DA[i] D/A port specifikálás define-nál, i: 1…2 DEACT p digitális port deaktiválás p: port változó DEFINE port, változó vagy konstans azonosító definiálása ABS(x)
DOW ELSE END EOF FILEFREE FOR FREQ GET v GOSUB l GOTO l &H… HOUR IF
a hét napja érték a valósidejű óra szerint alternatív elágazás feltételes program végrahajtásnál a program vége fájl vége vizsgálat a fájl olvasásakor szabad memória vizsgálat fájl írásakor programciklus frekvencia lekérdezés a DCF77 bemeneten bájt olvasás a soros interfészről, v: változó azonosító ugrás szubrutinra, l: címke azonosító program ugrás, l: címke azonosító hexa szám megadás óra érték a valósidejű óra szerint feltételes végrehajtás, a feltétel kifejezés IF után van
Példa y = ABS(-1) DEFINE poti AD[1] if (x<0) AND (y<0)… y = x AND &H7F OPEN# FOR APPEND BAUD R2400 BEEP 400, 25, 10
DEFINE flag BIT[16] DEFINE x BYTE[1] DEFINE leds BYTEPORT[1] &B1010000 CLOSE# DAY = 1 PRINT DAY DEFINE v DA[2] DEACT led DEFINE sensor AD[1] DEFINE flag BIT[1] DEFINE limit 1000 IF DOW=1 THEN PRINT “MONTAG” IF x=0 THEN y=0 ELSE y=5 IF x THEN END IF EOF THEN GOTO xxx IF FILEFREE THEN GOTO xxx FOR i=1 TO 10 x = FREQ GET karakter GOSUB proc GOTO start &H1FFE PRINT HOUR IF x < y THEN GOTO ready
8
INPUT v INPUT# v LOOKTAB t, i, v MAX(x,y) MIN(x,y) MINUTE MOD MONTH NAND NOR NOT OFF ON ON x GOSUB ON x GOTO OPEN# FOR m OR PAUSE t PORT[i] PRINT x
PRINT# x PULSE p PUT x RAND RANDOMIZ Ex RETURN RXD READ SECOND SHL SHR SLOWMOD Em STEP SYS a SYSCODE SYSEND TABLE TABEND TIMER
számérték beolvasás a soros interfészről, v: változó azonosító számérték beolvasás a fájlból, v: változó azonosító érték betöltés táblázatból, t: táblázat azonosító i: index v: változó azonosító a nagyobbik érték meghatározása, x, y: kifejezések a kisebbik érték meghatározása, x, y: kifejezések perc érték a valósidejű óra szerint modulo osztás művelet hónap érték a valósidejű óra szerint logikai és bitenkénti ÉS kapcsolat, negálással logikai és bitenkénti VAGY kapcsolat, negálással logikai és bitenkénti negálás előre definiált konstans 0-ra előre definiált konstans &HFFFF-re x-től függő szubrutin hívás x-től függő program ugrás fájl megnyitás m módussal, m: APPEND, WRITE vagy READ logikai és bitenkénti VAGY kapcsolat a program megszakítása t*20ms-ra digitális port definiálása DEFINE-nál, i: 1…16 érték és szöveg kivitel soros interfészen, x: kifejezés vagy szöveg idézőjelben érték rögzítése fájlban, x: kifejezés pulzus kiadás digitális porton, p: port változó bájt kiadás digitális porton, x: kifejezés véletlen egész szám generálás véletlen szám generátor újbóli inicializálása visszatérés szubrutinból vizsgálat, hogy történt-e soros bájt vétel fájl megnyitás adat kiolvasáshoz másodperc érték a valósidejű óra szerint bitenkénti balra tolás művelet bitenkénti jobbra tolás művelet processzor óra/16, m: ON v. OFF FOR ciklus lépésnagyság megadás rendszerprogram behívás, a: cím rendszer kód vagy S19 fájl megadás befejezés a SYSCODE-al közvetlenül beadott bájtoknál adattáblázat definiálás, közvetlenül vagy táblázat fájllal befejezés a TABLE-al közvetlenül beadott értékeknél a 20ms-os timer lekérdezése
INPUT x
TO TOG p
INPUT# x
WORD[i]
LOOKTAB kty, mess, temp Z = MAX(x,10) Z = MIN(x,10)
WORDPOR T[i] WRITE YEAR
FOR-ciklus végérték megadás digitális port átkapcsolás p: port változó userword (felhasználói szó) specifikálás DEFINE-nál, i: mindig 1 16 bites digitális port specifikálás DEFINE-nál, i: mindig 1 fájl megnyitás új adatok beírásához év érték a valósidejű óra szerint
FOR i=1 TO 10 TOG led DEFINE x WORD[1] DEFINE all WORDPORT[1] OPEN# FOR WRITE PRINT YEAR
PRINT MINUTE x = 10 MOD 3 PRINT MONTH x = a NAND b x = a NOR b y= NOT x led=OFF led=ON ON sel GOSUB p1, p2, p3 ON sel GOTO p1, p2, p3 OPEN# FOR WRITE x = a OR b PAUSE 50
PRINT “A=”; a, “B=”; b PRINT# a PULSE clock PUT ch x = RAND RANDOMIZE TIMER RETURN IF RXD THEN GET ch OPEN# FOR READ PRINT SECOND a = a shl 2 a = a shr 2 SLOWMODE ON FOR i=100 TO 0 STEP -5 SYS &H101 SYSCODE “TEST.S19” SYSCODE &H81 SYSEND TABLE kty “KTY10.TAB” TABLE tab 10 5 -3 END x = timer
9