92 (141)

92 (141)



Mikroprocesorowa Ośla łączka

Mikroprocesorowa Ośla łączka

If Flaga * 1 Then 'gdy llaga ustawiona, co 500ms    RyS. 111.

Decr Licznikczasu    'zmniejsz zawartość licznika    1

If Czasalarmu * 2S5 Then    'gdy dojdzie do zera i chce liczyć dalej

Flaga ■ 0 'zakończ zliczanie zerując flagę 'tu ewentualnie zrób coś jeszcze End If

Elso    'gdy flaga wyzerowana, w każdym cyklu co SOOms

licznikczasu * Uartoscpoczątkową    'przygotuj do następnego cyklu

End If


'    C021a Prosta centralka alarmowa - szkielet programu    Rys. 112.

'tu na początku deklaracje i konfiguracje, w tym Timeral Do Loop End    główny program, jak zwykle

CoSOOms    'procedura obsługi przerwania od Timeral co 0 5 sekundy

'najpierw uzyskujemy aktualny    stan    linii    LI,    L2 oraz wejść SI. S2:

Stan    4    ■    Pind    1    'przepisz    sten    klucza    S2

Stan    3    ■    Pind    6    'przepisz    stan    L2

Stan    0    *    Pind    5    'przepisz    stan    LI

' do tego dochodzi aktualny stan flag w zmiennej Stan

'jeśli którakolwiek z trzech flag czasu jest ustawiona, w procedurach If-Then-Else zliczamy czas.

' gdy czas zostanie odliczony odpowiednia flaga jest zerowana

'potem sprawdzamy stan centralki :

If Stan 4=1 Then 'za każdym razem, gdy centralka wyłączona, czyli klucz S2 - rozwarty Stan « 4J300110000    'oprócz bitu Stan 4 ustawionego przez przełącznik S2

' dodatkowo ustawiamy bit pomocniczy Stan.5. a resztę brutalnie zerujemy Elsę    'gdy klucz S2 jest zwarty, wtedy centralka pracuje;

If Stan 5*1 Then    'jednorazowo po włączeniu czuwania, gdy bit pomocniczy ustawiony

Stan 2*1 'zablokujemy linię zwłoczną i odmierzymy czas na wyjście Stan 5 * 0 'ma być jednorazowo, więc zerujemy bit pomocniczy End If

If Stan > 7 Then gdy pobudzona lima natychmiastowa L2 - zawsze włącz alarm Stan 6*1    ' i zacznij odmierzać czas alarmu

Elsę    'gdy L2 nie pobudzona, wtedy Stan*0 7 i można

If Stan * 1 Then Stan 1*1    'gdy tylko bit Stan 1 ustawiony odmierz -czas na wejście

End If End If

Portd 2 * Hot Stan 6    ewentualnie włącz syrenę dołączoną do Q2

Return    'koniec procedury obsługi przerwania


sekundy). Całą użyteczną pracę procesor wykonuje w ramach obsługi przerwania od Timeral. Na początku każdego takiego 500-milisekundowego cyklu procesor aktualizuje zawartość zmiennej Stan, a następnie zależnie od wyniku podejmuje jakieś działanie lub nie.

Rysunek 110 pokazuje rolę poszczególnych bitów zmiennej Stan. Kolejność bitów nie jest przypadkowa - na taki porządek zdecydowałem się po namyśle, żeby potem łatwo analizować stan centralki, analizując zawartość zmiennej Stan nie tylko jako zbiór bitów, tylko jako... liczbę.

Działanie centralki jest w sumie proste. Do odmierzania czasu służą trzy flagi i trzy niezależne zmienne-liczniki z ustawioną wstępnie zawartością początkową. Jeśli którakolwiek z tlag czasu w zmiennej Stan zostanie ustawiona, wtedy po każdym przerwaniu, co pół sekundy nastąpi zmniejszenie zawartości odpowiedniego licznika. Zliczenie do zera (właściwie poniżej zera - do liczby 255) powoduje wyzerowanie tej flagi, co z kolei spowoduje stosowną zmianę stanu centralki. Ogólny schemat takiego licznika czasu pokazany jest na rysunku 111. Natomiast na rysunku 112 (C02Ia.bas) pokazany jest szkielet całości. Zwróć uwagę, że flaga powodująca odmierzanie czasu na wejście (Stan.l) jest ustawiana w linii:

If Stan = 1 Then Stan.l = 1

Flaga zostanie ustawiona tylko wtedy, gdy liczba zawarta w ośmiobitowej zmiennej Stan jest równa jedności, czyli tylko wtedy, gdy linia zwłoczną LI jest naruszona i jednocześnie wszystkie pozostałe bity zmiennej Stan mają wartość zero. Oznacza to, że wpisanie jakiejkolwiek dodatkowej jedynki zmieni wartość zawartość zmiennej Stan i nie pozwoli na ustawienie flagi Stan.l. Ten nietypowy sposób wykorzystujemy między innymi po to, żeby zablokować linię LI po włączeniu czuwania (zwarciu S2), gdy ma ona być nieczynna przez czas na wyjście, gdy ustawiona jest flaga Stan.2.

Pełny program centralki przedstawiony jest na rysunku 113 (C021b.bas).

UWAGA! Jeśli dołączysz do zacisków PD.5, PD.6 linie dozorowe według rysunku 107, to

zaczyna się z opóźnieniem kilkunastu milisekund (11...21ms przy napięciu zasilania 5V, zależnie od egzemplarza i temperatury) po wystąpieniu przyczyny resetu. Ilustruje to rysunek na poprzedniej stronie, pokazujący przebieg resetujący na końcówce zerującej, czyli nóżce nr 1 i stany procesora. Pamiętaj, że w spoczynku na końcówce RE-SET występuje stan wysoki, co wynika z obecności wewnętrznego rezystora podciągającego (10()k£2...50()k£2).

