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.

8051 i obsluga przerwan w asmie

Jethro 25 Kwi 2004 16:08 1124 6
  • #1 25 Kwi 2004 16:08
    Jethro
    Poziom 17  

    Czy ktos moglby mi napisac przykladowa obsluge przerwania od timera, bo ja napisalem ale dziala to dziwnie.Za pierwszym razem obsluguje przerwanie i skacze do podprogramu a potem jak wraca to juz do sjmp $ na koncu i licznik sie nie laduje do zadanej wartosci i liczy od zera, ale problem wiekszy w tym ze jak juz sie przepelni to nie obsluguje przerwania (nie skacze do podprogramu).
    Jeszcze jest taka druga sprawa.Uzylem timera 0 do odmierzania czasu (pracuje on w trybie 1) i czy w TL0 zwiekszanie wartosci powinno byc czasami co 2 a czasami o 1 ? Bo czy takie liczenie bedzie mi odliczac dokladnie czas ? Uzywam takiego czegos jak avsim.Moze to jest problem ?

    0 6
  • #2 25 Kwi 2004 17:26
    frohme
    Poziom 21  

    Napisz jakie czasy chcesz odmierzać, i czy koniecznie to musi być ten timer, a potem coś przyślę. Aha, jeszcze częstotliwość zegara.

    0
  • #3 25 Kwi 2004 17:27
    olekewaagata
    Poziom 25  

    Wrzuć swój program na elektrodę z dokładnym komentarzem co robisz
    a wtedy napewno ktoś go przeanalizuje i poprawi ewentualne błedy.
    A tak na szybko: czy kończysz obsługę przerwania rozkazem RETI,
    czy po wejściu do obsługi przerwania na nowo ustawiasz TL0 i TH0
    (a powinieneś na taką wartość jaki czas chcesz uzyskać)
    Nie znam avsim, ale przypuszczam , że jest to jakiś
    symulator, natomiast upewniłbym się czy jest on do MCS-51.

    0
  • #4 25 Kwi 2004 17:47
    Jethro
    Poziom 17  

    Bawie sie tym teraz i juz chyba dziala.Wciaz dziwi mnie to ze TL0 laduje sie co 2 a nie co 1.To dopiero poczatek mojego projektu wiec w tych podprogramach start stop sa jakies przykladowe rzeczy.Potem bede potrzebowal jeszcze obslugi lcd.Jeszcze nie wiem jak.Pewnie to bedzie trudne.

    0
  • #5 25 Kwi 2004 18:13
    olekewaagata
    Poziom 25  

    1. przed ljmp dla formalnosci powinienes napisac ORG 0 bo to jest
    początek programu
    2. TH0_SET equ 240 nie ustawia wartości 240 w th0_set tylko
    wskazuje że ten bajt jest pod adresem 240, i tak samo dla tl0_set oraz
    dla ss , dodatkowo taka deklaracja przypisuje R0 adres ss
    3. aby jednak uzyskać potrzebne wartości w tho i tl0 w TIM_4ms dołoż
    MOV TH0_SET,#240 i MOV TL0_SET,#96
    4. nie musisz dawac org 100 poniewaz zostawiasz dziure w kodzie
    programu (marnujesz pamięć programu)
    Na twoim miejscu wyprowadziłbym na jeden pin procka sygnał z
    klawiatury żeby mieć wgląd w działanie programu, nawet woltomierzem.
    Powodzenia Olek.
    Ps. Swoje komórki th0_....ss zadeklarój od adresu np 30h czyli
    tl0_set equ 30h
    th0_set equ 31h
    ss equ 32h

    0
  • #6 25 Kwi 2004 18:29
    micro
    Poziom 19  

    :arrow: Jthro wysłałem Ci troszke teorii znalezionej na Elce zresztą :).

    0
  • #7 25 Kwi 2004 18:36
    fantom
    Poziom 31  

    olekewaagata napisał:

    TH0_SET equ 240 nie ustawia wartości 240 w th0_set tylko
    wskazuje że ten bajt jest pod adresem 240, i tak samo dla tl0_set oraz
    dla ss , dodatkowo taka deklaracja przypisuje R0 adres ss

    A to dobre.Przeciez dyrektywa equ definiuje stala a nie zaden adres a to w jaki sposob to wykorzystasz i jak to bedzie rozpoznane to juz od ciebie zalezy.

    0