logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.
REKLAMA
  • #1 5582812
    LED5W
    Poziom 34  
    Witajcie
    Dopiero zaczynam programować mikrokontrolery (ściślej jednego :)) i mam pewne wątpliwości.
    Pierwsza rzecz o którą mi chodzi to czy można odczytać stan całego portu za pomocą PINx? np.
    IF PINB = &B00000001 THEN

    Druga sprawa jeśli np. jeden z tych pinów jest ustawiony jako wyjście to jaką wartość będzie miał dany bit przy odczycie?
    Mam nadzieję, że w miarę jasno to opisałem. Czekam na odpowiedzi.
  • REKLAMA
  • Pomocny post
    #2 5582941
    K_o_n_r_a_d
    Poziom 23  
    LED5W napisał:

    Pierwsza rzecz o którą mi chodzi to czy można odczytać stan całego portu za pomocą PINx? np.
    IF PINB = &B00000001 THEN

    Tak, można.
    LED5W napisał:
    Druga sprawa jeśli np. jeden z tych pinów jest ustawiony jako wyjście to jaką wartość będzie miał dany bit przy odczycie?
    Nie ma znaczenia czy jest jako wyjście czy jako wejście. Odczytując rejestry PINx odczytujemy aktualny stan portu. Czyli jeśli dany pin jest wyjściem i ma ustawiony stan wysoki to taki tez odczytamy (o ile nie jest na stałe podłączony do masy - wtedy odczytamy stan niski bo taki faktycznie będzie na pinie, co uszkodziłoby pin).
  • REKLAMA
  • #4 5583124
    zumek
    Poziom 39  
    LED5W napisał:
    A jeżeli będę chciał odczytać bity tylko z wejść to mogę napisać
    IF PINB AND DDRB <> 0 THEN

    ?

    A sam nie możesz sprawdzić :?:

    Piotrek
  • REKLAMA
  • #5 5586017
    LED5W
    Poziom 34  
    Właśnie sprawdziłem i jakieś błędy pokazuje.
    Jak to poprawnie rozwiązać?
    Gdy użyję zmiennej (jak niżej) to nie ma błędów.
    Wejscie = Pinb And Ddrb
    If Wejscie <> 0 Then

    Czy można to jakoś inaczej rozwiązać?
  • #6 5586042
    K_o_n_r_a_d
    Poziom 23  
    Po prostu Bascom nie rozumie złożonych działań.
    Tak samo jak nie rozumie: a=b+c*d (trzeba rozbić na pojedyncze działania).
  • #7 5586110
    LED5W
    Poziom 34  
    To głupi jest, przerzucam się na C. :D

    Czyli rozbić mogę tylko za pomocą zmiennej, tak jak wyżej napisałem?

    Swoją drogą trochę to dziwne, że dla przypisania sie tak da, a dla badania warunku nie.

    Dodano po 1 [godziny] 25 [minuty]:

    Znalazłem na dodatek błąd - zamiast ddrb powinny być odwrócone bity tego rejestru - teraz odczytuje stany tylko z wyjść.:| Jak to wpisać?
  • REKLAMA
  • #9 5589274
    LED5W
    Poziom 34  
    K_o_n_r_a_d napisał:

    Wiem, że się stosuje NOT, ale dla Bascoma
    Wejscie = Pinb And Not Ddrb
    to za dużo. A dla mnie dwie zmienne dla jednego porównania to też za dużo (tak mi się wydaje). Proszę pomóż mi, bo oprócz tych zmiennych nie mam pomysłów, a wydaje mi się, że można to jakoś prościej / inaczej zrobić. Jak nie można to też napisz. ;)
  • #11 5589481
    LED5W
    Poziom 34  
    O to mi chodziło. Czyli jedna zmienna musi być.
    Czasami najprostsza rzecz najtrudniej przychodzi do głowy. ;)
    Dzięki
REKLAMA