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.

Jak włączyć timer w mikrokontrolerze 89S51 w asemblerze.

MooNTER 06 Kwi 2006 12:39 1671 9
  • #1 06 Kwi 2006 12:39
    MooNTER
    Poziom 12  

    Wiem ze bylo milion razy, wciskalem przycisk szukaj, ale dla laika to i tak za trudne wiec prosze o wyrozumialosc ;)
    Potrzebuje po otrzymaniu stanu niskiego na wejsciu wlaczyc timer na 5 do 10 sekund i potrzebuje prostego opisu co gdzie ustawic, tzn. np setb TR0 ;wlacza przerwania, ale nie wiem jak dalej poustawiac i jak wyliczyc czas (bede potrzebowal czasy 5 do 10 sekund, pozniej 30 do 60 sekund i jeszcze pozniej 3 do 5 minut) po odliczeniu czasu ma sie cos zrobic (np timer przestawic na inny czas) a w trakcie odliczania maja byc wykonywane inne operacje (generalnie sprawdzanie stanu wejsc)
    Mam nadzieje ze nie bedziecie na mnie za mocno krzyczec ;)
    Pozdrawiam!

    0 9
  • #2 06 Kwi 2006 13:54
    markosik20
    Poziom 33  

    Tutaj masz waszystko o timerach w '51.
    http://www.atmel.com/dyn/resources/prod_documents/doc4316.pdf
    W 89s51 są tylko dwa T0 i T1.
    Zasada jest prosta.

    W twoim przypadku najlepiej żeby timer pracował jako 16bit.
    Tryb pracy ustwia się w TMOD. (Masz w opisie bit M1 i M0). Ma zliczać impulsy z zegara systemowego który wynosi Fosc/12.
    Jeszcze trzeba odblokować przerwania EA i indywidualne ET0 lub ET1 w rejestrze IE.
    I wszystko zależy od wartośći kwarca.
    Zeby uzyskać 5s przy jednym przepełnieniu to kwarc musiałby być Max 150Khz.
    Jak masz większy to musisz wprowadzić zmienną któraby się zmniejszała w obłudze przerwania timera o jeden.

    0
  • #3 06 Kwi 2006 17:11
    MooNTER
    Poziom 12  

    markosik20 napisał:

    I wszystko zależy od wartośći kwarca.
    Zeby uzyskać 5s przy jednym przepełnieniu to kwarc musiałby być Max 150Khz.
    Jak masz większy to musisz wprowadzić zmienną któraby się zmniejszała w obłudze przerwania timera o jeden.


    czyli musze podlaczyc zewnetrzny kwarc - bez tego sie nie da? podlaczam go do XTAL1 i XTAL2 i przez kondensatory do masy?

    Dodano po 21 [minuty]:

    i jak wyliczyc ten czas - 150kHz/12 ?? chyba nie bo dla wiekszego kwarcu wyjdzie wieksza liczba

    0
  • #5 07 Kwi 2006 03:58
    MooNTER
    Poziom 12  

    bolek napisał:
    myślę że to wszystko wyjaśni http://www.edw.com.pl/pdf/k09/29_08.pdf


    Super opis naprawde wielkie dzieki!!!
    Mam tylko pytanie (moze niedoczytalem bo pozna godzina...):
    T0 ma wiekszy priorytet niz T1. Jezeli realizujemy przerwanie z T0 to wiem ze przerwanie z T1 zostanie zrealizowane po nim, ale czy w instrukcji przerwania T0 moge wpisac zeby sprawdzal czy T1 sie przepelnil?
    Innymi slowy: czy bit przepelnienia T1 zmieni sie podczas realizacji przerwania T0 czy dopiero po nim?

    Dodano po 3 [godziny] 4 [minuty]:

    to teraz pytanie praktyczne: po asemblacji wywala mi takie bledy:

    Code:


    22     MOV TL1,#B0H           
    *** __________________________________^
    *** ERROR #46, LINE #22, UNDEFINED SYMBOL (PASS-2)

                           
    24     MOV TH0,#FEh               
    *** __________________________________^
    *** ERROR #46, LINE #24, UNDEFINED SYMBOL (PASS-2)

    30     MOV LICZNIK,#FFh       
    *** ______________________________________^
    *** ERROR #46, LINE #30, UNDEFINED SYMBOL (PASS-2)


    50     CJNE A,#FFh,NEXT         
    *** _________________________________^
    *** ERROR #46, LINE #50, UNDEFINED SYMBOL (PASS-2)

    61     MOV TH1,#EFH           
    *** __________________________________^
    *** ERROR #46, LINE #61, UNDEFINED SYMBOL (PASS-2)

    62     MOV TL1,#BAH            ;
    *** __________________________________^
    *** ERROR #46, LINE #62, UNDEFINED SYMBOL (PASS-2)

    ASSEMBLY COMPLETE, 6 ERRORS FOUND


    Dodam, ze LICZNIK, NEXT MAM ZDEFINIOWANE WARTOSCI, a co do pozostalych nie mam pojecia czemu nie mozna wpisac takich wartosci...[/code]

    0
  • #6 07 Kwi 2006 07:17
    jj
    Poziom 19  

    MooNTER napisał:
    (...)
    Innymi slowy: czy bit przepelnienia T1 zmieni sie podczas realizacji przerwania T0 czy dopiero po nim?

    Flaga TF1 zostaje ustawiona w momencie przepełnienia licznika T1, także podczas obsługi przerwania od T0.

    MooNTER napisał:
    (...)
    Dodam, ze LICZNIK, NEXT MAM ZDEFINIOWANE WARTOSCI, a co do pozostalych nie mam pojecia czemu nie mozna wpisac takich wartosci...

    Takie wartości jak najbardziej można wpisać, pamiętać należy tylko o tym, że przy podawaniu wartości liczbowych pierwszy znak musi być cyfrą. Musisz zatem zamiast #B0H wpisać #0B0H itd.

    Pozdrawiam,
    Jacek

    0
  • #7 07 Kwi 2006 08:34
    MooNTER
    Poziom 12  

    Dzieki :))) baardzo mi pomogliscie :)
    Pozdrawiam!

    0
  • #8 07 Kwi 2006 14:38
    MooNTER
    Poziom 12  

    Teraz pytanie: jaki polecicie emulator 89S2051 ?? najlepiej zebym mogl ustawic wartosc podlaczonego kwarcu albo zeby jakis konkretny byl tam wstawiony. Probowalem na Debugger 8051 1.9BETA ale wydaje mi sie ze nie dziala dlatego, ze nie symuluje kwarcu i licznik nie idzie
    Jest cos na czym moglbym to sprawdzic czy trzeba programowac procka??

    aha! i druga rzecz: da sie jakos zabezpieczyc program przed zczytaniem go?

    0
  • #9 07 Kwi 2006 21:22
    bolek
    Specjalista - oświetlenie sceniczne

    program na pewno da się zabezpieczyć, robisz to z poziomu programatora, po co ci emulator skoro masz wersje S- nie trzeba się bawić w przekładanie proca, więc to żaden kłopot

    0
  • #10 07 Kwi 2006 21:59
    MooNTER
    Poziom 12  

    bolek napisał:
    po co ci emulator skoro masz wersje S- nie trzeba się bawić w przekładanie proca, więc to żaden kłopot


    po 1) uklad jeszcze nie powstal, a ja chetnie bym juz przetestowal dzialanie 2) programatora niestety jeszcze nie mam i na zaprogramowanie bede lecial do kogos kto ma lub pozycze na chwile...
    Dobrze by bylo "na sucho" sprawdzic, zanim zmontuje uklad

    0