Jump to content

SerYoga72

Members
  • Content Count

    8
  • Joined

  • Last visited

Posts posted by SerYoga72


  1. Я кажется понял, если я использую #define то при компиляции данный код вставляется в место вызова и перехода не происходит, а в моем случае происходит переход в функцию и возврат из нее, то есть так мы экономим процессорные тики, я правильно понял?

    А для чего do-while ?


  2. Заставил я это работать )). Благодарю.  Теперь вопрос для повышения общего уровня образованности так сказать, ну если Вы не против.:

    Вы предлагаете такую реализацию:

    18 часов назад, ARV сказал:

    #define SDO(x) do{ if(x) P1OUT |= BIT5; else P1OUT &= ~BIT5; } while(0)

    #define SDI() (P1IN & BIT7)

    #define SCK(x) do{ if(x) P1OUT |= BIT6; else P1OUT &= ~BIT6; } while(0)

    У меня реализовано так:

    void SCL(uchar b) { if (b) (P1OUT |= BIT7); else P1OUT &= ~BIT7; } //Строб
    void CSB(uchar b) { if (b) (P1OUT |= BIT4); else P1OUT &= ~BIT4; } //Выбор чипа
    void SDO(uint b)  { if (b) (P1OUT |= BIT6); else P1OUT &= ~BIT6; } //Передаваемые данные

    Чем Ваша реализация лучше? (Вопрос не для спора а для понимания) И для чего цикл do-while ?

    По поводу SDI (принимаемых данных) Вы правы, просто я данные пока не собирался принимать и написал на автопилоте P1OUT.

    Заранее благодарен.

    P.S. Как уменьшить межстрочный интервал в форуме?


  3. Пример Порт 1 Пин 0

    P1OUT |= BIT0 ;  // P1.0 установили в единицу

    P1OUT &= ~BIT0; // Установили в ноль

    Это хорошо для моргания одним светодиодом, но часто проще сразу записать 1 или 0 в нужный порт, типа

    P1.0 = 1;  // Неужели подобное невозможно реализовать в MSP430 ??

    Я как только не пробовал... И нигде не нахожу. Для реализации SPI пришлось создать четыре функции, я считаю это бредом каким то, если честно.

    // Маразм для програмного SPI
    void SCL(uchar b) { if (b==1) (P1OUT |= BIT7); else P1OUT &= ~BIT7; } //Строб
    void CSB(uchar b) { if (b==1) (P1OUT |= BIT4); else P1OUT &= ~BIT4; } //Выбор чипа
    void SDI(uchar b) { if (b==1) (P1OUT |= BIT6); else P1OUT &= ~BIT6; } //Передаваемые данные
    void SDO(uchar b) { if (b==1) (P1OUT |= BIT5); else P1OUT &= ~BIT5; } //Принимаемые данные

    И кстати, в Вашей версии реализации вот этот кусок почему то не работает: 

    	SDO(data & mask);

    Еще сильно не думал, но даже если data имеет значения 0xFFFF,   SDO все равно имеет значение 0, всегда ноль....  Даже примерно не могу понять почему...

    Я использую CCS.  И кстати булевых переменных тут что то же нет? Обявления типа bool var;  выдает ошибку неопределенный тип.... 


  4. Я понимаю, но как я сказал - я совсем не программист, когда то давно писал на ассемблере.  Вот например Ваш код мне сложен для понимания, я его конечно раскурю, я Вам благодарен, но придумать я бы такое не смог.

    Еще раз благодарю.

    Еще бы кто по работе с портами просветил...


  5. Приветствую всех.

    Подскажите не совсем программисту (или совсем не программисту) как грамотно реализовать программный SPI. МК CC430F5137 + OLED дисплей WEH000802A от Winstar. Данные 10 бит. Аппаратный в контроллере позволяет только 8, выход свой написать. Написал, но мне это не нравиться, знаю что можно намного проще, но не нахожу решения. Да и как то странно с портами в этом контроллере работается, нельзя (или не знаю как) данные напрямую в порт кидать, типа P1.0 = 1; А только BITами оперировать??? Вот что у меня получилось, смеяться разрешается ))

    //  Обработчик дисплея
    //
    // Маразм для програмного SPI
    void SCL(uchar b) { if (b==1) (P1OUT |= BIT7); else P1OUT &= ~BIT7; } //Строб
    void CSB(uchar b) { if (b==1) (P1OUT |= BIT4); else P1OUT &= ~BIT4; } //Выбор чипа
    void SDI(uchar b) { if (b==1) (P1OUT |= BIT6); else P1OUT &= ~BIT6; } //Передаваемые данные
    void SDO(uchar b) { if (b==1) (P1OUT |= BIT5); else P1OUT &= ~BIT5; } //Принимаемые данные
    
    
    
    
    // Вывод управляющей команды для дисплея
    void WriteCMD(uchar CMD)
    {
      uchar i;
      CSB(0);
      SDI(0);                                      
      _delay_cycles(100);
      SCL(0);
      _delay_cycles(100);
      SCL(1);
      SDI(0);                                      
      _delay_cycles(100);
      SCL(0);
      _delay_cycles(100);
      SCL(1);
      _delay_cycles(100);
      for(i=0;i<8;i++)
      {
        uchar t = ((CMD>>(7-i)) & 0x01);  // Как уйти от переменной t ????? 
        SDI(t);
        SCL(0);
        _delay_cycles(100);
        SCL(1);
        _delay_cycles(100);
      }
      CSB(1);
    }
    
    /*============================================
    Вывод одиночного символа на дисплей
    ============================================*/
    void WriteOneDAT(uchar DAT)
    {
      uchar i;;
      CSB(0);
      SDI(1);                                      
      _delay_cycles(100);
      SCL(0);
      _delay_cycles(100);
      SCL(1);
      SDI(0);                                      
      _delay_cycles(100);
      SCL(0);
      _delay_cycles(100);
      SCL(1);
      _delay_cycles(100);
      for(i=0;i<8;i++)
      {
        uchar t =((DAT>>(7-i)) & 0x01);
        SDI(t);
        SCL(0);
        _delay_cycles(100);
        SCL(1);
        _delay_cycles(100);
      }
      CSB(1);
    }

    Технически разница между Командой и Данными в первом бите SDI и объединить эти две функции наверно не проблема, но я уверен что это можно написать как то грамотнее ...  Как в этом контроллере с портами работать кроме как P1OUT |= BIT1 ??? Нельзя как то типа P1OUT_1 = 1;  ?? Где то в буржуйской литературе мапинг какой то проскакивал, но там я вообще не вьехал про что это, для чего это....

    Заранее Всем Благодарен.

     

     

     

     

     


  6. День добрый!

    Есть пульт на базе CC430F5137. Кнопка вкл/выкл заведена на P2.0 . Как сделать так что бы при нажатии на кнопку и удержании ее в течении 5 сек контроллер просыпался, а в рабочем состоянии наоборот засыпал.

    P.S.  А кратковременное нажатие на эту кнопку в рабом режиме будет выполнять функцию Стоп.

    Заранее благодарен.

     


  7. День добрый!

    Извините что не в тему, ищу человека который сможет реализовать несколько функций под CC430F5137. Естественно не за так.

    Срочно надо. Уже месяц ищу.  Черт меня дернул связаться с этим контроллером...

     


  8. День добрый.

    Есть два устройства (пульт и исполнительный контроллер) собранные на CC430F5137 и связанные по радиоканалу. Ищу того кто сможет грамотно написать под них ПО на С, желательно в CCS (но не обязательно), в разумные сроки за разумные деньги )) ?

×
×
  • Create New...