Język ISPA został stworzony w celu uniwersalnego zapisu algorytmów obsługi układów.
Koncepcyjnie budowa języka bazuje na języku wyższego rzędu Pascal.
Umożliwia deklarację zmiennych. Budowanie pętli i warunków.
Budowanie komponentów wizualnych pozwalających na graficzną obsługę.
Cechy charakterystyczne kompilatora:
Struktura zasilania:
Dostępne są dwie linie zasilania:
Linia VCC - główne zasilanie układu. Napięcia od 2,8V do 7,4V prąd do 300mA.
Linia VPP - napięcie programujące od 12V do 28V prąd do 100mA
Struktura dostarczania napięcia VCC |
||
Przetwornica napięcia |
-> Dystrybutor |
-> Końcówka |
VCCSET() - ustawienie napięcia |
VCCON - włączenie dystrybutora 141b17b |
VCC()podłączenie napięcia do końcówki |
Struktura dostarczania napięcia VPP |
||
Przetwornica napięcia |
-> Dystrybutor |
-> Końcówka |
VPPSET() - ustawienie napięcia |
VPPON - włączenie dystrybutora 141b17b |
VPP()podłączenie napięcia do końcówki |
Wszystkie końcówki podstawki pracują w układzie otwartego kolektora. Napięcie doprowadzane jest poprzez rezystory 2K2 z dystrybutora 141b17b PULLUP. Dystrybutor można przełączać na poziom 5V komendą PULLUP5V lub 3V komendą PULLUP3V.
Komendy VCCSET(Parametr), VPPSET(Parametr) używają specyficznego zapisu poziomu napięcia. Poziom zapisywany jest jako liczba 16 bitowa. W zapisie nie ma przecinka.
Np. napięcie 12,75V - zapis 1275,
napięcie 6,00V - zapis 600
System magistral.
Aby uniknąć skomplikowanych procedur ustawiających pojedynczo końcówki adresowe lub danych w układach równoległych system ma możliwość definiowania magistral.
Można zdefiniować dwie magistrale: adresową i danych
Magistrala adresowa.
Definiowana rozkazem
ADRESMASK(numer końcówki adresu bit 0, bit 1, ...)
Do tak zdefiniowanej magistrali uzyskuje się dostęp równoległy pojedynczą komendą.
ADRESOUT(wartość) - wysyła na końcówki magistrali zadaną wartość.
Szerokość magistrali do 24 bitów.
Magistrala adresowa może być jedynie zapisywana.
Magistrala danych.
Definiowana rozkazem
DATAMASK(numer końcówki danych bit 0, bit 1, ...)
Do tak zdefiniowanej magistrali uzyskuje się dostęp równoległy pojedynczą komendą.
DATAOUT(wartość) - wysyła na końcówki magistrali zadaną wartość.
DATAIN(zmienna) - pobiera wartości z końcówek magistrali i zapisuje do zmiennej.
Szerokość magistrali do 16 bitów.
Dostęp do bufora.
System wyposażony jest w dwa bufory pamięci, każdy o pojemności 2MB.
Bufor pierwszy główny nazywany będzie po prosu buforem. Drugi bufor pomocniczy nazywany będzie COMPARE.
Zewnętrznie do bufora użytkownik ma dostęp poprzez edytor hex lub ładowanie plików z dysku.
ISPA daje dostęp do pamięci bufora głównego poprzez komendy:
MEMORYIN(Adres,Zmienna) - odczyta wartości z bufora z pod adresu i zapis do zmiennej
MEMORYOUT(Adres,Zmienna) - zamis wartości ze zmiennej do pamięci bufora pod adresem.
Analogicznie do bufora COMPARE dostęp umozliwiają rozkazy:
COMPAREIN, COMPAREOUT.
Adresowanie może mieć charakter 8,16 lub 32 bitowy.
Przy adresowaniu 8 bitowym adres 0 to pierwsze 8 bitów bufora adres 1 to następne 8 bitów itd.
Przy adresowaniu 16 bitowym adres 0 to pierwsze 16 bitów bufora adres 1 to następne 16 bitów itd.
Przy adresowaniu 32 bitowym adres 0 to pierwsze 32 bity bufora adres 1 to następne 32 bity itd.
Przykład. Jeżeli zapiszemy jakąś wartość 32 bitową pod adresem 1 to przy czytaniu jej w systemie 8 bitowym pierwszy jej bajt dostępny będzie pod adresem 4, drugi pod 5 itd.
Blok rozkazowy.
W przypadku niektórych rozkazów warunkowych lub pętli potrzebne jest wykonanie zestawu rozkazów, a nie pojedynczej komendy. Aby pozbyć się skoków znanych np. z assemblera system udostępnia tzw. blok rozkazowy. Jest to konstrukcja powszechnie znana z takich języków jak np. Pascal.
Begin
Rozkaz1
Rozkaz2
Rozkaz3
End
Blok rozpoczyna się komendą Begin a kończy komendą End. Pomiędzy nimi znajdują się kolejne rozkazy.
Procedury takie jak
IF a=b THEN
rozkaz
traktują blok jako jedną komendę.
System zmiennych.
System udostępnia możliwość deklarowania zmiennych. Bufor zmiennych ma pojemność 64KB.
Do deklaracji zmiennej służy komenda
VAR Name:Type
Deklaraja zmiennej o nazwie Name typu Type.
Dostępne typy: Byte, Word, LongWord.
Zmienna Byte zajmuje 1 Bajt, zmienna Word 2 Bajty zmienna LongWord 4 Bajty.
Nazwa zmiennej musi być unikatowa inaczej kompilator wyświetli błąd.
Np. VAR Zmienna:Byte;
VAR Zmienna:Word;
VAR Zmienna:LongWord;
Systemy liczbowe.
Kompilator ISPA operuje trzema systemami liczbowymi: dziesiętnym, szesnastkowym i binarnym.
Liczby dziesiętne: zapis w klasycznej postaci, cyfry od 0 do 9.
Np. 1234, 2345, 0012 itd.
Liczby szesnastkowe: cyfry od 0 do 9 i od A do F. Liczba musi być zakończona literą "H". Należy pamiętać aby pierwszą cyfrą liczby nie była litera. Jeżeli tak się zdarzy należy literę poprzedzić cyfrą zero.
Np. 12Ah, 0A12h, 0Dh itd.
Liczby binarne: cyfry od 0 do 1. Liczba musi być zakończona literą "B". Np. 001110101b, 10b, 101b itd.
System graficzny.
Zasadniczym elementem programu obsługi programatora jest panel sterujący (główna część okienka aplikacji). Wynikiem kompilacji algorytmu ISPA jest umieszczenie na panelu elementów graficznych zdeklarowanych w algorytmie. Sterowanie programatorem odbywa się poprzez intuicyjne graficzne wybieranie elementów z panelu. Jest to zupełnie inne podejście niż w przypadku zwykłych programatorów używających klasycznego menu.
Programowanie panelu odbywa się w podobny sposób w jaki pisane są programy okienkowe pod Windows.
Dostępne komponenty graficzne:
LABEL - etykieta tekstowa umieszczana w dowolnym miejscu panelu, ma znaczenie informacyjne
BUTTON - przycisk uruchamiający określoną przez algorytm procedurę np.: Read - powoduje odczytanie układu.
EDITHEX - okienko wprowadzania danych w postaci szesnastkowej np.: rozmiar pamięci. Zawsze poprzedzone jest etykietą opisującą jego nazwę.
PROGRESSRECT - pasek przebiegu procesu. Wskazuje graficznie jak zaawansowane jest wykonanie określonej funkcji. Kolor czerwony określa ilościowo dokonanie procesu.
TEXTFRAME - ramka z komunikatami dla użytkownika. Na ogół zajmuje centralną część ekranu. Wykonanie operacji na układzie powoduje wyświetlenie informacji o aktualnym stanie systemu - zawartości pamięci, błędach itd. Pojawiające się komunikaty zależą od zastosowanego algorytmu.
CHECKBOX - pole zaznaczenie. Popularny krzyżyk. Pozwala na aktywację lub dezaktywację określonej opcji. Zawsze poprzedzony jest opisującą go etykietą.
RADIOGROUP - pole wyboru jednej opcji z szeregu dostępnych. Grupa opisana jest etykietą.
FRAME - ramka prostokątna. Element graficzny służący poprawie czytelności danych na panelu.
Sposób opisu parametrów:
Name - ciąg znaków identyfikujący zmienną, stałą, etykietę. Nie może zaczynać się od cyfry. Np. Zmienna, Count, enable
Label - ciąg znaków identyfikujący etykietę. Nie może zaczynać się od cyfry. Np. Zmienna, Count, enable
Number - liczba w jednym z trzech formatów. Patrz systemy liczbowe.
NumB - liczba 8 bitowa. Zapisana jako bezpośrednia wartość w jednym z trzech systemów lub jako stała (czyli ciąg znaków). Np. 123, 0Ah, stala1.
NumW - liczba 16 bitowa. Zapisana jako bezpośrednia wartość w jednym z trzech systemów lub jako stała (czyli ciąg znaków). Np. 1234, 0ABCh, stala1.
NumL - liczba 32 bitowa. Zapisana jako bezpośrednia wartość w jednym z trzech systemów lub jako stała (czyli ciąg znaków). Np. 128123, 0ABCDEFh, stala1.
Uwaga !!! Stałe Num są ze sobą kompatybilne w dół. Oznacza to że zamiast stałej NumL możemy wstawić stałą NumW lub NumB. Odwrotnie nie jest to możliwe. Konwersja dokonywana jest na etapie kompilacji.
VarB - zmienna 8 bitowa. Reprezentowana przez ciąg znaków. Nie może zaczynać się od cyfry. Definiowana instrukcją Var Zmienna:Byte; Zajmuje 1 bajt pamięci.
VarW - zmienna 16 bitowa. Reprezentowana przez ciąg znaków. Nie może zaczynać się od cyfry. Definiowana instrukcją Var Zmienna:Word; Zajmuje 2 bajty pamięci.
VarL - zmienna 32 bitowa. Reprezentowana przez ciąg znaków. Nie może zaczynać się od cyfry. Definiowana instrukcją Var Zmienna:LongWord; Zajmuje 4 bajty pamięci.
UWAGA!!! Stała lub zmienna poprzedzona znakiem "%" może być podana opcjonalnie, ale nie musi. Wszystkie pozostałe muszą bezwzględnie występować.
Equ - ciąg znaków reprezentujący jedną ze stałych wygenerowanych uprzednio przez rozkazy TEXTFRAME lub PROGRESSRECT.
String - stała tekstowa. Ciąg dowolnych znaków ujęty w apostrofy. Np. 'tekst'
Opis rozkazów ISPA:
TESTCONTACT=OFF |
Wyłączenie testowania jakości połączeń końcówek układu z kontaktami podstawki. Równoznaczne z odznaczeniem opcji TestContact na pulpicie programu, ale wykonywane podczas każdej kompilacji algorytmu. |
VAR Parametr1:Parametr2 |
Zdefiniowanie zmiennej o nazwie Parametr1 typu Parametr2. Patrz system zmiennych. |
VAR Name:Byte VAR Name:Word VAR Name:LongWord |
EQU Parametr1=Parametr2 |
Przypisanie stałej o nazwie Parametr1 wartości Parametr2. Wartość musi być liczbą dziesiętną, szesnastkową lub binarną 8,16 lub 32bitową. Stała spełnia w programie taką samą funkcję jak liczba, a pozwala identyfikować się poprzez nazwę. Nazwa stałej musi być unikatowa. Patrz systemy liczbowe. |
EQU Name:Number |
@Parametr1: |
Deklaracja etykiety o nazwie Parametr1. Etykieta wyznacza miejsce skoku w komendzie GOTO. W przyjętej budowie proceduralnej programu korzystanie z etykiet nie jest niezbędne. Etykieta ma charakter lokalny jest widziana przez kompilator jedynie w obrębie danej procedury. |
@Name: |
GOTO Parametr1 |
Skok do miejsca programu oznaczonego etykietą Parametr1. Komenda ma charakter lokalny, działa tylko w obrębie danej procedury. |
GOTO Label |
END. |
Deklaracja końca programu. Tekst po etykiecie nie jest kompilowany. |
END. |
PROCEDURE(Parametr1) |
Deklaracja procedury o nazwie Name. Nazwa musi być unikatowa. Po deklaracji następuje ciało procedury aż do komendy ENDPROC. Nazwa procedury musi być unikatowa, także różna od nazwy stałej lub zmiennej. Przykład Procedure(READ); . . . EndProc; |
PROCEDURE(Name) |
ENDPROC |
Deklaracja końca procedury. Po wykonaniu procedury interpreter wraca do miejsca jej wywołania i wykonuje następną instrukcję. |
ENDPROC |
BEGIN |
Deklaracja początku bloku rozkazowego. Patrz blok rozkazowy. |
BEGIN |
END |
Deklaracja końca bloku rozkazowego. Patrz blok rozkazowy. |
END |
HALT |
Bezwarunkowe zatrzymanie programu. Interpreter przestaje działać. |
HALT |
EXIT |
Zakończenie działania procedury. Interpreter omija wszystkie pozostałe rozkazy i wraca do miejsca wywołania procedury. |
EXIT |
BREAK |
Zakończenie działania bloku rozkazowego. Interpreter omija wszystkie pozostałe rozkazy w bloku i wykonuje rozkaz znajdujący się za deklaracją END |
BREAK |
ADRESMASK(Parametr1,...,Parametr24) |
Definicja magistrali adresowej. Parametr1 do 24 oznacza kolejne numery końcówek układu. Patrz system magistral. |
ADRESMASK(NumB%NumB%NumB%NumB%NumB% NumB%NumB%NumB%NumB%NumB%NumB%NumB% NumB%NumB%NumB%NumB%NumB%NumB%NumB% NumB%NumB%NumB%NumB%NumB) |
DATAMASK(Parametr1,...,Parametr16) |
Definicja magistrali danych. Parametr1 do 16 oznacza kolejne numery końcówek układu. Patrz system magistral. |
DATAMASK(NumB%NumB%NumB%NumB%NumB% NumB%NumB%NumB%NumB%NumB%NumB%NumB% NumB%NumB%NumB%NumB) |
Komponenty graficzne:
LABEL(Tekst,x,y) |
Definicja etykiety tekstowej o treści Tekst(jedna linia tekstu) na panelu. Współrzędne x, y. Patrz system graficzny. |
LABEL(String,NumW,NumW) |
FRAME(x,y,w,h) |
Definicja ramki graficznej o szerokości W i wysokości H. Współrzędne x, y. Ramka jest elementem estetycznym, nie są z nią związane żadne akcje systemu. Patrz system graficzny. |
FRAME(NumW,NumW,NumW,NumW) |
TEXTFRAME(x,y,w,h, Identyfikator) |
Definicja ramki tekstowej o szerokości W, wysokości H. Współrzędne x, y. Identyfikator jest nazwą identyfikującą jednoznacznie ramkę podczas późniejszych czynności zapisu tekstu. Możemy wprowadzić kilka ramek i poprzez identyfikator wysyłać do nich różne teksty. Patrz system graficzny. |
TEXTFRAME(NumW,NumW,NumW, NumW,Name) |
TEXT(Identyfikator,Tekst) |
Wyświetlenie w ramce tekstowej związanej z Identyfikatorem tekstu Tekst. Patrz TEXTFRAME i system graficzny. |
TEXT(Equ,String) |
TEXTHEX(Identyfikator, Liczba) |
Wyświetlenie w ramce tekstowej związanej z Identyfikatorem liczby Liczba w postaci szesnastkowej. Patrz TEXT i system graficzny. |
TEXTHEX(Equ,NumB) TEXTHEX(Equ,NumW) TEXTHEX(Equ,NumL) TEXTHEX(Equ,VarB) TEXTHEX(Equ,VarW) TEXTHEX(Equ,VarL) |
BUTTON(Nazwa,x,y,w,h,NazwaIkony, NazwaProcedury |
Wyświetla przycisk o nazwie Nazwa. Współrzędne x,y, Szerokość W, Wysokość H Przycisk może być opatrzony ikoną pobraną z pliku o nazwie NazwaIkony w formacie bmp. Po naciśnięciu przycisku wywoływana jest procedura o nazwie NazwaProcedury. Patrz system graficzny. |
BUTTON(String,NumW,NumW,NumW, NumW,String,Label) |
EDITHEX(Nazwa,PrzesunięcieNazwy,x,y, w,h,Zmienna,Minimum,Maximum,Domyślnie |
Wyświetla pole edycyjne poprzedzone nazwą Nazwa. Przesunięcie Nazwy od okienka określone jest liczbą punktów PrzesunięcieNazwy. Wprowadzana wartość jest zapisywana w zmiennej Zmienna. Współrzędne pola x,y, szerokość W, wysokość H. Minimum określa dopuszczalną wartość minimalną. Maximum określa dopuszczalną wartość maksymalną. Domyślnie określa wartość wpisywaną w pole po kompilacji algorytmu. Patrz system graficzny. |
EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarB,NumB,NumB,NumB) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarW,NumW,NumW,NumW) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarL,NumL,NumL,NumL) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarB,NumB,VarB,NumB) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarW,NumW,VarW,NumW) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarL,NumL,VarL,NumL) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarB,NumB,NumB,VarB) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarW,NumW,NumW,VarW) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarL,NumL,NumL,VarL) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarB,NumB,VarB,VarB) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarW,NumW,VarW,VarW) EDITHEX(String,NumW,NumW,NumW,NumW,NumW, VarL,NumL,VarL,VarL) |
PROGRESSRECT(x,y,w,h,Identyfikator) |
Definicja słupka postępu współrzędnych x,y, szerokości W, wysokości H. Identyfikator jest nazwą identyfikującą jednoznacznie słupek podczas późniejszych czynności zapisu. Patrz system graficzny. |
PROGRESSRECT(NumW,NumW,NumW,NumW,Name) |
PROGRESSMIN(Identyfikator, Liczba) |
Ustala wartość minimalną słupka związanego z Identyfikatorem. Nowa wartość równa jest Liczbie. Patrz system graficzny. |
PROGRESSMIN(Equ,NumL) PROGRESSMIN(Equ,VarB) PROGRESSMIN(Equ,VarW) PROGRESSMIN(Equ,VarL) |
PROGRESSMAX(Identyfikator, Liczba) |
Ustala wartość maksymalną słupka związanego z Identyfikatorem. Nowa wartość równa jest Liczbie. Patrz system graficzny. |
PROGRESSMAX(Equ,NumL) PROGRESSMAX(Equ,VarB) PROGRESSMAX(Equ,VarW) PROGRESSMAX(Equ,VarL) |
PROGRESS(Identyfikator, Liczba) |
Ustala aktualną wartość słupka związanego z Identyfikatorem. Nowa wartość równa jest Liczbie. Patrz system graficzny. |
PROGRESS(Equ,NumL) PROGRESS(Equ,VarB) PROGRESS(Equ,VarW) PROGRESS(Equ,VarL) |
CHECKBOX(Nazwa,x,y,Zmienna, Domyślnie) |
Definicja okienka opcji o nazwie Nazwa, współrzędnych x, y. Wynik zaznaczenie lub odznaczenie przechowywany jest w zmiennej Zmienna. Parametr Domyślnie określa wartość początkową okienka po kompilacji algorytmu. Zmienna i Domyślnie są liczbami 8 bitowymi. Pod uwagę jednak brany jest jedynie najmłodszy bit. Patrz system graficzny. |
CHECKBOX(String,NumW,NumW, VarB,NumB) |
RADIOGROUP(Nazwa,x,y,w,h,Zmienna, Element1,...,Element10) |
Definicja ramki wyboru opcji o nazwie Nazwa, współrzędnych x, y, szerokości w, wysokości h. Numer wybranej opcji przechowywany jest w zmiennej Zmienna. Parametry Element1,...,Element10 określają nazwy kolejnych pozycji. Patrz system graficzny. |
RADIOGROUP(String,NumW,NumW,NumW,NumW, VarB,String,String%String%String%String %String%String%String%String%String) |
Rozkazy dotyczące rejestrów:
RESET |
Całkowite wyłączenie podstawki. Wszystkie końcówki jako otwarty kolektor. PULLUP na 5V. Dystrybutory napięć wyłączone. Dioda BUSY zgaszona. |
RESET |
VCCON |
Włączenie dystrybutora 141b17b napięcia VCC. Patrz struktura zasilania. |
VCCON |
VCCOFF |
Wyłączenie dystrybutora 141b17b napięcia VCC. Patrz struktura zasilania. |
VCCOFF |
VPPON |
Włączenie dystrybutora 141b17b napięcia VPP. Patrz struktura zasilania. |
VPPON |
VPPOFF |
Wyłączenie dystrybutora 141b17b napięcia VPP. Patrz struktura zasilania. |
VPPOFF |
LEDON |
Zapalenie diody BYSY. |
LEDON |
LEDOFF |
Zgaszenie diody BYSY. |
LEDOFF |
CLOCKON |
Podłączenie do końcówki 23 (dla ERICA) lub 15 (dla PS32) sygnału zegarowego 6MHz. Amplituda 0-2V. Wypełnienie 50%. Należy pamiętać o uprzednim ustawieniu końcówki na poziomie otwarty kolektor. Rozkaz stosowany np. przy procesorach MCS51-87xxx wymagających sygnału zegarowego |
CLOCKON |
CLOCKOFF |
Odłącznie sygnału zegarowego od końcówki 23 sygnału zegarowego 6MHz. Patrz rozkaz CLOCKON. |
CLOCKOFF |
PULLUP5V |
Ustawienie poziomu napięcia dystrybutora 141b17b PULLUP na 5V. Patrz struktura zasilania. |
PULLUP5V |
PULLUP3V |
Ustawienie poziomu napięcia dystrybutora 141b17b PULLUP na 3V. Patrz struktura zasilania. |
PULLUP3V |
VCCSET(Parametr1) |
Ustawienie poziomu napięcia zasilającego o wartości Parametr1 na końcówkach VCC. Patrz struktura zasilania. |
VCCSET(NumW) VCCSET(VarW) |
VPPSET(Parametr1) |
Ustawienie poziomu napięcia zasilającego o wartości Parametr1 na końcówkach VPP. Patrz struktura zasilania. |
VPPSET(NumW) VPPSET(VarW) |
VCC(Parametr1,...,Parametr4) |
Podłączenie dystrybutora 141b17b VCC do końcówki o numerze Parametr1,..., Parametr4. Patrz struktura zasilania. |
VCC(NumB%NumB%NumB%NumB) |
VPP(Parametr1,...,Parametr4) |
Podłączenie dystrybutora 141b17b VPP do końcówki o numerze Parametr1,..., Parametr4. Patrz struktura zasilania. |
VPP(NumB%NumB%NumB%NumB) |
PINL(Parametr1,...,Parametr8) |
Ustawienie poziomu 0 na końcówce o numerze Parametr1,..., Parametr8. Obciążenie do 500mA przy poziomie do 500mV. |
PINL(NumB%NumB%NumB%NumB %NumB%NumB%NumB%NumB) |
PINH(Parametr1,...,Parametr8) |
Ustawienie poziomu 1 na końcówce o numerze Parametr1,..., Parametr8. Wszystkie końcówki podstawki są podłączone poprzez rezystor 2K2 do linii zasilania PULLUP. Patrz struktura zasilania. |
PINH(NumB%NumB%NumB%NumB %NumB%NumB%NumB%NumB) |
PININ(Parametr1,Parametr2) |
Odczytanie poziomu sygnału z końcówki o numerze Parametr1. Poziom zapisywany jest w zmiennej o nazwie parametr2 na najmniej znaczącym bicie. Pozostałe bity ustawiane są na 0. Należy pamiętać aby uprzednio na czytaną końcówkę podać sygnał H - otwarty kolektor. Inaczej wartość będzie zawsze wynosić 0. |
PININ(NumB,VarB) PININ(VarB,VarB) |
PULSELH(Parametr1) |
Wysłanie na końcówkę o numerze Parametr1 sygnału 1,0,1. Szerokość impulsu 0 wynosi od 1 do 6uS. Impuls wyzwalany jest sprzętowo. Na jego szerokość nie ma wpływu przerywanie działania aplikacji przez system Windows. Należy stosować w sytuacjach krytycznych czasowo np. układy AT29Cxxx. |
PULSELH(NumB) PULSELH(VarB) |
PULSEHL(Parametr1) |
Wysłanie na końcówkę o numerze Parametr1 sygnału 0,1,0. Szerokość impulsu 0 wynosi od 1 do 6uS. Impuls wyzwalany jest sprzętowo. Na jego szerokość nie ma wpływu przerywanie działania aplikacji przez system Windows. Należy stosować w sytuacjach krytycznych czasowo np. układy AT29Cxxx. |
PULSEHL(NumB) PULSEHL(VarB) |
ADRESOUT(Parametr1) |
Wysłanie wartości Parametr1 na magistralę adresową. Patrz system magistral. |
ADRESOUT(NumL) ADRESOUT(VarB) ADRESOUT(VarW) ADRESOUT(VarL) |
DATAOUT(Parametr1) |
Wysłanie wartości Parametr1 na magistralę danych. Patrz system magistral. |
DATAOUT(NumW) DATAOUT(VarB) DATAOUT(VarW) |
DATAIN(Parametr1) |
Pobranie poziomów z końcówek magistrali danych i zapisanie do zmiennej o nazwie Parametr1. Patrz system magistral. |
DATAIN(VarB) DATAIN(VarW) |
LOOP(Parametr1) |
Wprowadzenie pętli czasowej o czasie trwania Parametr1. Wartość parametru równa 0 powoduje opóźnienie 10uS. Przy innych wartościach jedna jednostka to 100uS. Czas opóźnienia generowany jest sprzętowo przez elektronikę programatora. Nie jest zależny od szybkości komputera. |
LOOP(NumW) LOOP(VarW) LOOP(VarL) |
SERIALOUT(Zmienna,Count,Clkpin, Datapin,PozClk,PozData,MsbLsb |
Szeregowa transmisja danej (nadanie) interfejsem dwuliniowym. Zmienna-wartość do wysłania Count-liczba bitów do wysłania ClkPin-numer końcówki zegarowej DataPin-numer końcówki danych PozClk- 1- impuls 010 _/\_ 0- impuls 101 ^\/^ PozData 1 - normalny 0 - inwers MsbLsb 1 - MsbLsb 0 - LsbMsb Częstotliwość transmisji około 60kHz. Nie może być regulowana. |
SERIALOUT(NumL,NumB,NumB,NumB%NumB%NumB%NumB) SERIALOUT(VarB,NumB,NumB,NumB%NumB%NumB%NumB) SERIALOUT(VarW,NumB,NumB,NumB%NumB%NumB%NumB) SERIALOUT(VarL,NumB,NumB,NumB%NumB%NumB%NumB) SERIALOUT(VarB,VarB,NumB,NumB%NumB%NumB%NumB) SERIALOUT(VarW,VarB,NumB,NumB%NumB%NumB%NumB) SERIALOUT(VarL,VarB,NumB,NumB%NumB%NumB%NumB) |
SERIALIN Zmienna,Count,Clkpin,Datapin, PozClk,PozData,MsbLsb,Przed-po zboczu) |
Szeregowa transmisja danej (odbiór) interfejsem dwuliniowym. Zmienna-miejsce docelowe,wartość odebrana Count-liczba bitów do odebrania ClkPin-numer końcówki zegarowej DataPin-numer końcówki danych PozClk-1-impuls 010 _/\_ 0-impuls 101 ^\/^ PozData 1 - normalny 0 - inwers MsbLsb 1 - MsbLsb 0 - LsbMsb Przed 1 - read na pierwszym zboczu _^... 0 - read na drugim zboczu ...^_ Częstotliwość transmisji około 60kHz. Nie może być regulowana. |
SERIALIN(NumL,NumB,NumB,NumB%NumB%NumB%NumB%NumB) SERIALIN(VarB,NumB,NumB,NumB%NumB%NumB%NumB%NumB) SERIALIN(VarW,NumB,NumB,NumB%NumB%NumB%NumB%NumB) SERIALIN(VarL,NumB,NumB,NumB%NumB%NumB%NumB%NumB) SERIALIN(VarB,VarB,NumB,NumB%NumB%NumB%NumB%NumB) SERIALIN(VarW,VarB,NumB,NumB%NumB%NumB%NumB%NumB) SERIALIN(VarL,VarB,NumB,NumB%NumB%NumB%NumB%NumB) |
Rozkazy przesłań do pamięci:
MEMORYIN(Parametr1,Parametr2) |
Pobranie wartości z pamięci bufora głównego z pod adresu Parametr1 i zapisanie do zmiennej o nazwie Parametr2. Patrz Dostęp do bufora. |
MEMORYIN(VarB,VarB) MEMORYIN(VarB,VarW) MEMORYIN(VarB,VarL) MEMORYIN(VarW,VarB) MEMORYIN(VarW,VarW) MEMORYIN(VarW,VarL) MEMORYIN(VarL,VarB) MEMORYIN(VarL,VarW) MEMORYIN(VarL,VarL) MEMORYIN(NumL,VarB) MEMORYIN(NumL,VarW) MEMORYIN(NumL,VarL) |
MEMORYOUT(Parametr1,Parametr2) |
Zapisanie wartości ze zmiennej o nazwie Parametr2 do pamięci bufora głównego pod adres Parametr1. Patrz Dostęp do bufora. |
MEMORYOUT(VarB,VarB) MEMORYOUT(VarB,VarW) MEMORYOUT(VarB,VarL) MEMORYOUT(VarW,VarB) MEMORYOUT(VarW,VarW) MEMORYOUT(VarW,VarL) MEMORYOUT(VarL,VarB) MEMORYOUT(VarL,VarW) MEMORYOUT(VarL,VarL) MEMORYOUT(NumL,VarB) MEMORYOUT(NumL,VarW) MEMORYOUT(NumL,VarL) MEMORYOUT(VarB,NumB) MEMORYOUT(VarB,NumW) MEMORYOUT(VarB,NumL) MEMORYOUT(VarW,NumB) MEMORYOUT(VarW,NumW) MEMORYOUT(VarW,NumL) MEMORYOUT(VarL,NumB) MEMORYOUT(VarL,NumW) MEMORYOUT(VarL,NumL) MEMORYOUT(NumL,NumB) MEMORYOUT(NumL,NumW) MEMORYOUT(NumL,NumL) |
COMPAREIN(Parametr1,Parametr2) |
Pobranie wartości z pamięci bufora COMPARE z pod adresu Parametr1 i zapisanie do zmiennej o nazwie Parametr2. Patrz Dostęp do bufora. |
COMPAREIN(VarB,VarB) COMPAREIN(VarB,VarW) COMPAREIN(VarB,VarL) COMPAREIN(VarW,VarB) COMPAREIN(VarW,VarW) COMPAREIN(VarW,VarL) COMPAREIN(VarL,VarB) COMPAREIN(VarL,VarW) COMPAREIN(VarL,VarL) COMPAREIN(NumL,VarB) COMPAREIN(NumL,VarW) COMPAREIN(NumL,VarL) |
COMPAREOUT(Parametr1,Parametr2) |
Zapisanie wartości ze zmiennej o nazwie Parametr2 do pamięci bufora COMPARE pod adres Parametr1. Patrz Dostęp do bufora. |
COMPAREOUT(VarB,VarB) COMPAREOUT(VarB,VarW) COMPAREOUT(VarB,VarL) COMPAREOUT(VarW,VarB) COMPAREOUT(VarW,VarW) COMPAREOUT(VarW,VarL) COMPAREOUT(VarL,VarB) COMPAREOUT(VarL,VarW) COMPAREOUT(VarL,VarL) COMPAREOUT(NumL,VarB) COMPAREOUT(NumL,VarW) COMPAREOUT(NumL,VarL) COMPAREOUT(VarB,NumB) COMPAREOUT(VarB,NumW) COMPAREOUT(VarB,NumL) COMPAREOUT(VarW,NumB) COMPAREOUT(VarW,NumW) COMPAREOUT(VarW,NumL) COMPAREOUT(VarL,NumB) COMPAREOUT(VarL,NumW) COMPAREOUT(VarL,NumL) COMPAREOUT(NumL,NumB) COMPAREOUT(NumL,NumW) COMPAREOUT(NumL,NumL) |
Rozkazy warunkowe:
IF Parametr1=Parametr2 THEN |
Rozkaz wykonania warunkowego. Jeżeli Parametr1 jest równy Parametr2 to zostaje wykonana komenda z następnego wiersza. W innym wypadku komenda ta jest pomijana. W wierszu po rozkazie IF można zamiast pojedynczej komendy zastosować blok rozkazowy. Patrz blok rozkazowy. |
IF VarB=NumB THEN IF VarB=VarB THEN IF VarW=NumW THEN IF VarW=VarW THEN IF VarL=NumL THEN IF VarL=VarL THEN IF NumL=NumL THEN |
IF Parametr1>Parametr2 THEN |
Rozkaz wykonania warunkowego. Jeżeli Parametr1 jest większy niż Parametr2 to zostaje wykonana komenda z następnego wiersza. W innym wypadku komenda ta jest pomijana. W wierszu po rozkazie IF można zamiast pojedynczej komendy zastosować blok rozkazowy. Patrz blok rozkazowy. |
IF VarB>NumB THEN IF VarB>VarB THEN IF VarW>NumW THEN IF VarW>VarW THEN IF VarL>NumL THEN IF VarL>VarL THEN IF NumL>NumL THEN |
IF Parametr1<Parametr2 THEN |
Rozkaz wykonania warunkowego. Jeżeli Parametr1 jest mniejszy od Parametr2 to zostaje wykonana komenda z następnego wiersza. W innym wypadku komenda ta jest pomijana. W wierszu po rozkazie IF można zamiast pojedynczej komendy zastosować blok rozkazowy. Patrz blok rozkazowy. |
IF VarB<NumB THEN IF VarB<VarB THEN IF VarW<NumW THEN IF VarW<VarW THEN IF VarL<NumL THEN IF VarL<VarL THEN IF NumL<NumL THEN |
IF Parametr1<>Parametr2 THEN |
Rozkaz wykonania warunkowego. Jeżeli Parametr1 jest różny od Parametr2 to zostaje wykonana komenda z następnego wiersza. W innym wypadku komenda ta jest pomijana. W wierszu po rozkazie IF można zamiast pojedynczej komendy zastosować blok rozkazowy. Patrz blok rozkazowy. |
IF VarB<>NumB THEN IF VarB<>VarB THEN IF VarW<>NumW THEN IF VarW<>VarW THEN IF VarL<>NumL THEN IF VarL<>VarL THEN IF NumL<>NumL THEN |
Rozkazy arytmetyczne:
LET Parametr1=Parametr2 |
Rozkaz przypisuje zmiennej wartość. Parametr1 określa zmienną docelową, Parametr2 źródło wartości. |
LET VarB=NumB LET VarW=NumW LET VarL=NumL LET VarB=VarB LET VarW=VarB LET VarW=VarW LET VarL=VarB LET VarL=VarW LET VarL=VarL |
LET Parametr1=BYTE(Parametr2) |
Rozkaz przypisuje zmiennej o rozmiarze bajtu wartość o rozmiarze word lub longword po konwersji. Parametr1 określa zmienną docelową, Parametr2 źródło wartości. |
LET VarB=BYTE(VarW) LET VarB=BYTE(VarL) LET VarW=BYTE(VarL) |
LET Parametr1+Parametr2 |
Rozkaz dodaje Parametr1 do Parametr2 i wynik umieszcza w zmiennej Parametr1. |
LET VarB+NumB LET VarW+NumW LET VarL+NumL LET VarB+VarB LET VarW+VarB LET VarW+VarW LET VarL+VarB LET VarL+VarW LET VarL+VarL |
LET Parametr1-Parametr2 |
Rozkaz odejmuje od Parametr1 Parametr2 i wynik umieszcza w zmiennej Parametr1. |
LET VarB-NumB LET VarW-NumW LET VarL-NumL LET VarB-VarB LET VarW-VarB LET VarW-VarW LET VarL-VarB LET VarL-VarW LET VarL-VarL |
LET Parametr1*Parametr2 |
Rozkaz mnoży Parametr1 przez Parametr2 i wynik umieszcza w zmiennej Parametr1. |
LET VarB*NumB LET VarW*NumW LET VarL*NumL LET VarB*VarB LET VarW*VarB LET VarW*VarW LET VarL*VarB LET VarL*VarW LET VarL*VarL |
LET Parametr1/Parametr2 |
Rozkaz dzieli Parametr1 przez Parametr2 i wynik umieszcza w zmiennej Parametr1. |
LET VarB/NumB LET VarW/NumW LET VarL/NumL LET VarB/VarB LET VarW/VarB LET VarW/VarW LET VarL/VarB LET VarL/VarW LET VarL/VarL |
LET Parametr1 AND Parametr2 |
Rozkaz wykonuje mnożenie logiczne Parametr1 przez Parametr2 i wynik umieszcza w zmiennej Parametr1. |
LET VarB AND NumB LET VarW AND NumW LET VarL AND NumL LET VarB AND VarB LET VarW AND VarB LET VarW AND VarW LET VarL AND VarB LET VarL AND VarW LET VarL AND VarL |
LET Parametr1 OR Parametr2 |
Rozkaz wykonuje sumowanie logiczne Parametr1 z Parametr2 i wynik umieszcza w zmiennej Parametr1. |
LET VarB OR NumB LET VarW OR NumW LET VarL OR NumL LET VarB OR VarB LET VarW OR VarB LET VarW OR VarW LET VarL OR VarB LET VarL OR VarW LET VarL OR VarL |
LET Parametr1 XOR Parametr2 |
Rozkaz wykonuje Exclusive OR logiczne Parametr1 z Parametr2 i wynik umieszcza w zmiennej Parametr1. |
LET VarB XOR NumB LET VarW XOR NumW LET VarL XOR NumL LET VarB XOR VarB LET VarW XOR VarB LET VarW XOR VarW LET VarL XOR VarB LET VarL XOR VarW LET VarL XOR VarL |
LET Parametr1 SHL Parametr2 |
Rozkaz wykonuje przesunięcie logiczne Parametr1 o Parametr2 pozycji w lewo i wynik umieszcza w zmiennej Parametr1. Rozkaz ma charakter niecykliczny. |
LET VarB SHL NumB LET VarW SHL NumB LET VarL SHL NumB LET VarB SHL VarB LET VarW SHL VarB LET VarL SHL VarB |
LET Parametr1 SHR Parametr2 |
Rozkaz wykonuje przesunięcie logiczne Parametr1 o Parametr2 pozycji w prawo i wynik umieszcza w zmiennej Parametr1. Rozkaz ma charakter niecykliczny. |
LET VarB SHR NumB LET VarW SHR NumB LET VarL SHR NumB LET VarB SHR VarB LET VarW SHR VarB LET VarL SHR VarB |
INC Parametr1 |
Inkrementacja zmiennej Parametr1. |
INC(VarB) INC(VarW) INC(VarL) |
DEC Parametr1 |
Dekrementacja zmiennej Parametr1. |
DEC(VarB) DEC(VarW) DEC(VarL) |
SWAP(Parametr1) |
Zamiana miejscami bajtów w słowie, lub słów w długim słowie. |
SWAP(VarW) SWAP(VarL) |
Petle:
FOR Parametr1 TO Parametr2 THEN Begin .. End |
Pętla programowana. Dopóki Parametr1 nie jest większy od Parametr2 wykonywany jest blok rozkazowy. Po każdym wykonaniu bloku zmienna Parametr1 jest zwiększana o 1. Przed wejściem w pętlę należy ustalić wartość początkową zmiennej Parametr1. Natychmiastowe opuszczenie pętli wykonywane jest po wykonaniu komendy break. |
FOR VarB TO NumB DO FOR VarW TO NumW DO FOR VarL TO NumL DO FOR VarB TO VarB DO FOR VarW TO VarW DO FOR VarL TO VarL DO |
FOR Parametr1 DOWNTO Parametr2 THEN Begin .. End |
Pętla programowana. Dopóki Parametr1 nie jest mniejszy od Parametr2 wykonywany jest blok rozkazowy. Po każdym wykonaniu bloku zmienna Parametr1 jest zmniejszana o 1. Przed wejściem w pętlę należy ustalić wartość początkową zmiennej Parametr1. Natychmiastowe opuszczenie pętli wykonywane jest po wykonaniu komendy break. |
FOR VarB DOWNTO NumB DO FOR VarW DOWNTO NumW DO FOR VarL DOWNTO NumL DO FOR VarB DOWNTO VarB DO FOR VarW DOWNTO VarW DO FOR VarL DOWNTO VarL DO |
|