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

Prośba o sprawdzenie programu.(dołączyłem go tym razem)

kaka22 29 Gru 2007 22:54 1116 6
REKLAMA
  • #1 4638384
    kaka22
    Poziom 18  
    Posty: 375
    Pomógł: 3
    Ocena: 4
    Witam.

    Jest to mój pierwszy program więc proszę o wyrozumiałość. Napisałem go w bascomie po przeczytaniu kilku stron poświęconych podstawom programowania. W całym programie chodzi oto, że po podaniu np. na Portd.5 stanu niskiego to na Portach C.1 i C.2 będzie stan niski, a na porcie B.1 stan wysoki.

    Z góry dziękuje za wyrozumiałość i porady dotyczące tego programu.

    Pozdrawiam.
    Nie mogę załadować załącznika. Spróbuje jeszcze raz. Proszę moderatora o cierpliwość

    Dodano po 5 [minuty]:

    Oto załącznik w linku. Inaczej sie niestety nie da.

    http://wap.elektroda.net/965381.bas
  • REKLAMA
  • #2 4638688
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #3 4638709
    msgow
    Poziom 27  
    Posty: 725
    Pomógł: 115
    Ocena: 88
    Witam
    A u kolegi bascom nie wywala błędów?
    Port składa się z 8 pinów czyli 8bitów albo bajtu.(portd- portd.0;portd.1;.....do portd.7 czyli 8pinów
    Więc taki zapis portd.4=255 jest błędny bo jednemu bitowi nie możemy nadać wartości 255 możemy albo 0 albo 1.(a prawidłowo portd.4=1 albo0 )
    Taki zapis jest poprawny portc=255 co jest równoważne z 11111111 czyli na wszystkich pinach jest stan wysoki od portc.0 do portc.1.
    "
    CONFIG PORTx = tryb
    CONFIG PINx.y = tryb


    gdzie:

    tryb Możliwe jest podanie symboli: INPUT gdy port (końcówka) ma być wejściem lub OUTPUT gdy port (końcówka) ma być wyjściem. Można także użyć wartości bitowej aby szybko skonfigurować poszczególne linie portu.
    "
    U mnie poprawiony program wyglądał tak:
    regfile = "m8def.dat"
    
    $crystal = 8000000
    
    Config Pind.4 = Input ' Bascom zgłaszał mi błąd pierwotnie było Config Portd.4 poprawnie   Config Pind.4  i tak dla wszystkich gdzie używamy pinów .
    Config Pind.5 = Input
    Config Pind.6 = Input
    Config Pind.7 = Input
    Config Portc = Outpu
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Output
    Config Pinb.4 = Output
    
    Do
    If Portd.4 = 0 Then
    Portc.0 = 0
    End If
    
    If Portd.5 = 0 Then
    Portc.1 = 0
    Portc.2 = 0
    Portb.1 = 1
    End If
    
    If Portd.6 = 0 Then
    Portc.2 = 0
    Portc.3 = 0
    Portc.4 = 0
    Portc.5 = 0
    Portb.4 = 0
    Portb.2 = 1
    End If
    
    If Portd.7 = 0 Then
    Portc.1 = 0
    Portc.2 = 0
    Portc.3 = 0
    Portc.4 = 0
    Portc.5 = 0
    Portb.3 = 1
    End If
    Loop
    End                                                         'end program

    Pozdrawiam i zachęcam do lektury helpów

    Kod proszę umieszczać w znacznikach code - krzychoocpp
  • #4 4639634
    kaka22
    Poziom 18  
    Posty: 375
    Pomógł: 3
    Ocena: 4
    Dziękuję za odpowiedzi. Rację miał msgow. Wystarczyło poprawić w definiowaniu portów Port na Pin i wszystko gra.
  • REKLAMA
  • #5 4640131
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #6 4645158
    kaka22
    Poziom 18  
    Posty: 375
    Pomógł: 3
    Ocena: 4
    Mam jeszcze 1 pytanie. po podaniu stanu niskiego na port wejścia to na jego porcie wyjściowym stan niski będzie się utrzymywać czy "zaniknie" naraz po zaniku stanu niskiego (w tym przypadku podawanego przez microswith) na porcie wejścia?
    Z góry THX i pozdrawiam
  • #7 4646049
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

✨ Dyskusja dotyczy poprawności programu napisanego w Bascomie dla mikrokontrolera Atmega8, który ma reagować na stan niski na pinie Portd.5, ustawiając odpowiednie stany na portach wyjściowych Portc.1, Portc.2 i Portb.1. Głównym błędem było mylne użycie rejestrów Port zamiast Pin do odczytu i zapisu stanów poszczególnych pinów (np. Portc.1 = 0 zamiast Pinc.1 = 0). W Bascomie do konfiguracji kierunku pinów używa się "Config Portx = Input/Output", natomiast do odczytu i zapisu stanów pojedynczych pinów stosuje się "Pinx.y". Niepoprawne było także przypisywanie wartości 255 pojedynczemu bitowi, co jest błędem, ponieważ pojedynczy pin może mieć wartość tylko 0 lub 1. Po poprawkach program działa zgodnie z założeniami. Dodatkowo omówiono zachowanie stanu wyjściowego – utrzymuje się on tak długo, jak zaprogramowano, czyli po zaniku stanu niskiego na wejściu stan na wyjściu nie zanika automatycznie, zależy to od implementacji w kodzie.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA