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

[Bascom] nie można skonfigurować portc

SirKamil90 04 Gru 2008 22:45 1509 13
  • #1 5818954
    SirKamil90
    Poziom 14  
    Witam serdecznie,
    dopiero zaczynam programowanie, i ucze sie na bascom. Mam problem, dlaczego nie moge skonfigurowac portc, a portb i portd moge??
    Pozdrawiam

    [Bascom] nie można skonfigurować portc

    Regulamin, punkt 8.3.
    Przeniosłem z "Programowanie początkujący".
    Poprawiłem temat.

    [Dr.Vee]
  • #2 5819015
    msgow
    Poziom 27  
    Witam
    A prawidłowo wybrałeś typ procesora w kompilatorze?
    W górnym pasku wybierz -Option/Compiler/chip i tam w zakładce chip wybierasz dany typ mikrokontrolera na który aktualnie piszesz program lub chcesz skompilować inny .
    Pozdrawiam
  • #4 5819091
    dawid512
    Poziom 32  
    Pewnie nawet nie wybrał uc, tak trudno wpisać to $regfile="m8def.dat" ? Lub na inny uc nazwy tych plików masz przecież w ustawieniach.
  • #5 5819101
    SirKamil90
    Poziom 14  
    a jakie oznaczenie ma atmega8 w bascomie?
    m8def.dat??

    ok, dzieki bardzo za pomoc ja naprawde jestem zielony w tej dziedzinie jak narazie, ale ucze sie:)

    pozdrawiam
  • #6 5819114
    msgow
    Poziom 27  
    właśnie takie
  • #7 5819124
    SirKamil90
    Poziom 14  
    korrus666 napisał:
    Masz tam za mało o jedną cyfrę musi być osiem a masz napisane siedem jedynek w wierszu
    Config PORTC = &B1111111
    powinno być
    Config PORTC = &B11111111


    ale w atmega8 jest tylko do PC6, nie ma PC7.

    pozdrawiam
  • #8 5819674
    don diego
    Poziom 32  
    SirKamil90 napisał:
    korrus666 napisał:
    Masz tam za mało o jedną cyfrę musi być osiem a masz napisane siedem jedynek w wierszu
    Config PORTC = &B1111111
    powinno być
    Config PORTC = &B11111111


    ale w atmega8 jest tylko do PC6, nie ma PC7.

    pozdrawiam

    W tej chwili ignorujesz PC0 a nie PC7. Zobacz sobie datasheeta, jak są numerowane piny. Zawsze używa się liczby 8-bitowej. To, co wpiszesz na PC7 nie ma po prostu znaczenia, ale musi być.
  • #9 5819684
    mirekk36
    Poziom 42  
    człowieku zapis typu &Bxxxxxxxx jest reprezentacją bajtu, który zawsze składa się z 8 bitów a nie reprezentacją tego co ci się wydaje i musisz to zapamiętać raz na zawsze bo inaczej wciąż będziesz miał błędy przy kompilacji.

    np procek ATtiny2313 ma w miejscu 2 pinów do których się podłącza rezonator możliwość zaprogramowania ich jako piny portu A, ale tylko 2, pomimo to gdy się robi zapis w postaci binarnej do portu to pisze się

    PORTA = &Bxxxxxx00
    PORTA = &Bxxxxxx11 itd

    a w miejsce tych x-ów możesz wstawić co chcesz i tak to na nic nie będzie miało wpływu. (a zgodnie z twoją teorią trzeba by było napisać PORTA = &B00 - i znowu wyszedłby ci dziwoląg, którego żaden kompilator nie może strawić)
  • #10 5820441
    K_o_n_r_a_d
    Poziom 23  
    don diego napisał:
    SirKamil90 napisał:
    korrus666 napisał:
    Masz tam za mało o jedną cyfrę musi być osiem a masz napisane siedem jedynek w wierszu
    Config PORTC = &B1111111
    powinno być
    Config PORTC = &B11111111


    ale w atmega8 jest tylko do PC6, nie ma PC7.

    pozdrawiam

    W tej chwili ignorujesz PC0 a nie PC7. Zobacz sobie datasheeta, jak są numerowane piny. Zawsze używa się liczby 8-bitowej. To, co wpiszesz na PC7 nie ma po prostu znaczenia, ale musi być.
    Zapisem:
    Config PORTC = &B1111111
    (7 jedynek) nic się nie ignoruje. W ten sposób do rejestru DDRB wpisujemy wartość 127 czyli najbardziej znaczący bit będzie miał wartość 0 a pozostałe 1.

    Zapis &Bxxx reprezentuje zwykłą liczbę i nie ma znaczenia ile bitów zapiszemy w ten sposób. Zawsze zapisane bity są wyrównane do najmniej znaczącego z pozostałe są zerowane.
    Jeśli chcemy PB1, PB2 i PB3 ustawić jako wyjścia a pozostałe piny PORTuB jako wejścia to możemy zapisac to:
    Config Portb = &B111
    Żaden bit PORTuB nie zostanie w ten sposób zignorowany.
    Co gorsze (albo i lepsze, zależy jak bardzo rozumie się co się robi) możemy zrobić nawet tak:
    Config Portb = 271 
    271(d)=100001111(b) i też ta wartośc zostanie wyrównana do najmłodszego bitu i obcięta (czyli PB7, PB6, PB5 i PB4 - wejścia a pozostałe wyjścia). Bascom nie zgłosi błędu.

    Dodano po 2 [minuty]:

    mirekk36 napisał:
    człowieku zapis typu &Bxxxxxxxx jest reprezentacją bajtu, który zawsze składa się z 8 bitów a nie reprezentacją tego co ci się wydaje i musisz to zapamiętać raz na zawsze bo inaczej wciąż będziesz miał błędy przy kompilacji.
    Nie jest reprezentacją bajtu ale reprezentacją liczby. Do zmiennej typu WORD tez można w ten sposób wpisywać wartość i zapis binarny tej wartości tez nie musi mieć 16 znaków.

    Dodano po 6 [minuty]:

    Podsumowując: jedynym niebezpieczeństwem w skróconym zapisie liczby w postaci binarnej i obcięciem najstarszych bitów mających wartość 0 jest to, że jest łatwiej o błąd.
    Później zmieniając konfigurację sprzętu lub szukając błędu i patrząc na: &B1111111 (7 jedynek) trudniej dopatrzyć się brakującej jednej. Dlatego dobrze te najstarsze zera wpisywać.
  • #11 5820532
    don diego
    Poziom 32  
    Masz rację K_o_n_r_a_d . Trochę namieszałem:) Niemniej ja zawsze zapisuję bajty binarnie wypisując wszystkie bity, albo używam liczb heksalnych.
    Dzięki za wyjaśnienie.
  • #12 5820629
    mirekk36
    Poziom 42  
    K_o_n_r_a_d napisał:

    Podsumowując: jedynym niebezpieczeństwem w skróconym zapisie liczby w postaci binarnej i obcięciem najstarszych bitów mających wartość 0 jest to, że jest łatwiej o błąd.
    Później zmieniając konfigurację sprzętu lub szukając błędu i patrząc na: &B1111111 (7 jedynek) trudniej dopatrzyć się brakującej jednej. Dlatego dobrze te najstarsze zera wpisywać.


    ja powiedziałbym, że nie jedynym a podstawowym i dużym niebezpieczeństwem jest pisać liczby w programach w takiej skróconej postaci

    czyli koło jakby się zamyka i z punktu widzenia porad szczególnie dla początkującego warto jednak przekonywać go do zapisu w postaci binarnej pełnych bajtów czy słow o większej ilości bajtów. Bo niech ktoś choć troszkę zaawansowany powie, że stosuje takie skrócone zapisy. Rzeczywiście nie miałem świadomości, że kompilator to jednak przełknie ;) ale też nigdy mi do głowy nie przyszło tak pisać
  • #13 5820688
    K_o_n_r_a_d
    Poziom 23  
    Zapis binarny stosuje się właśnie po to aby widzieć wszystkie bity i jak są ułożone. Dlatego warto zapisywać wszystkie bity, nawet tam gdzie np. porty są niekompletne. Ale dobrze jest rozumieć co oznacza taki zapis, dlatgo napisałem to co wyżej. :)
    Ja w tym celu stosuję zapis szesnastkowy - przy odrobinie wprawy patrząc od razu widzi się bity a zapisuje się znacznie szybciej i nie trzeba tyle uwagi przywiązywać do tego.

    Dodano po 6 [minuty]:

    mirekk36 napisał:
    Bo niech ktoś choć troszkę zaawansowany powie, że stosuje takie skrócone zapisy.
    Aż zajrzałem w źródła moich programów :) i powiem, że bardzo rzadko stosuję zapis binarny, jedynie przy konfiguracji portów i właśnie przy niekompletnych portach pomijam najstarsze bity od pinów które nie istnieją w uK.
  • #14 5821723
    SirKamil90
    Poziom 14  
    Teraz rozumiem, wiem juz ze nie patrzylem na ten sposob zapisu jako na liczbe. Bede zapisywal teraz te liczby zawsze w postaci &Bxxxxxxxx, nawet jezeli najstarszy bit jest nieistotny, faktycznie latwiej sie wtedy czyta taka liczbe i kod programu jest bardziej przejrzysty;)

    pozdrawiam serdecznie:)
REKLAMA