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

[ATmega][C] Zamiana nazw pinów między portami(wirtualny port)

loczi 27 Gru 2011 19:10 1240 3
REKLAMA
  • #1 10310020
    loczi
    Poziom 13  
    Witam, czy jest możliwość stworzenia "wirtualnego portu"

    Powiedzmy wirtualny PORTX gdzie:
    *0 = PORTA.1
    *1 = PORTA.4
    *2 = PORTB.4
    *3 = PORTC.4
    *4 = PORTD.1
    *5 = PORTD.2
    *6 = PORTD.0
    *7 = PORTD.4

    i potem wyświetlanie danych PORTX = 0x33;

    myślę że sam język C to udostępnia ale nie wiem jak to nawet nazwać konkretnie.
  • REKLAMA
  • #2 10310051
    ololukiXP
    Poziom 19  
    Chcesz, żeby dowolne piny z różnych portów można było obsługiwać jak jeden port? Może po prostu użyj polecenia #define? Ewentualnie napisz funkcję, która będzie kolejne bity w portach ustawiać/kasować, a ty będziesz podawać żądaną wartość jako argument tej funkcji np.
    
    void PORTX(unsigned char DataToWrite)
    {
    if(DataToWrite & 0x01)
    	PORTA |= (1 << PA1);
    else
    	PORTA  &= ~(1 << PA1);
    
    if(DataToWrite & 0x02)
    	PORTA |= (1 << PA4);
    else
    	PORTA  &= ~(1 << PA4);
    
    if(DataToWrite & 0x04)
    	PORTB |= (1 << PB4);
    else
    	PORTB  &= ~(1 << PB4);
    }
    
  • REKLAMA
  • #3 10310329
    xamrex
    Poziom 28  
    Wydaje mi się, że najlepiej tak jak pisał kolega przez #define
    np.
    #define PORT0 PORTA.1
    #define PORT1 PORTA.4

    itp..
  • #4 10312289
    loczi
    Poziom 13  
    To co napisał ololukiXP to wiedziałem, tylko o tyle jest złe, że zabiera takty a PORTA = 0x33; zabiera dużo mniej.

    Co do odpowiedzi xamrex to wiadomo że takie coś się stosuje ze względów, że łatwiej zapamiętać np nazwe LED1 niz PORTA4 ;-)

    Jeśli ktoś by wiedział jak zrobić "witrualny port" czy aliasy na port czy jak tylko to można nazwać to dobrze by było ;)
REKLAMA