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

Konwersja liczby hex na bin i wysyłanie na I2C w AVR i PIC16F84

pikachu1986 02 Mar 2007 18:58 1232 5
REKLAMA
  • #1 3635931
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    witam znalazłem program do obsługi szyny i2c ,wszystko rozumiem ale nie wiem w jaki sposób zamienia liczbe hexadecymalną na binarną i jak to wysyła na port ,oto fragment którego nie rozumiem

    void icwbyte(unsigned char dana)
    { //wysłanie pojedynczego bajtu do Slave'a I2C
    unsigned char i;
    for(i=0;i<8;i++) //będzie 8 bitów
    {
    if(dana&0x80) //badaj najstarszy bit wysyłanego znaku
    {
    sda_wy=stan_1; //wyślij "1"
    }
    else
    {
    sda_wy=stan_0; //wyślij "0"

    co oznacza if(dana&0x80) ? ,to jest program na jakiegoś avr ja chcę napisać cos takiego na 16f84
    prosze o pomoc
  • REKLAMA
  • #2 3636237
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    if(dana&0x80) 

    & - to operator mnożenia bitowego w języku C
    jeśli dana pomnożona bitowo przez wartość 0x80 (10000000b) jest ustawiona (nie jest zerem)......
    Jest to popularny sposób odczytywania poszczególnych bitów słowa (poprostu te które nas nie interesują, "zakrywamy") :)

    [/quote]
  • REKLAMA
  • #3 3636338
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    w dalszej części tego programu jest cos takiego
    scl_wy=stan_1;
    i2c_delay(i2cdelay);
    scl_wy=stan_0;
    i2c_delay(i2cdelay);
    dana<<=1; //przygotuj następny bit do wysłania

    czy to znaczy ze po kolei sprawdza czy jest 1 lub 0 i ustawia port ? czy dobrze to rozumiem?
  • REKLAMA
  • Pomocny post
    #4 3636363
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Tak dokładnie, tylko nie ustawia całego portu tylko pojedynczy pin, który gdzieś jest skonfigurowany.
    Program sprawdza jaki bit ma wystawić ((if(dana&0x80)), potem go wystawia (SDA=stan_1 lub SDA=stan_0), potem "zatrzaskuje" ten wystawiony bit (SCL=stan_1, SCL=stan_0) a potem przesuwa zmienną dana o jeden bit w lewo żeby wysłać nastepny bit :). I tak 8x.
  • REKLAMA
  • #5 3636367
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 139
    Ocena: 32
    Tak...
    Po każdej operacji mnożenia bity w zmiennej dana przesówane są o 1 w lewo...
  • #6 3636413
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    dziękuje za odpowiedzi już wszystko rozumiem :) pozdrawiam
REKLAMA