eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProgramowanie AT89Cxx51 › Re: Programowanie AT89Cxx51
  • Data: 2017-02-24 12:06:51
    Temat: Re: Programowanie AT89Cxx51
    Od: "J.F." <j...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Użytkownik "Piotr Gałka" napisał w wiadomości grup
    dyskusyjnych:o8p09b$l8c$...@n...chmurka.net...
    W dniu 2017-02-23 o 21:07, Zbych pisze:
    >>> Wydaje mi się, że skoro P0_7 jest już samo w sobie adresem pinu
    >>> (czyli
    >>> wskaźnikiem na pin) to może uda Ci się obejść bez wskaźników na
    >>> ten
    >>> wskaźnik.
    >>> Warunkiem jest żeby C potrafiło korzystać z rozkazów assemblera z
    >>> adresowaniem bitowym.
    >> Adresowanie bitowe w '51 wymaga podania numeru bitu od razu w
    >> rozkazie,
    >> nie ma trybu adresowania pośredniego przez rejestr.
    >
    >Całkiem być może, że nie ogarnąłem sedna zagadnienia.
    >Rozumiałem, że:
    >Atlantis chce przechowywać wskaźniki na piny. A ponieważ we
    >wcześniejszych jego pracach (z innymi procesorami) wymagało to użycia
    >jakichś wskaźników w C to teraz też myśli jak zrobić sobie wskaźniki
    >na te numerki określające bitowe adresy pinów.
    >Z jego wypowiedzi rozumiałem, że dotychczas przechowywał wskaźniki na
    >piny, a nie wskaźniki na wskaźniki na piny.
    >---- koniec opisu jak ja to rozumiałem ----
    >Chciałem jedynie zwrócić uwagę, że _być_może_ szuka czegoś co ma
    >gotowe, że _być_może_ wystarczy posłużyć się (i przechowywać) te
    >bitowe adresy pinów.

    Ale wlasnie nie mozesz.

    Mozesz napisac w C np
    P0_7 = 1
    i miec nadzieje, ze kompilator skompiluje z uzyciem wlasciwych
    rozkazow.

    Ale nie mozesz napisac
    wskaznik = P0_7 ;
    ....
    *wskaznik = 1 ;

    bo ... nie ma takiego rozkazu, ktory moglby kompilator uzyc, aby
    potrafil zaadresowac bit o numerze w jakims rejestrze podanym.

    wiec nie da sie np zrobic funkcji ktora poczeka na nacisniecie
    klawisza,
    cos w rodzaju
    void function wait_for_key(int keynr)
    {
    ....
    }

    (zadziala jako macro)

    Nie da sie tez zrobic petli sprawdzi bity po kolei itp ...

    >Nigdy nie używałem C dla żadnego mikrokontrolera. Wyobrażałem sobie,
    >że C musi być trochę rozszerzane pod dany procesor.
    >Czyli zakładałem, że w C dla 51-ki powinna być jakaś funkcja
    >biblioteczna typu setbit() przyjumująca jako parametr jego adres i
    >potrafiąca przetłumaczyć to na assembler nawet jak nie ma adresowania
    >przez rejestr.

    No i zakladam, ze C jest rozszerzone (w odpowiednio ambitnym
    kompilatorze), i kompilator potrafi to skompilowac ... o ile adres
    jest znany w czasie kompilacji.
    Inaczej, to pozostaja dwie mozliwosci:

    1) przygotowujemy sobie odpowiedni rozkaz w pamieci i wykonujemy go.
    cos typu
    setbit: ; A zawiera nr bitu
    mov setbitr+1, A
    setbitr: setb 0
    ret

    ha, ha - zycze powodzenia na 8051, z jej rozdzielonymi pamieciami
    :-)
    ale jesli system zawiera dodatkowy RAM, ktory bedzie widoczny jako
    pamiec zewnetrzna i programu jednoczesnie, to moze by sie nawet udalo
    (np na tym DScostam z bateryjka).

    2) przygotowujemy sobie siec rozkazow:
    setb 0
    ret
    setb 1
    ret
    setb 2
    ret
    ....

    i wyliczamy sobie to ktorego adresu skoczyc ... imo - niemal
    niedopuszczalne, ale jak trzeba, to trzeba :-)


    J.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: