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.

TIMER AT89S8252

clipie 24 Sty 2006 16:13 1153 13
  • #1 24 Sty 2006 16:13
    clipie
    Poziom 16  

    Program: w petli glownej wlsciwie oprocz incjalizacji timera i kilku inych rzeczy niema nic (malo kodu) na koncu petla nieskonczona.
    Wszystko odbywa sie w obsludze timera, siedzi tam sporych rozmiarow kod, jest duzo skokow i podprogramow (to czy beda wykonane zalezy od aktualnego stanu portow - WAZNE).

    Umiejscowienie w notatniku - od gory pierwsze w kolejnosci sa deklaracje Potem obsluga timera nastepnie program glowny, na koncu wszytkie podprogramy (z ktorych kozysta zarowno timer jak i program glowny)

    kompilator: keil uvision2

    Problem: po klikniciu run w debugerze, wszytsko jest ok dopuki stan portow bedzie taki sam, gdy sie przy nich zacznie majstrowac (brobujac zasymulowac dzialnie w rzeczywistosci). Po wyjsciu z przerwania (zaraz po RETI) zamiast kontynuowac petle nie skonczoną w programie glownym skacze do jakigos niestworzonego adresu(tutaj konczy zabawe i sie wykrzacza), przyczym ten adres jest taki sam dla okreslinej liczby wykonanych podprogramow (dla okreslonego stanu portow).

    kazdy podprogram ma ret i w ogole
    Ze wskaznikiem stosu jest wszytko wporzadku.

    Nie mam pojecia co robic.

    0 13
  • #2 24 Sty 2006 16:27
    ko_rex
    Poziom 19  

    no..wygląda to tak, jakby coś sie działo z zawatością stosu... Nie nachodzi Ci stos przypadkiem na jakieś zmienne w RAM?
    Spróbuj przesymulować w jakimś innym programie.

    0
  • #3 24 Sty 2006 23:12
    clipie
    Poziom 16  

    hmm zmienne w RAM (?), czyli kompilator nieprzewidzial miejsca na stos?
    i czy wogole stos jest wciskany w przestrzen pamieci dostepnej urzytkownikowi? Program nie wykozystuje zadnych tablic.

    ze stosem jest wszytko wporzadka, w przerwaniu nie ma podprogramow zagnierzdzonych (jesliby nie liczyc przerw. TO). Stos maksymalnie liczy sobie 5 (T0>acc>b>psw + podprogram).

    Dodam ze program zawsze po wyjsciu z przerwania skacze do poczatku samego programu glownego (!?) a powinien skoczyc do "sjmp $"

    0
  • #4 25 Sty 2006 00:20
    zumek
    Poziom 39  

    W obsłudze przerwania T0 , cyklicznie zmieniasz stan bitu RS0 , co przy pierwszym wywołaniu przerwania ustawia bank rejestrów na 1 (08H-0Fh)

    Code:

       ORG   0BH

       MOV   TH0,#0FDH
       MOV   TL0,#00H

       PUSH   ACC       ; save A,B i PSW
       PUSH   B
       PUSH    PSW
       
       CPL   RS0             ;tu zmieniasz bank rejestrów z 0  na  1


    Stos domyślnie ustawiony jest na 07H.Przerwanie odkłada na stosie (08H i 09H) adres powrotu , który w procedurze przerwania nadpisujesz :(
    Code:

    KREC:
       MOV   B,K_S_SIL
       MOV   A,K_S_SIL
       RL   A
       ANL   A,B
       ANL   A,#10101010B
       MOV   R0,A                  ;tu "zamazujesz" adres powrotu


    Symulator , to nieocenione narzędzie , jeśli pozwala kontrolować stos :D
    Symulato od razu wywalił ostrzeżenie , o nadpisaniu adresu powrotu z przerwania T0.

    Piotrek

    0
  • #5 25 Sty 2006 05:23
    Jellyeater
    Poziom 17  

    Czyli on odkłada adres powrotu do rejestru R0? Ale ja u sibie korzystałem z timerów, z rejestrów i działało...

    0
  • #6 25 Sty 2006 09:54
    PePe996
    Poziom 15  

    Jellyeater napisał:
    Czyli on odkłada adres powrotu do rejestru R0? Ale ja u sibie korzystałem z timerów, z rejestrów i działało...


    ale moze miales stos w innym miejscu pamieci, anizeli rejestr do ktorego cos sam zapisujesz...

    0
  • #7 25 Sty 2006 16:36
    Jellyeater
    Poziom 17  

    Nic nie zmieniałem. Nie ustawiałem mu stosu...

    0
  • Pomocny post
    #8 25 Sty 2006 20:58
    zumek
    Poziom 39  

    Jellyeater napisał:
    Czyli on odkłada adres powrotu do rejestru R0? Ale ja u sibie korzystałem z timerów, z rejestrów i działało...

    ON nie odkłada adresu powrotu do R0 , tylko do komórki , na którą wskazuje wskanik stosu . A że wskaźnik stosu po resecie wskazuja na 07H , a po zmianie banku rejestrów na 1 , rejestr R0 "przenosi się" pod adres 08H , to już programista powinien o tym wiedzieć , że stos "wlezie" na aktualnie używany bank rejestrów :( Powinieneś jeszcze troszkę się "dokształcić" w tej materii , bo możesz miec kłopoty :D Najprostrzym wyjściem jest ustawienie SP , powyżej pamięci używanej przez program i po kłopocie - w tym przypadku MOV SP,#4FH ;)

    Piotrek

    0
  • #9 25 Sty 2006 21:17
    clipie
    Poziom 16  

    Jest pieknie, program juz nie stwarza problemow <happy>, mozna pracowac dalej.

    Gratulacje dla tego pana w czerwonym.

    0
  • #10 14 Wrz 2006 18:17
    clipie
    Poziom 16  

    Nowy problem

    Chce oprogramowac timer 2 tegoż uk.
    Kompilator (po staremu: keil2) nie widzi zadnego dodtakowego rejestru z SFR - nic ponadto co jest w golutkim 8051.
    Podczas kompilowania Bląd: UNDEFINED SYMBOL dla np. T2CON albo RCAP2H

    Jako device w opcjach projektu zaznaczony oczywiscie at89s8252, z programowaniem problemu nie ma (naturalnie tylko w tegdy gdy kompilacja przebiegnie pomyslnie).

    Co robic?

    0
  • #11 14 Wrz 2006 18:45
    zumek
    Poziom 39  

    clipie napisał:
    ...Podczas kompilowania Bląd: UNDEFINED SYMBOL dla np. T2CON albo RCAP2H
    ...
    Co robic?

    "Zapoznać" kompilator z tymże mikrokontrolerem , poprzez #include <at898252.h>

    Piotrek

    0
  • #12 14 Wrz 2006 18:49
    clipie
    Poziom 16  

    ok, a jesli pisze w asemblerze?

    0
  • Pomocny post
    #13 14 Wrz 2006 19:13
    zumek
    Poziom 39  

    clipie napisał:
    ok, a jesli pisze w asemblerze?

    A cóż to za różnica :?:
    Składnia będzie inna niż w C , ale cel ten sam.
    No i żeby uniknąć kolejnego postu w postaci "wywala błędy" , podam przykład:
    Code:

    $NOMOD51                           ;"wyłączamy" domyślny plik
    $INCLUDE (AT898252.INC)     ;dołączamy nas interesujący
       sjmp   reset
    reset:
       nop
       sjmp reset
       end


    Piotrek

    0
  • #14 14 Wrz 2006 20:18
    clipie
    Poziom 16  

    Juz dziala, za przyklad dziekuje.
    Szybka fachowa pomoc, supper :)

    0