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

atmega88[c]przypisanie bitu portu c do b

Marcin_xx1 09 Lip 2009 17:06 1139 5
  • #1 6758937
    Marcin_xx1
    Poziom 21  
    Potrzebuję by stan szóstego bitu rejestru portu C był odzwierciedlony
    na wyjściu 5 portu B. Do portu D mam podłączone 8adresów pamięci
    zewnętrznej , do portu C tylko 6 adresów, ponieważ ostatni bit portuC jest
    wejściem reset i musi nim zostać. Pozostał mi jeden wolny pin w porcie B
    którym chciał bym adresować pamięć.
    w tej chwili spróbowałem takiej konstrukcji:

     if(bit_is_set(PORTC, 6)){PORTB |=_BV(5);}else{PORTB &=~_BV(5);}
    

    niestety instrukcja ta działa zbyt pomału.
  • Pomocny post
    #2 6758969
    szelus
    Poziom 34  
    Co znaczy zbyt pomału? Gdzie ten kod wstawiłeś?
    Najlepiej od razu ustawiaj bit na porcie B w tym miejscu, gdzie wyliczasz adres do wystawienia na pamięć. Ale specjalnie szybciej nie będzie.
  • Pomocny post
    #3 6759005
    ZbeeGin
    Poziom 39  
    A jak to kompilator przetłumaczył? Podejrzyj, usuń śmieci jeśli są i napisz jako wstawkę w asm.
  • #4 6759050
    Marcin_xx1
    Poziom 21  
    Kod wygląda tak:
    
     void read_data(){
    
    sread;
    
    register unsigned char i2;
    for(i2=0;i2<=128;i2++){
    
    PORTC=i2;
     if(bit_is_set(PORTC, 6)){PORTB |=_BV(5);}else{PORTB &=~_BV(5);}
    PORTD = y;
    }
    
    }
    

    Nie widze żeby kompilator miał tu jakieś zastrzeżenia, nie znam asm może ktoś pomoże z tą wstawką?
  • Pomocny post
    #5 6759072
    szelus
    Poziom 34  
    Ponieważ jest to najstarszy bit, to może podziel pętlę na pół i nie ustawiaj go za każdym razem.
    
    PORTB &= ~_BV(5);
    for (i2 = 0; i2 < 64; ++i2)
    {
    ...
    }
    
    PORB |= _BV(5);
    for (i2 = 64; i2 < 128; ++i2)
    {
    ...
    }
    
  • #6 6759109
    Marcin_xx1
    Poziom 21  
    Dzięki pomyśle o tym .
REKLAMA