POWRÓT DO SPISU TREŚCI


5. Program sterujący pracą wiertarki

Program sterujący wiertarką napisany został w języku symbolicznym tzw. “asemblerze”. Podczas wykonywania programu procesor można uważać za automat interpretujący zawartości komórek pamięci operacyjnej. Informacja zapisana w komórce wskazywanej przez zawartość licznika rozkazów będzie interpretowana jako kod rozkazu lub jego część. Rozróżnienie między danymi a rozkazami maszynowymi dokonuje się więc w każdym z cykli rozkazowych. Podstawy koncepcji asemblera sprowadzają się do zastąpienia wartości liczbowych symbolicznymi nazwami. Te symboliczne nazwy mogą przedstawiać różne obiekty lecz w przypadku języków asemblerowych zakres ich znaczeń prawie nigdy nie wykracza poza obszar wyznaczony przez własności sprzętowe procesora i współpracujących z nim układów cyfrowych. Nazwy są tak dobrane by łatwo kojarzyły się z obiektem lub czynnością którą określają.

Koncepcja programu przedstawiona jest na rysunku 5.1 w postaci graficznej zwanej “algorytmem”. Po włączeniu zasilania procesor wykonuje operacje związane z ustawieniem głowicy w położeniu neutralnym (punkt 0,0 w układzie XY), od którego następnie będą liczone odległości wierconych otworów. Kolejnymi czynnościami są: ustawienie parametrów transmisji RS-232 (9600N81) oraz ustawienie trybu pracy i wartości początkowych licznika 0, wykorzystywanego do generowania taktów obsługi silników osi X i Y. Przerwanie licznika jest wywoływane co około 6 ms. Procedura obsługi tego przerwania (rysunek 5.2) sprawdza liczniki ilości skoków do wykonania i jeśli są niezerowe powoduje przesłanie do portu silników (P1) odpowiednich sekwencji sterujących.

W głównej pętli programu procesor obsługuje silnik osi Z oraz sprawdza czy w buforze nie ma rozkazu przesłanego z komputera nadrzędnego PC. Podczas obsługi silnika osi Z testowany jest trzeci bit rejestru R0 i jeżeli jest on ustawiony wykonywany jest cykl wiercenia. Podczas tego cyklu zablokowane są przerwania w celu zabezpieczenia przed zmianą położenia głowicy gdy wiertło jest wewnątrz otworu. Częstotliwości taktowania silnika osi Z są wyznaczane przez pętle programowe.
 

Rys. 5.1 Program główny

Rys 5.2 Przerwanie licznika 0

Komputer nadrzędny (PC) sterujący wiertarką komunikuje się z wewnętrznym kontrolerem przy pomocy czterobajtowych rozkazów. Funkcja odpowiedzialna za obsługę interfejsu RS-232C sygnalizuje nadejście rozkazu przez ustawienie odpowiedniego bitu w polu adresowania bitowego (20h). Rozkaz jest dekodowany i obsługiwany w pętli głównej programu. Każdy rozkaz musi być poprzedzony bajtem identyfikacji 0EAh. Następny bajt jest kodem rozkazu a kolejne dwa stanowią informację przesyłaną w rozkazie.

B7
B6
B5
B4
B3
B2
B1
B0
NU
NU
NU
NU
błąd
silnik Z w pozycji 0
silnik Y w pozycji 0
silnik X w pozycji 0

Rys. 5.3 Słowo stanu wiertarki

Istnieje pięć rozkazów sterujących wiertarką. Rozkaz o kodzie 00h nakazuje przesłanie stanu wiertarki do komputera nadrzędnego. Jednobajtowe słowo stanu przedstawione jest na rysunku 5.3. Rozkazy o kodach 01h i 02h powodują wpisanie ilości skoków do wykonania przez silniki odpowiednio X i Y. W rozkazach tych zawarty jest także kierunek przesunięcia głowicy wiertarki. Rozkaz 03h zezwala na wiercenie otworu w płytce. Rozkaz 04h ustawia szybkość opuszczania wiertła.

Algorytm obsługi przerwania portu RS-232 jest przedstawiony na rysunku 5.4. Pierwszą czynnością jest sprawdzenie przyczyny wystąpienia przerwania. Przerwanie może być zgłoszone w dwóch przypadkach: zakończenia transmisji lub odbioru bajtu. Przyczyna jest sygnalizowana przez odpowiednie flagi w rejestrze SCON. Jeżeli przerwanie zostało spowodowane zakończeniem transmisji bajtu funkcja sprawdza czy jest do wysłania kolejny bajt i jeśli tak, przepisuje odpowiedni bajt z bufora TX do rejestru SBUF. Dalsza część przesłania jest realizowana sprzętowo przez wewnętrzne układy mikrokontrolera. W przypadku gdy przerwanie zostało wywołane przez odbiornik, procedura umieszcza odebrany bajt w odpowiednim polu bufora RX. Jeżeli bajt ten zostanie rozpoznany jako nagłówek rozkazu kolejne trzy bajty będą traktowane jako ciało rozkazu. Jeżeli bajt nie stanowi nagłówka ani części rozkazu jest ignorowany.

Rys. 5.4 Obsługa przerwania RS-232

Program mikrokontrolera nie przelicza liczby skoków silników na odległość w ruchu postępowym, a także nie kontroluje próby przesunięcia głowicy poza możliwy zakres. Te zadania spoczywają na programie sterującym w komputerze nadrzędnym.


Program asemblerowy kontrolera do pobrania: program_wiertarki.txt
Program C komputera nadrzędnego (demonstarujący działanie): program_PC.txt

 ROZDZIAŁ 6