Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Podciąganie wewnętrznych rezystorów w assemblerze

02 Lis 2008 09:01 960 10
  • Poziom 22  
    Witam, uczę się programować w assemblerze z książki ,,Mikrokontrolery AVR Atmega w praktyce" ale jednej rzeczy nie rozumiem (albo mi sie wydaje że nie rozumiem) Nie wiem jak włączyć rezystory podciągające
    ale coś tam kombinowałem oto co wykombinowałem:
    Code:
    cbi DDRB, DDB1        ;tryb wejściowy linii 1 portu B
    
    cbi PORTB1, PB1       ;włącz podciągnięcie linii 1 portu B
    nie wiem też czy dobrze rozumiem procedurę PORTxn, za x wpisuje nazwę portu np. B a za x linie portu.
    Czy dobrze rozumiem? proszę o odpowiedź. Pozdrawiam
  • Pomocny post
    Specjalista - Mikrokontrolery
    zle rozumiesz, bo nie wiedziec czemu czyszcisz PORTB zamiast go ustawic.

    pomijajac juz fakt, ze nie ma rejestru, ktory zwalby sie PORTB1.

    4\/3!!
  • Pomocny post
    VIP Zasłużony dla elektroda
    Źle rozumiesz. DDRx, PORTx, PINx, gdzie x jest wielką literą, to symboliczne nazwy rejestrów I/O. Pisanie "PORTB1" nie ma sensu, bo nie ma rejestru o takiej nazwie. DDBn, PBn, PINxn, gdzie n to liczba od 0 do 7 są numerami bitów w danym rejestrze.

    Włączenie podciągnięcia danej linii następuje po ustawieniu, a nie wyzerowaniu odpowiedniego bitu w rejestrze PORTx (ale tylko wtedy, gdy ten sam bit w rejestrze DDRx jest wyzerowany).

    Poza tym popraw temat, bo chyba bardziej ogólnie nie można było zatytuować postu :)

    Pozdrawiam,
    Dr.Vee
  • Poziom 22  
    Czyli powinno być tak:
    Code:
     sbi PORTB, DDR0
    ???
  • Poziom 22  
    napisałem coś takiego, (to oczywiście nie jest cały program)
    Code:
    .include "m8def.inc"
    

    .def temp = R16

    .EQU SYS_FREQ   =16                       ;częstotliwość pracy w MHz

    rjmp RESET
    RESET:             
    ldi temp, low(RAMEND)   ;ustawienie wskaźnika stosu
    out SPL, temp
    ldi Temp, high (RAMEND)
    out SPH, temp

    loop:

    sbi DDRB, DDB1        ;tryb wejściowy linii 1 portu B
    sbi PORTB1, PB1       ;włącz podciągnięcie linii 1 portu B
    i niby po sprawdzenu jest ok.
  • Pomocny post
    Poziom 34  
    Bez wątpienia na wyjściu uzyskasz stan wysoki. Jeśli chcesz ustawić pin jako wejście z podciąganiem, to kasujesz odpowiedni bit DDRB (cbi) ale w PORTB ustawiasz odpowiedni bit (sbi).

    ps. brakuje pętli nieskończonej na końcu.
  • Poziom 22  
    Witam, no nareszcie ktoś mi odpowiedział na moje pytanie dzięki
    Code:
    .include "m8def.inc"
    

    .def temp = R16

    .EQU SYS_FREQ   =16                       ;częstotliwość pracy w MHz

    rjmp RESET
    RESET:             
    ldi temp, low(RAMEND)   ;ustawienie wskaźnika stosu
    out SPL, temp
    ldi Temp, high (RAMEND)
    out SPH, temp

    loop:

    cbi DDRB, DDB1        ;tryb wejściowy linii 1 portu B
    sbi PORTB1, PB1       ;włącz podciągnięcie linii 1 portu B
  • Pomocny post
    Specjalista - Mikrokontrolery
    bez watpienia odpowiedz na to pytanie padla tutaj dokladnie 3 razy, a przedewszystkim znajduje sie ona w datasheecie.

    4\/3!!
  • Poziom 22  
    Tak wiem i dzięki wszystkim za odpowiedź ale chodziło mi o to że nareszcie zrozumiałem co do czego, mi trzeba tłumaczyć jak ,,chłop krowie na miedzy"
  • Pomocny post
    VIP Zasłużony dla elektroda
    Problem rozwiązany, podziękowałeś, to jeszcze popraw tytuł dla potomnych i zamknij temat :)

    Pozdrawiam,
    Dr.Vee