eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikasdcc i at89c51 - dostęp do pinu "na około"Re: sdcc i at89c51 - dostęp do pinu "na około"
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.P
    OSTED!not-for-mail
    From: Janusz <j...@o...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: sdcc i at89c51 - dostęp do pinu "na około"
    Date: Tue, 14 Mar 2017 19:54:09 +0100
    Organization: ATMAN - ATM S.A.
    Lines: 63
    Message-ID: <oa9e8j$i2q$1@node1.news.atman.pl>
    References: <oa9bgq$7fd$1@news.icm.edu.pl>
    NNTP-Posting-Host: 185.53.155.186
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node1.news.atman.pl 1489517651 18522 185.53.155.186 (14 Mar 2017 18:54:11
    GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Tue, 14 Mar 2017 18:54:11 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:45.0) Gecko/20100101 Thunderbird/45.8.0
    In-Reply-To: <oa9bgq$7fd$1@news.icm.edu.pl>
    X-Antivirus: avast! (VPS 170314-2, 2017-03-14), Outbound message
    X-Antivirus-Status: Clean
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:714732
    [ ukryj nagłówki ]

    W dniu 2017-03-14 o 19:07, Atlantis pisze:
    > Ciąg dalszy moich eksperymentów z archaicznymi mikrokontrolerami. ;)
    >
    > Już kiedyś pytałem, czy da się w jakiś sposób przesłać wygodną
    > konstrukcję wskazującą bezpośrednio na pin (np. "P0_0") za pomocą
    > wskaźnika w C. Otrzymałem odpowiedź, że się nie da i muszę to robić w
    > sposób standardowy.
    >
    > Natknąłem się jednak na pewne problemy... Próbuję przeportować pewną
    > bibliotekę do obsługi przycisków (debouncing + wykrywanie długiego
    > wciśnięcia). Kod podpatrzony w jednej z książek pana Kardasia, z paroma
    > moimi modyfikacjami.
    >
    > Generalnie sprowadza się do tego, że mam strukturę opisującą przycisk:
    >
    > typedef struct key {
    > unsigned char *port;
    > unsigned char pin:3;
    > unsigned char state:4;
    > unsigned int timer;
    > void (*push_proc)(void);
    > void (*long_proc)(void);
    > } key_t;
    >
    > Struktura jest inicjowana za pomocą funkcji key_init(), która przypisuje
    > argumenty do struktury przekazanej przez wskaźnik, czyli wygląda to w
    > ten sposób:
    >
    > key_init(&button2, &P0, 0, funkcja, funkcja);
    >
    > Kolejne argumenty oznaczają: adres struktury, adres portu, numer pinu w
    > porcie, wskaźnik na funkcję wykonywaną po krótkim wciśnięciu przycisku i
    > wskaźnik na funkcję wykonywaną po przytrzymaniu przycisku.
    >
    > Potem stan przycisku jest cały czas sprawdzany wewnątrz funkcji
    > key_update(), która przyjmuje za argument adres struktury.
    >
    > Tyle tytułem wprowadzenia.
    >
    > Sęk w tym, że kod nie chce działać. Drogą eliminacji doszedłem do tego, że:
    > 1) Same wejścia cyfrowe działają - odwołanie się do nich bezpośrednio
    > daje pozytywny efekt.
    > 2) Działa także konstrukcja key_press = !(P0 & (1<<NUMER_PINU))
    > 3) Program wchodzi do funkcji key_update.
    >
    > NIE DZIAŁA natomiast następująca konstrukcja:
    >
    > key_press = !(*(key->port) & (1<<(key->pin)));
    >
    > Strukturę inicjuję podając dane właściwego portu i pinu, a pomimo tego
    > wciskanie przycisku nie jest widoczne.
    >
    > I teraz pytanie: co jest nie tak. Czyżbym w sdcc i/lub at89c51 nie mógł
    > przesyłać w ten sposób informacji o porcie? A może po prostu coś
    > przeoczyłem i w powyższej linijce tkwił jakiś banalny błąd, który umyka
    > mojej uwadze, gdy na nią patrzę?
    >
    Zobacz w asemblerze jak to kompilator przetłumaczył, może się okazać że
    poszedł w maliny.

    --
    Pozdr
    Janusz

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: