logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom AVR / Atmega32 - Przesyłanie w zmiennych informacji o portach

MES Mariusz 15 Sty 2013 07:36 2577 6
  • #1 11790886
    MES Mariusz
    Poziom 36  
    Chcę osiągnąć następujący efekt:

    Input Zmienna1
    Input Zmienna2

    // i teraz chciałbym żeby zawartość Zmienna1 potraktowana była jako port.
    // zawartość (zmienna a nie stała a więc nie chodzi tu o alias)

    Nie sądzę, by zawartość zmiennej, nawet jeśli będzie to "portb.1" zinterpretowana została rzeczywiście jako portb.1

    Innymi słowy nawet jeśli zawartość zmiennej Zmienna1 będzie równa "portb.1" a zawartość Zmienna2 będzie "portb.2", to i tak zmienna1 = zmienna2 nie da mi tego co portb.1 = portb.2.

    Nie za bardzo wiem, jak uzyskać taki efekt, przesyłania nazwy/defnicji portu w zmiennej by wykonywać na nim operacje. Ma ktoś jakiś pomysł?

    Warunki w stylu: if zmienna1 = "portb.1" then... wyczerpujące wszystkie możliwości kombinacji wpisanych portów oczywiście odpadają.

    if zmienna1 = "portb.1" and zmienna1 = "portb.2" then ... = ...

    W miejscu kropek nic nie ma być sztywno wpisane ma to być odczytane ze zmiennych.

    Pomysły?
  • #2 11823459
    kamyczek
    Poziom 38  
    Coś enigmatycznie i mało przejrzyście to tłumaczysz napisz jakio rozmiar ma zmienna i co ma zrobić . Jeśli chcesz żeby robiła operacje na porcie możesz to osiągnąć przez wybór typu"case" lub zmienna tablicową czyli w zależności od pobranej zmiennej wybierasz wartość z tablicy i wysyłasz ją na port
  • #3 11828198
    MES Mariusz
    Poziom 36  
    kamyczek napisał:
    w zależności od pobranej zmiennej wybierasz wartość z tablicy i wysyłasz ją na port

    Sedno jest w tym, na który port...

    Chcę osiągnąć efekt. Po uarcie przychodzi tekst "portb.1". Ja chcę, żeby kompilator zrozumiał to dosłownie.

    Nie chcę wykonywać
    if zmienna_od_uart$ = "portb.1" then set portb.1

    Potrzebuję wykonać coś w rodzaju:
    set [zmienna_od_uart$]

    Po co takie kombinacje? Mam sytuację, gdzie program pyta użytkownika o dwa parametry (nazwy portów), o port źródłowy i port docelowy. Następnie ma wykonać operację kopiowania wartości logicznej portu ze źródłowego na docelowy. Gdybym chciał to osiągnąć warunkami typu:
    if port_zrodlowy$ = "portb.1" and port_zrodlowy$ = "portb.2" then portb.2 = portb.1
    Przy założeniu, że wykorzystywane jest 12 linii IO kombinacji będzie duuużo. Dlatego potrzebowałbym ograniczyć się do:

    [port_docelowy$] = [port_zrodlowy$] bez wykonywania setek porównań i warunków.
  • #4 11828220
    piotrva
    VIP Zasłużony dla elektroda
    Nie da się. Jak dla mnie dla 16 linii io są 32 warunki. Pierwsze kopiuję stan pinN.X do zmiennej tymczasowej, potem kopiuję wartość zmiennej na okryŁ.Y. A jeśli chcesz bez tylu warunków to albo trzebaby poza zamianą nazwy portu na adres pisać wstawkę asm, albo przesiąść się na C.

    Dodano po 2 [minuty]:

    Dodam że Bascom obsługuje numer pinu zadany zmienną więc można pisać port.zmienna = pinb.zmienna2

    Dodano po 9 [minuty]:

    A tak wogóle po co Ci coś takiego?
  • #5 11828442
    kamyczek
    Poziom 38  
    Jeśli dobrze cię zrozumiałem chcesz wysyłać zmienna szeregowo na wskazany pin portu X
    czy chcesz tą zmienna wyświetlić na całym porcie (równolegle) Poza tym w mikrokontrolerach nie ma określenia nie chcę wykonywać warunków . Narysuj proszę jakiś graf tego o ma robić program .
  • #6 11828538
    piotrva
    VIP Zasłużony dla elektroda
    Nie, Autorowi chodzi o to że wysyła do urządzenia po RS232 komendę np.

    i w tym monecie procesor odczytuje wartość logiczną na PB0, i wystawią ją na PD7.
  • Pomocny post
    #7 11828919
    Mundi1970
    Poziom 24  
    Wykombinowałem coś takiego :), przykład można uruchomić w symulatorze (dane wejściowe np. porta.1):

    EDIT: poprawiłem mały błąd w przykładzie, bity można nawet kopiować jeżeli port źródłowy i docelowy jest ten sam

    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA