-
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
Następne wpisy z tego wątku
- 14.03.17 21:03 Atlantis
- 14.03.17 21:09 Zbych
- 14.03.17 21:21 a...@m...uni.wroc.pl
- 14.03.17 21:34 Atlantis
- 14.03.17 22:02 Atlantis
- 14.03.17 22:29 Atlantis
- 15.03.17 01:42 J.F.
- 15.03.17 01:46 J.F.
- 15.03.17 07:51 Atlantis
- 15.03.17 08:57 Atlantis
- 15.03.17 09:57 Piotr Gałka
- 15.03.17 10:21 J.F.
- 15.03.17 10:27 J.F.
- 15.03.17 10:50 Piotr Gałka
- 15.03.17 11:16 J.F.
Najnowsze wątki z tej grupy
- w czasach LED komary mają ciężko
- walizka z kodami
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
- Fajny film widziałem...
- Jaka ładowarka sieciowa do Iphona?
- Taśma izolacyjna do prac elektrycznych
- Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Wkrętarki, wiertarki...
- Zasilacz impulsowy 12V 10A, coś godnego uwagi jako zamiennik akumulatora wkrętarki
- Mouser - koszt wysyłki
- [OT] Jak wycinac ksztalt w piance lub styropianie?
Najnowsze wątki
- 2025-07-18 celnicy pobili policjanta
- 2025-07-18 Warszawa => Technik IT - Konfiguracja i Wsparcie Sprzętowe <=
- 2025-07-18 Warszawa => Specjalista ds. Sprzętu IT i Wsparcia Technicznego <=
- 2025-07-18 Białystok => Kotlin Developer <=
- 2025-07-18 Warszawa => Sales Director (Cloud solutions) <=
- 2025-07-18 Spalinowa trauma
- 2025-07-18 Polska => Senior Key Account Manager <=
- 2025-07-18 Białystok => Programista Kotlin <=
- 2025-07-18 Szczecin => Key Account Manager IT <=
- 2025-07-18 Łódź => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-18 Łódź => Mainframe (z/OS, Assembler) Developer <=
- 2025-07-18 Lublin => Delphi Programmer <=
- 2025-07-18 Lublin => Programista Delphi <=
- 2025-07-17 Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- 2025-07-17 Andrzej Duda ułaskawił Roberta Bąkiewicza od zarzutu zapchnięcia ze schodów aktywistki Babci Kasi