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

[AVR] [AVR][C] Jak ustawić 0 na PD1 bez sprawdzania poprzedniego stanu?

lukisio 18 Kwi 2012 22:14 1315 5
REKLAMA
  • #1 10809816
    lukisio
    Poziom 12  
    Witam
    Mam problem z operatorami bitowymi. Wiem, że:
    PORTD |= (1<<PD1); - ustawi mi 1 na PD1 niezależnie od stanu poprzedniego na tym porcie
    PORTD ^= (1<<PD1); - jeśli na PD1 jest 1 to ustawi mi 0 a jeśli 0 to ustawi 1
    PORTD &= (1<<PD1); - jeśli na PD1 jest 1 to ustawi mi 1 a jeśli 0 to ustawi 0

    Natomiast nie mogę zupełnie ogarnąć w jaki sposób ustawić na PD1 0 bez sprawdzania jaka była poprzednia wartość na tym porcie. Wiem, że pytanie dla niektórych banalne, ale proszę o pomoc mimo wszystko.
  • REKLAMA
  • Pomocny post
    #2 10809827
    sulfur
    Poziom 24  
    lukisio napisał:
    PORTD &= (1<<PD1); - jeśli na PD1 jest 1 to ustawi mi 1 a jeśli 0 to ustawi 0
    To jest nieprawda.
    lukisio napisał:
    Natomiast nie mogę zupełnie ogarnąć w jaki sposób ustawić na PD1 0 bez sprawdzania jaka była poprzednia wartość na tym porcie.
    PORTD &= ~(1<<PD1);
  • REKLAMA
  • Pomocny post
    #3 10809904
    michalko12
    Specjalista - Mikrokontrolery
    PORTD &= (1<<PD1); Wyzeruje wszystkie inne oprócz PD1
  • REKLAMA
  • #4 10809925
    lukisio
    Poziom 12  
    sulfur napisał:
    lukisio napisał:
    PORTD &= (1<<PD1); - jeśli na PD1 jest 1 to ustawi mi 1 a jeśli 0 to ustawi 0
    To jest nieprawda.


    To jeśli miałem wcześniej 1001101 to jak będę miał po tej komendzie?

    sulfur napisał:
    lukisio napisał:
    Natomiast nie mogę zupełnie ogarnąć w jaki sposób ustawić na PD1 0 bez sprawdzania jaka była poprzednia wartość na tym porcie.
    PORTD &= ~(1<<PD1);


    Dzięki ci! Pomogło! :D Stosowałem wcześniej ~ tylko do całego portu.
  • REKLAMA
  • Pomocny post
    #5 10809927
    gaskoin
    Poziom 38  
    michalko12 napisał:
    PORTD &= (1<<PD1); Wyzeruje wszystkie inne oprócz PD1


    Zależy co było wcześniej w PD1.

    lukisio napisał:
    sulfur napisał:
    lukisio napisał:
    PORTD &= (1<<PD1); - jeśli na PD1 jest 1 to ustawi mi 1 a jeśli 0 to ustawi 0
    To jest nieprawda.


    To jeśli miałem wcześniej 1001101 to jak będę miał po tej komendzie?


    00000000 czyli trochę inaczej niż powiedziałeś :)
  • #6 10809945
    lukisio
    Poziom 12  
    gaskoin napisał:
    michalko12 napisał:
    PORTD &= (1<<PD1); Wyzeruje wszystkie inne oprócz PD1


    Zależy co było wcześniej w PD1.

    lukisio napisał:
    sulfur napisał:
    lukisio napisał:
    PORTD &= (1<<PD1); - jeśli na PD1 jest 1 to ustawi mi 1 a jeśli 0 to ustawi 0
    To jest nieprawda.


    To jeśli miałem wcześniej 1001101 to jak będę miał po tej komendzie?


    00000000 czyli trochę inaczej niż powiedziałeś :)


    No tak! To już wiem dlaczego nie mogłem znaleźć rozwiązania :) Dzięki!
REKLAMA