Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Opóźnienie 5ms w mikrokontrolerze 8051 assembler

adrian_krc 19 Sty 2014 20:49 1815 2
  • #1 19 Sty 2014 20:49
    adrian_krc
    Poziom 8  

    Witam,

    potrzebuje zrealizować opóźnienie 5ms w programie na uK 8051. Potrzebuje to do obsługi wyświetlacza 7 segmentowego 4 pozycyjnego.

    uK taktuje 12 MHz, więc czas cyklu maszynowego = 1 us.
    Znalazłem metodę, że można byłoby wpisać np. do timera T0 wartość:
    65535 + 1 - (opóźnienie,czyli 5000 us). Wtedy wartosc początkową wpisałbym do timera = 60536 i on licząc do 65536 odmierzyłby równo 5ms.

    Ale nie chciałbym wykorzystywać timera i znalazłem takie coś w kursie programowania mikrokontrolera 8051 w EDW:
    Opóźnienie 5ms w mikrokontrolerze 8051 assembler

    Więc, żeby osiągnąć 5ms, to musiałbym napisać

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    a do akumulatora chyba nie mogę wpisać tak o liczby 2,6. Jak to zrealizować?

    0 2
  • Pomocny post
    #2 19 Sty 2014 21:39
    Marek_Skalski
    Moderator Projektowanie

    Błądzisz.
    0. Dlaczego wybrałeś muzealny mikrokontroler, dla którego informacji trzeba szukać w skanowanych artykułach z gazet wydawanych w latach 80-tych i 90-tych zeszłego wieku?
    1. Dlaczego nie chcesz korzystać z timera? To jest najlepszy i najpewniejszy sposób odmierzania czasu.
    2. Czy program w którym potrzebujesz opóźnienie 5ms nie robi nic innego poza czekaniem? Przecież jakiekolwiek przerwanie pętli odmierzającej 5000 cykli powoduje zwiększenie opóźnienia o czas obsługi przerwania.
    3. Akumulator w 'C51 jest 8-bitowy więc możesz do niego załadować tylko liczby całkowite z przedziału <-128; 127> lub <0;255>.
    4. Za bardzo kombinujesz z procedurą DELAY. Ponieważ programujesz w asemblerze, to Ty musisz napisać lub skopiować od kogoś procedurę opóźnienia, która będzie odmierzała założony odcinek czasu. Ja bym to zrobił albo na sztywno jako 5ms, albo jako 1ms i wywołał ją z argumentem '5'.
    5. Nie wiem jaka jest Twoja znajomość asemblera na 'C51, ale jeżeli już naprawdę musisz generować opóźnienie programowo, to wykorzystaj do tego rejestry pomocnicze (Rx). Przykładowa pętla opóźniająca:

    Kod: asm
    Zaloguj się, aby zobaczyć kod

    A wywołanie:
    Kod: asm
    Zaloguj się, aby zobaczyć kod

    Jeżeli jeszcze nie jest za późno i chcesz się czegoś nauczyć, to zainteresuj się językiem C, a jako platformę sprzętową wybierz ARM, AVR lub PIC.
    Możesz zacząć tutaj: http://mikrokontrolery.blogspot.nl/p/spis-tresci.html
    Zobacz, że nawet na tym Forum dział C51 właśnie został zlikwidowany. C51 to ślepa uliczka, brak wsparcia i brak przyszłości.

    0
  • #3 19 Sty 2014 21:52
    adrian_krc
    Poziom 8  

    Bardzo dziękuję za odpowiedź. Zgadzam się ze wszystkim jeśli chodzi o przestarzałe 8051.
    Ale MUSZĘ to zrobić, gdyż na studia mam taki projekt do zrealizowania.

    Jeśli to Cię intersuję, to mam:
    układ do pomiaru prędkości obiektów ruchomych. Dane: 20-200 km/h, dokładność +- 2km/h.

    Męcze się z tym dość mocno, opracowałem taki algorytm programu, mógłbyś go sprawdzić?
    Oczywiście układ ma działać tylko w teorii.. nigdy nie będe go wykonywał
    Opóźnienie 5ms w mikrokontrolerze 8051 assembler

    Dodano po 4 [minuty]:

    realizacja będzie się opierać na efekcie dopplera
    Wysyłałbym stała częstotliwość 32,768 kHz.
    Ta odbiła by sie od obiektu, trafiła na odbiornik ultradźwiękowy, podzieliłbym ją przez 100 i doprowadził taki sygnał na nogę INT0.

    Następnie zliczałbym impulsy wzorcowe w czasie trwania okresu sygnału odbieranego i na tej podstawie wyliczał prędkość obiektu

    Wynik właśnie muszę wyświetlać na wyświetlaczu LED 7 segmentowym 4 pozycyjnym

    0
  Szukaj w 5mln produktów