Procesor jest „martwy” nie tylko przez czas trwania impulsu zerującego Tr, ale dodatkowo jeszcze przez czas opóźnienia Td. Przy napięciu zasilania innym niż 5V, czas Td będzie znacząco inny. Tak samo jest po włączeniu zasilania - procesor zaczyna normalną pracę dopiero po czasie opóźnienia.

Wprawdzie kilkanaście milisekund czasu Td to dla procesora dość dużo, jednak takie opóźnienie w ogromnej większości przypadków nie ma żadnego znaczenia. Podobnie tylko w bardzo rzadkich przypadkach należy uwzględnić fakt, iż w czasie zerowania wszystkie końcówki wejścia/wyj-ścia portów B i D są w stanie trzecim, czyli „wiszą w powietrzu” do czasu, gdy zostaną skonfigurowane, co następuje na początku działania programu, czyli po kilkunastu milisekundach od chwili włączenia zasilania czy zakończenia impulsu resetującego na nóżce 1. Więcej szczegółów znajdziesz w Technikaliach.

NA CZAS PROGRAMOWANIA PROCESORA ZDEJMIJ JUMPERY Jl, J2.

Trzy potrzebne czasy ustalamy za pomocą trzech stałych deklarowanych dyrektywą Const. W programie czasy te wynoszą 5, 4 i 3 sekundy, ale w praktyce powinny być znacznie dłuższe - obok masz zaremowane sensowne ich wartości (2 minuty, 25s, 15s).

Zauważ, że jeśli jumpery J 1, J2 zwierają punkty A, B, wtedy dodatkowo na wyświetlaczach sygnalizowany jest stan centralki. Gdy linie są nienaruszone, świecą dwie kropki (punkty dziesiętne) lewego wyświetlacza. Naruszenie (przerwanie) linii powoduje wygaszenie jednego z wyświetlaczy. Włączenie czuwania sygnalizowane jest zaświeceniem

PJ


*


i


i


autonomiczne obwody procesora. Zwróć uwagę, że wewnętrzny oscylator RC jest wykorzystywany zarówno przez obwód watchdoga, jak i przez obwody resetu. Sygnały resetu z trzech źródeł są sumowane za pomocą bramki OR. Sygnał z wyjścia tej bramki (punkt X) ustawia przerzutnik RS, a tym samym powoduje



H

W

n

x

z

X

>

r

NN

>


mową zmianą stanu rejestru WDTCR wykonać zerowanie licznika (RESET WATCHDOG).

Jeszcze raz zaznaczam, że te rozważania nie dotyczą typowej sytuacji, gdy watchdog jest włączany na początku działania programu, zaraz po resecie, tylko sytuacji gdy zmiana stanu rejestru WDTCR miałaby być dokonywana później, w czasie pracy programu.

RESET

Rysunek I) pokazuje w uproszczeniu obwody zerowania omówione wstępnie w części ELEMENTarz. Obwody resetu nie mają żadnego związku z rejestrami I/O. Można powiedzieć, że są to najbardziej

Elektronika dla Wszystkich Grudzień 2003 35


Wyszukiwarka

Podobne podstrony:
89 (141) Mikroprocesorowa Ośla łączka M1 Mikroprocesorowa Ośla łączka M1 programowe zerowanie liczni
assembler?86? 6 92    5. Rozkazy mikroprocesorów 8086/8088 Zamiana miejscami zawart
A6E5112M112 TfAPPLY SPECIFIED OIL TO INDIVIDUAL PARTS 18.6—25.5 {1.9—2.6, 14—18} J__ 7.8—11.3 N
page0098 92 8ZK01.A JOŃSKA. dawno wykazał Diels Książka sama zwała się Heptamychos {ŹT7zi[Jxt/aq), c
MG 92 W" bagm If (rst ■ V) then ^^statą.reg <■ sl; J wewnętrzny automatu wyzwalane zboczo
44 (141) 44 UKŁADY RÓWNAŃ 17. Suma dwóch liczb wynosi 223, a ich różnica 25. Co to za liczby? 18. Ks
92 3 Dramatyczna scena pierwszego przeobrażenia się Jaeoba w wilka zaczyna się w chwili, gdy bohater
43680 Image37 (6) Mikroprocesorowa Ośla łączka Ml 191 ZmiennaTypuInteger = Funkcyjka (JakasZaiByte,
90 (145) Mikroprocesorowa Ośla łączka R14 R13
91 (142) Mikroprocesorowa Ośla łączka Ml Reset Watchdog I to sq wszystkie kluczowe informacje, umożl
93 (135) Mikroprocesorowa Ośla łączka segmentów a tych dwóch wyświetlaczy. Podczas odmierzania czasu
95 (133) Mikroprocesorowa Ośla łączka 95 wu na działanie poprzedniej wersji centralki? Po przeprowad
96 (126) Mikroprocesorowa Ośla łączka Config Portb = Output : Portb = 127 portB - wyjcecie; PB.7 =
97 (117) Mikroprocesorowa Ośla łączka M1 Mikroprocesorowa Ośla łączka M1 Ćwiczenie 23Wyświetlacz
98 (115) Mikroprocesorowa Ośla łączka Mikroprocesorowa Ośla łączka •C023a Wyświetlacz LCD Cla Do Cl
99 (115) Mikroprocesorowa Ośla łączka M1 Mikroprocesorowa Ośla łączka M1 ’C023e Wszystkie typy zmi

więcej podobnych podstron