Разное и полезное > Микроконтроллеры и их программирование

SPI врукопашную: заблудился в трёх соснах.

(1/2) > >>

lgedmitry:

пытаюсь подружить атмегу8а с MAX6591. Что-то очень плохо получается. Аппаратный SPI не задействовать никак.
Написал две такие процедурки: первая посылает старший байт и не завершает сеанс, так как посылка должна быть 16 битной.
Вторая засылает второй байт и закрывает сеанс.

--- Код: ---void spiaddr(void)    //писалка адреса в максимку
{
CLK=0;
CS=0;
i=0;
while (i<8)
    {if (0x80&&buffer==0x80)
        DIN=1;
    else DIN=0;
    i++;
    CLK=1;
    buffer=buffer<<1;
    CLK=0;
}
}

void spidat(void)    //писалка адреса в максимку
{
//CLK=0;
i=0;
while (i<8)
    {CLK=0;
    if (0x80&&buffer==0x80)
        DIN=1;
    else DIN=0;
    i++;
    CLK=1;
    buffer=buffer<<1;
   
}
CS=1;
}
--- Конец кода ---
дальше я их вызываю по очереди

--- Код: ---buffer=0x01;                 //      все фыфры декодировать
spiaddr();
buffer=0xFF;
spidat();
buffer=0x02;                //       15мА
spiaddr();
buffer=0x05;
spidat();
buffer=0x03;                //       8 фыфр
spiaddr();
buffer=0x07;
spidat();
buffer=0x04;                //       настройки
spiaddr();
buffer=0x05;
spidat();

--- Конец кода ---
получилось красиво, но почему-то неработает. Иль может оно где-то не здесь неработает? И искать надо в другом месте ???

и добавил...
забыл уточнить, CLK, CS и DIN - это ножки порта задифайненные ;-[

и добавил...
buffer - это unsigned char

AVE:
(0x80&&buffer==0x80)
Здесь наверное побитовое умножение маски на buffer надо

blindman:
Во-первых, && - это логическое И, а нужно побитовое - оператор &. Во-вторых, приоритет операторов сравнения выше, чем у логических и битовых :

0x80 & buffer == 0x80 - это 0x80 & (buffer==0x80)
а надо (0x80 & buffer)==0x80

Вообще, правильно будет записать условие так :

if ((0x80 & buffer) != 0)

или, что по сути то же самое:

if (0x80 & buffer)

А так, как было записано, условие будет выполняться только тогда, когда buffer == 0x80

lgedmitry:
AVE, blindman, Пасиб, мужики!
Ещё пару косяков в других местах подобрал - фыфры засветились :yah: :yah: :yah: :yah: :yah:

blindman:
Сергей, ну вот видишь. Не такой уж страшный это самый си

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии