На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Разбираемся с IAR , Обсуждаем небольшие коды на IAR.
      Понемногу в IAR разбираюсь, есть простенькая схема
      решил сделать чтобы светодиод на RB2 мигал, по команде PIC
      контроллера.
      Код мне potor дал для бегущей строки, хотел переделать в обыкновенный
      код для мигания. Тут ошибок тьма, покажите где?

      user posted image
      Нужен только светодиод подключённый к RB2......

      struct time // описание структуры время
      {
      unsigned char sec;// секунды
      } current_time;
      void init_io(void);
      void init_timer(void);
      void main(void)
      // тело программы
      {
      init_io(); //вызываем
      init_timer(); //функции инициализации
      __enable_interrupt();// разрешаем прерывания (описана в одном из хедерных файлов)
      out = 1; // инициализируем переменную out.
      old_sec = 0;// инициализируем счетчик секунд
      while(1)// организуем бесконечный цикл
      {
      PORTB = ~out;//записываем в PORTB инверсный код светодиода, который хотим зажечь (мы же
      // зажигаем их 0)
      while(current_time.sec == old_sec); // ждем одну секунду

      old_sec = current_time.sec; //присваиваем счетчику секунд текущее время (секунды)
      }
      }

      //-----------------инициализация портов ввода/вывода----------------
      void init_io(void)
      {
      DDRB = 0xff;//настрамваем PORTB на вывод
      PORTB = 0xfb;//все выходы в 1, светодиоды погашены
      }
      //------------------------------------------------------------------

      //-----------------инициализация таймара----------------------------
      void init_timer(void)
      {
      TIMSK |= Bit(1); //разрешаем прерывания от TC0 1 в TOIE0
      TCCR0 = 5; //говорим, что тактовую частоту будем делить на 1024

      current_time.sec = 0;// обновление времени
      current_time.min = 0;
      current_time.hour = 0;
      }
      //------------------------------------------------------------------

      Выделен красным цветом - объясните что за хедерные файлы, и для чего здесь нужна эта строчка
      Выделен синим цветом - нужно исправить/дописать чтобы светодиод загорался.
      ExpandedWrap disabled
        TCCR0 = 5; //говорим, что тактовую частоту будем делить на 1024

      Зачем делить на 1024
        Цитата
        bizar, 8.01.04, 14:03
        __enable_interrupt();// разрешаем прерывания (описана в одном из хедерных файлов)
        ...
        объясните что за хедерные файлы, и для чего здесь нужна эта строчка
        Это заголовочные файлы, содержащие прототипы функций и макросы.
        У меня IAR для PIC под рукой нет. В IAR EWAVR этот файл называется inavr.h
        Вызов этой функции нужен, чтобы разрешить прерывания и соответственно в одном из обработчиков происходило инкрементирование времени. см. ниже

        Цитата
        bizar, 8.01.04, 14:03
        PORTB = ~out;//записываем в PORTB инверсный код светодиода, который хотим зажечь (мы же
        // зажигаем их 0)
        Вообще-то непонятен алгоритм работы. По видимому,
        PORTB ^= 8; // зажигаем или гасим светодиод на RB2


        Цитата
        bizar, 8.01.04, 14:03
        Зачем делить на 1024
        Очевидно, это времязадающий таймер - в его обработчике инкрементируется время.
          TCCR0 = 5;//- это особенность конкретного контроллера (специальный регистр), в PICе это наверняка по другому
          чтобы мигал PORTB2 надо:
          while(1)// организуем бесконечный цикл
          {

          while(current_time.sec == old_sec); // ждем одну секунду
          old_sec = current_time.sec; //присваиваем счетчику секунд текущее время (секунды)
          if (PORTB == 0xff) PORTB = 0xfb;//горит portb 2
          else PORTB = 0xff;//все диоды погашены
          }

          еще раз говорю, это для пика не пойдет, там регистры специальных функций другие:)
          функция разрешения прерываний там тоже возможно называется по другому, но скорее всего так же
          по поводу дисплея попытаюсь сделать сегодня вечером:)
            что за г...?
            на PICке направление выбирается TRISB:
            00 - весь порт B работает на выход
            FF - весь порт B работает на вход

            я для PICков avr не использую, там много глюков. исп Hi-Tech . Скачай hi-tech и на сайте cracks.am к
            нему кряк подбери.
            В Hi-Tech:
            пишешь
            static bit _LED @ (unsigned)&PORTB*8+2; /* bit2 in port B */
            и оперируешь битом.

            // пример оформления прерываения

            static void interrupt
            GeneralInterruptRoutine(void){
            if (T0IF)
            {
            T0IF = 0;
            // Timer0 interrupt

            }

            if (TMR1IF)
            {
            TMR1IF = 0;
            // Timer1 interrupt
            /******** Сюда пишешь счётчика...короче подбираешь 1 сек. задержку *********/
            /* типа if (dwCounter >= 26) {
            /* _LED =~ _LED;
            /* dwCounter = 0;
            /* }
            /* dwCounter++;
            /*
            /******************************
            }
            if (RCIF)
            {
            RCIF = 0;
            RX_Buf[RX_Cursor++] = RCREG;
            if (RX_Cursor == RX_Size) RX_Cursor = 0;
            // RX interrupt
            }
            if (SSPIF)
            {
            SSPIF = 0;
            In_Buf_SPI[In_Cursor_SPI++] = SSPBUF;
            if (In_Cursor_SPI == In_Size) In_Cursor_SPI = 0;
            // SPI interrupt
            }
            }

            // включаем все прерывания...
            void InterruptsEnable(void)
            {
            GIE = 1;
            PEIE = 1;
            }

            посмоти в доках к твоему PICу как включать Timer1 (это таймер счётчик по 65536 ~ 40ms полный цикл)
            я привел пример для PIC16F877A

            а какой кстати проц?
              по поводу глючности IAR для пиков спорить небуду (не работал с ним и с пиками в частности)
              по поводу операции с битами IAR это тоже позволяет просто надо описать union из чара и соответствующей битовой области
              а вообще, это мое субъективное мнение, удобнее всего битовые операции реализованы в keil, там есть тип bit, переменная такого типа будет однозначно располагатся, только в битово адресуемой области:)
                SimpleSoft, что за Hi-Tech? Приведённый тобой код IAR ?

                ExpandedWrap disabled
                  а какой кстати проц?    

                всмысле

                ExpandedWrap disabled
                  RTCC таймер/счетчик
                  Режим таймера выбирается путём сбрасывания в ноль бита RTS, который находиться в регистре OPTION и т. д.
                  Или таймер Watch Dog.]

                Ты это имел ввиду.
                  Hi-Tech это еще одна среда разработки, я ее к сожалению не юзал
                  т е код тебе прислали не для IAR а для этой самой Hi-Tech
                  я кстати не врюхал??? ты пытаешься залить мой код написанный для AVR в свой PIC??? Если да то непойдет:)
                  это же другая архитектура, я тебе просто выслал пример программирования в IAR, но т.к. он у меня для AVR и дома тоже нашел AVR контроллер, я спаял на монтажке схему с диодиками, написал программку для моего контроллера, отладил и выслал тебе
                    У каждого микроконтроллера различна работа таймера???
                    :ph34r: :ph34r: :ph34r:
                      у разнах микроконтроллеров разная архитектура: разные таймеры, разрядность режимы работы, регистры специальных ф-й и т.п., т.е. прежде чем писать программу для конкретного контроллера в первую очередь читаешь документацию именно по нему

                      я бы тебе предложил, прежде чем сразу хвататься за все, подключи к своему контроллеру светодиодик, внимательно почитай документацию (не лезь сразу в прерывания, таймеры и т.п) и напиши простенькую программку, чтобы пресловутый светодиод замигал, например:

                      #include<имя файла, где описан твой пресловутый порт RB>
                      void main(void)
                      {
                      while(1)
                      {
                      for (unsigned int i = 0xffff; i!=0; i--);
                      for (unsigned int i = 0xffff; i!=0; i--);
                      for (unsigned int i = 0xffff; i!=0; i--);
                      for (unsigned int i = 0xffff; i!=0; i--);
                      if (RB == 0xff) RB = 0xfb;
                      else RB=0xff;
                      }
                      }
                      проверяем должно скомпилится запускаем эмулятор и смотрим работает, или нет, если все ок заливаем в контроллер, если не заработало, ищем плюхи в монтаже, если заработало, прекрасно!!!
                      внимательно читаешь про работу таймера и про прерывания и реализовываешь с использованием оных и т.д.....

                      Добавлено в :
                      извини немножко не так? взглянул тут на документацию по твоему контроллеру:

                      #include<имя файла, где описаны PORTB и TRISB>
                      void main(void)
                      {
                      TRISB = 0; // настраиваем PORTB на выход
                      while(1)
                      {
                      for (unsigned int i = 0xffff; i!=0; i--);
                      for (unsigned int i = 0xffff; i!=0; i--);
                      for (unsigned int i = 0xffff; i!=0; i--);
                      for (unsigned int i = 0xffff; i!=0; i--);
                      if (PORTB == 0xff) PORTB = 0xfb;
                      else PORTB=0xff;
                      }
                      }
                        Я думал без Таймера мигать не будет. :(
                        Что за 0xffff.
                          0xfb порт RB2, а порт RB3, RB4 и т. д. как обозначаются.
                          #include<имя файла, где описаны PORTB и TRISB>
                          void main(void)
                          {
                          TRISB = 0; // настраиваем PORTB на выход
                          while(1)
                          {
                          for (unsigned int i = 0xffff; i!=0; i--);// я так понял этот цикл включает светодиод,
                          for (unsigned int i = 0xffff; i!=0; i--);// но не понял смысл этого цикла, ещё
                          for (unsigned int i = 0xffff; i!=0; i--);//зачем их надо 4 штуки (чтобы сровнять i до ноля,
                          for (unsigned int i = 0xffff; i!=0; i--);//может используешь его вместо таймера)??????????
                          if (PORTB == 0xff) PORTB = 0xfb; //если порт RB равен 0xff, значит порт RB присваивает 0xfb (то есть светодиод на RB2 погашен??)
                          else PORTB=0xff; // иначе порт RB присваивает 0xff
                          }
                          }
                            #include<имя файла, где описаны PORTB и TRISB>
                            void main(void)
                            {
                            TRISB = 0; // настраиваем PORTB на выход
                            while(1)
                            {
                            //организуем задержку, чтобы ты видел как мигает светодиод
                            //если не сделать эту задержку, то ты увидишь просто горящий светодиод
                            for (unsigned int i = 0xffff; i!=0; i--);
                            for (i = 0xffff; i!=0; i--);
                            for (i = 0xffff; i!=0; i--);
                            for (i = 0xffff; i!=0; i--);
                            //-------------------------------------------------------------------------
                            //собственно мигание светодиода
                            if (PORTB == 0xff) PORTB = 0xfb;
                            else PORTB=0xff;
                            }
                            }
                              ExpandedWrap disabled
                                0xfb порт RB2, а порт RB3, RB4 и т. д. как обозначаются.

                              ExpandedWrap disabled
                                Что за 0xffff.
                              Сообщение отредактировано: bizar -
                                Если внимательно почитвть описание то увидишь:
                                RB2 - это второй разряд порта PORTB
                                0xЧИСЛО - так в С обозначаются 16-ричные числа
                                fb - шестнадцпатиричное, это 11111011 двоичное
                                т е PORTB = 0xfb; говорит буквально следующее:
                                Записать во 2-й разряд PORTB (т.е. в RB2) нолик, а в остальные разряды 1
                                Соответственно PORTB = 0xff говорит
                                записать во все разряды PORTB 1
                                вот и получили мигание...
                                  Ты мне так и не ответил что/зачем/почему в примере
                                  используешь 0xffff


                                  Может я тебя не правельно понял.
                                  Сообщение отредактировано: bizar -
                                    да я просто реализую задержку
                                    4 цикла котые считают от 65535 (0xffff) до нуля:)
                                      Значит через час/полтора, может больше
                                      светодиод перестанет мигать.
                                      Порт RB3 - fc???
                                      RB4 - fd???
                                      Сообщение отредактировано: bizar -
                                        нет, эти четыре while дадут тебе задержку порядка секунды +- лапоть в зависимости от частоты генератора микроконтроллера
                                        т.е. алгоритм до безобразия тупой :)
                                        while (1){//все что в этих скобках бесконечный циклъ
                                        // 1)сначала задержка порядка секунды
                                        while(...);
                                        while(...);
                                        while(...);
                                        while(...);
                                        // 2)теперь меняем состояние светодиода на противоположное
                                        if...
                                        // и опять к шагу 1
                                        }
                                          Ясно....
                                          Проверьте исходничёк (поочерёдное мигание светодиодов подключённых к RB2, RB3, RB4, RB5)
                                          У меня нет эмулятора (поэтому не могу проверить).
                                          А вообще что за эмулятор - программа/внешнее устройство проверяющая работу микроконтроллера
                                          Объясните bizar..у.?
                                          ExpandedWrap disabled
                                            #include<имя файла, где описаны PORTB и TRISB>
                                            void tik(unsigned int i)
                                                        {
                                                        for (i = 0xffff; i!=0; i--);
                                                        for (i = 0xffff; i!=0; i--);
                                                        for (i = 0xffff; i!=0; i--);
                                                        for (i = 0xffff; i!=0; i--);
                                                        }
                                            void tik1(void)
                                                    {
                                                    if (PORTB == 0xff) PORTB = 0xfb;
                                                    else PORTB=0xff;
                                                    }
                                            void tik2(void)
                                                    {
                                                    if (PORTB == 0xff) PORTB = 0xfc;
                                                    else PORTB=0xff;
                                                    }
                                            void tik3(void)
                                                    {
                                                    if (PORTB == 0xff) PORTB = 0xfd;
                                                    else PORTB=0xff;
                                                    }
                                            void tik4(void)
                                                    {
                                                    if (PORTB == 0xff) PORTB = 0xfe;
                                                    else PORTB=0xff;
                                                    }
                                            void main(void)
                                                    {
                                                    TRISB = 0;
                                                    while(1)
                                                        {
                                                        tik ();
                                                        tik1 ();
                                                        tik ();
                                                        tik2 ();
                                                        tik ();
                                                        tik3 ();
                                                        tik ();
                                                        tik4 ();
                                                        }
                                            }
                                          Сообщение отредактировано: bizar -
                                            что то я не понял, что ты изобразил???

                                            Добавлено в :
                                            это даже не скомпилится???
                                              Это чума зажигает поочерёдна 4 светодиода
                                              подключённые к RB2, RB3, RB4, RB5.
                                              Я создал несколько функций, поставил их поочерёдна
                                              и добавил бесконечный цикл.
                                              Ещё мне:::::
                                              Нужно заставить динамик пищать?????
                                              Прикреплённый файлПрикреплённый файлZvuk.rar (0.73 Кбайт, скачиваний: 864)
                                                где у тебя в порограмме функция main()???

                                                Добавлено в :
                                                по поводу пищания динамика:
                                                на RB7 подаешь 0
                                                на RB6 подаешь импульсы (например 440Hz это нота ля первой октавы)
                                                  Вот эта функция main (это то что будет выполняться).
                                                  ExpandedWrap disabled
                                                    void main(void)
                                                      {
                                                      TRISB = 0;
                                                      while(1)
                                                       {
                                                       tik ();
                                                       tik1 ();
                                                       tik ();
                                                       tik2 ();
                                                       tik ();
                                                       tik3 ();
                                                       tik ();
                                                       tik4 ();
                                                       }
                                                    }
                                                    а tick2()? tick3()? tick4()?
                                                      Цитата potor @ 13.01.04, 17:00
                                                      а tick2()? tick3()? tick4()?

                                                      tic2 зажигает RB3 (СВЕТОДИОД)
                                                      tic3 зажигает RB4 (СВЕТОДИОД)
                                                      tic4 зажигает RB5 (СВЕТОДИОД)
                                                      Если я неправельно написал, напиши как правельно.
                                                        ExpandedWrap disabled
                                                          на RB6 подаешь импульсы (например 440Hz это нота ля первой октавы)

                                                        Как подавать импульсы на RB6, нужен кусочек кода с объяснением.
                                                        Я ещё многого не знаю, на словах не понимаю.
                                                          в общем дело в следующем:
                                                          void tic2 (void)
                                                          {
                                                          if (PORTB == 0xff) PORTB = 0xf7;
                                                          else PORTB=0xff;
                                                          }
                                                          void tic3 (void)
                                                          {
                                                          if (PORTB == 0xff) PORTB = 0xef;
                                                          else PORTB=0xff;
                                                          }
                                                          void tic4 (void)
                                                          {
                                                          if (PORTB == 0xff) PORTB = 0xdf;
                                                          else PORTB=0xff;
                                                          }
                                                          но дело в том, что такая реализация выглядит криво :(
                                                          предлагаю написать следующее:

                                                          main()
                                                          {
                                                          TRISB = 0;
                                                          PORTB = 0xdf;
                                                          while(1)
                                                          {
                                                          tick();
                                                          if (PORTB == 0xdf ) PORTB = 0xdf;
                                                          else PORTB <<= 1;
                                                          }
                                                          }

                                                          Добавлено в :
                                                          в общем дело в следующем:
                                                          void tic2 (void)
                                                          {
                                                          if (PORTB == 0xff) PORTB = 0xf7;
                                                          else PORTB=0xff;
                                                          }
                                                          void tic3 (void)
                                                          {
                                                          if (PORTB == 0xff) PORTB = 0xef;
                                                          else PORTB=0xff;
                                                          }
                                                          void tic4 (void)
                                                          {
                                                          if (PORTB == 0xff) PORTB = 0xdf;
                                                          else PORTB=0xff;
                                                          }
                                                          но дело в том, что такая реализация выглядит криво :(
                                                          предлагаю написать следующее:

                                                          main()
                                                          {
                                                          TRISB = 0;
                                                          PORTB = 0xdf;
                                                          while(1)
                                                          {
                                                          tick();
                                                          if (PORTB == 0xdf ) PORTB = 0xdf;
                                                          else PORTB <<= 1;
                                                          }
                                                          }

                                                          Добавлено в :
                                                          теперь, что касаемо пищалки:
                                                          я тебе сейчас не могу сказать как получить конкретную частоту на выходе (не хватает исходных данных: например частоы тактового генератора процессора), но могу натолкнуть. В общем существует два варианта:
                                                          1) использавать прерывание от таймера. Это наиболее предпочтительный вариант, но мы пока на прерывания не заморачиваемся
                                                          2) организовать программную задержку (как в случае с мигающим светодиодом)
                                                          ...

                                                          void delay (void)
                                                          {
                                                          for (unsigned char i = 0xff; i != 0; i--)
                                                          }
                                                          // теперь давай опишем макрос для более удобной работы с битами
                                                          #define Bit(x) (1<<(x))
                                                          main()
                                                          {
                                                          TRISB = 0;
                                                          PORTB =0x7f;//обнуляем восьмой бит PORTB, остальные в 1
                                                          while(1)
                                                          {
                                                          delay();
                                                          if (PORTB & Bit(6)) // RB6 в 1?
                                                          PORTB &= ~Bit(6);// если да то обнуляем
                                                          else
                                                          PORTB |= Bit(6);// если нет то устанавливаем
                                                          }
                                                          }
                                                            ExpandedWrap disabled
                                                              main()
                                                                        {
                                                                         TRISB = 0;
                                                                         PORTB = 0xdf;
                                                                         while(1)
                                                                                {
                                                                                tick();
                                                                                if (PORTB == 0xdf ) PORTB = 0xdf;
                                                                                else PORTB <<= 1;
                                                                                }
                                                                        }


                                                            Это пример только к порту 0xdf?????

                                                            ExpandedWrap disabled
                                                              0xf7 ----RB3
                                                              0xef  ---- RB4
                                                              0xdf ---- RB5

                                                            Чё-то я закономерность не заметил, по назначению в Си портов RB.

                                                            Добавлено в :
                                                            ExpandedWrap disabled
                                                              if (PORTB & Bit(6)) // RB6 в 1?
                                                              PORTB &= ~Bit(6);// если да то обнуляем

                                                            Что значит "~", объясни по подробней этот кусок.
                                                            Сообщение отредактировано: bizar -
                                                              извиняюсь, ошибся

                                                              main()
                                                              {
                                                              TRISB = 0;
                                                              PORTB = 0xfd;// устанавливаем в ноль RB2
                                                              while(1)
                                                              {
                                                              tick();
                                                              if (PORTB == 0xdf ) // RB5 установлен в 0?
                                                              PORTB = 0fb; // если да, то устанавливаем в ноль RB2, остальные в 1
                                                              else PORTB <<= 1; иначе сдвигаем на 1 влево
                                                              }
                                                              я тебе кажется уже объяснял, что это не адреса портов, адрес порта PORTB описан в h файле, а это то что хотим в порт звписать
                                                              PORTB = 0xff; //записываем во все разряды PORTB единицы
                                                              PORTB = 0xfе;// записываем в RB0 0, в остальные разряды 1
                                                              PORTB = 0xfd;// записываем в RB1 0, в остальные разряды 1
                                                              PORTB = 0xfb;// записываем в RB2 0, в остальные разряды 1
                                                              PORTB = 0xf7;// записываем в RB3 0, в остальные разряды 1
                                                              PORTB = 0xef;// записываем в RB4 0, в остальные разряды 1
                                                              PORTB = 0xdf;// записываем в RB5 0, в остальные разряды 1
                                                              PORTB = 0xbf;// записываем в RB6 0, в остальные разряды 1
                                                              PORTB = 0x7f;// записываем в RB7 0, в остальные разряды 1

                                                              теперь далее
                                                              if (PORTB & Bit(6)) // делаем поразрядное логическое И содержимого POTRB и числа 01000000b, если результат не 0, значит в RB6 сейчас 1
                                                              PORTB &= ~Bit(6);// и если это так обнуляем RB6

                                                              ~- это операция поразрядной инверсии числа в данном случае что получается:
                                                              Bit(6) это 01000000b
                                                              ~Bit(6) это 10111111b
                                                              PORTB&=~Bit(6) это PORTB = PORTB & ~Bit(6), или попросту PORTB = PORTB & ~Bit(6), или совсем просто PORTB = PORTB & 0x40, или по человечески обнуление 6-го разряда PORTB (RB6)
                                                                Усё отлично понял.
                                                                У пищалки нужно убрать конденсатор к твоему примеру.????

                                                                ExpandedWrap disabled
                                                                  else PORTB <<= 1; иначе сдвигаем на 1 влево


                                                                А вроде нам нужно сдвигать на один в право.
                                                                else PORTB >>= 1;
                                                                RB2 - RB3 - RB4 - RB5 //Идёт в порядке возрастания.
                                                                Как сделать так чтобы 2 светодиода загорались одновременно???
                                                                Например RB2 и RB5. Я думаю так:
                                                                PORTB = 0xdb; //проверьте так ли это

                                                                Вот потренировался (проверь).
                                                                Порядок загорания светодиодов:
                                                                RB2 RB7 (одновременно)
                                                                RB3 RB6 (одновременно)
                                                                RB4 RB5 (одновременно)
                                                                Гаснут и всё сначала.
                                                                main()
                                                                {
                                                                TRISB = 0;
                                                                PORTB = 0xdb;
                                                                while(1)
                                                                {
                                                                tick();
                                                                if (PORTB == 0xcf )
                                                                PORTB = 0xff;
                                                                else PORTB = 0xb7;
                                                                if (PORTB == 0xb7)
                                                                PORTB = 0xcf;
                                                                else PORTB = 0xcf;
                                                                }
                                                                  1 конденсатор у пищалки убирать ненужно, он служит для отсекания постоянной составляющей (ты кстати аккуратнее с ней, узнай ее потребляемую мощность, а то можешь спалить контроллер)
                                                                  2 сдвигать нужно влево т к отсчет битов идет справа налево
                                                                  3 по поводу RB2 и RB5 ты прав
                                                                  4 по поводу проги немного неверно
                                                                  main()
                                                                  {
                                                                  TRISB = 0;
                                                                  PORTB = 0x7b;
                                                                  while(1)
                                                                  {
                                                                  tick();
                                                                  switch(PORTB)
                                                                  {
                                                                  case 0xcf : PORTB = 7b;
                                                                  break;
                                                                  case 0x7b : PORTB = b7;
                                                                  break;
                                                                  case 0xb7 : PORTB = 0xcf;
                                                                  }
                                                                  }
                                                                    Оператор case в Си не нашёл, поискал в pascal..е
                                                                    Оператор выбора case является обобщением оператора if - он даёт возможность выполнить одно из нескольких действий в зависимости от значения переключателя.
                                                                    В Си также обращаться с case????????????????????????????????????
                                                                    Что за break - прерывания что ли (чего/кого)?????
                                                                    Там ещё есть switch(PORTB) с чем его едят???? //золотой ключ, а это функция (сомневаюсь)
                                                                    У тебя описано для четырёх светодиодов?????
                                                                    Ты использовал 7b, а не 0х7b почему (так надо)????????
                                                                      Цитата
                                                                      switch( переменная ) {
                                                                      case значение1:
                                                                      case значение2:
                                                                      действия
                                                                      break;
                                                                      case значение3:
                                                                      действия
                                                                      break;
                                                                      default:
                                                                      действия, если ни одному из case не подошло.
                                                                      }
                                                                      В конференции Вы долго будете обучаться языку C. Купите какую-нибудь книжку.
                                                                        Ты использовал 7b, а не 0х7b почему (так надо)????????

                                                                        нет, это описка :)
                                                                          Цитата potor @ 16.01.04, 14:38
                                                                          нет, это описка :)

                                                                          Всмысле?? (должно быть 0х7b)??

                                                                          Добавлено в :
                                                                          trainer, Книги есть (но они не отвечают подробно на вопрос).
                                                                            да, это должно быть 0x7b

                                                                            Добавлено в :
                                                                            по поводу книжки по С могу посоветовать поискать в инете: Керниган, Ричи. Язык C
                                                                              break - что/кто/для чего.
                                                                              (пока ты в сети ответь).

                                                                              Добавлено в :
                                                                              У меня книга на руках Киммел (мастер).
                                                                              Керниган, Ричи. Язык C поищю.
                                                                                break в данном случае, этодля того, чтобы прекратить последующие проверки и выйти из switch
                                                                                  Хочю в клаве модинг замутить, 13 светодиодов,
                                                                                  хватит ли питания у порта клавы.
                                                                                    не знаю, посмотри спецификацию
                                                                                    P.S. а нафига это надо?

                                                                                    Добавлено в :
                                                                                    хотя, это примерно 10мА, 99% что хватит

                                                                                    Добавлено в :
                                                                                    ссори 130мА, хватит
                                                                                      Надо же на чём то учиться
                                                                                      Ты вообще знаешь что такое Модинг
                                                                                        вообще да (я иногда журналы читаю:))
                                                                                          Придется питание отдельно заводить
                                                                                          если я к пику 13 светодиодов подключу он не взорвется????

                                                                                          Добавлено в :
                                                                                          Усё понил значит прокатит.
                                                                                            а вот по поводу пика, только если низкоточные 5мА штука
                                                                                              У меня в клаве имеется микроконтроллер:
                                                                                              9917
                                                                                              КМЕ-9801-4
                                                                                              Входят 4 провода
                                                                                              Жёлтый
                                                                                              Красный
                                                                                              Коричневый
                                                                                              Белый
                                                                                              Куда цеплять питание не подскажете.
                                                                                              Я думаю к жёлтому проводу.
                                                                                              К каким выводам контроллера (клавы) подходит питание?????
                                                                                              RA0…..RA4 порт как присваивать 0.??????
                                                                                              RA0-----0x1e-----11110
                                                                                              RA1-----0x1d-----11101
                                                                                              RA2-----0x1b-----11011
                                                                                              RA3-----0x17-----10111
                                                                                              RA4-----КАК ТУТ ЗДЕЛАТЬ???????
                                                                                                Цитата
                                                                                                bizar, 16.01.04, 18:15
                                                                                                У меня в клаве имеется микроконтроллер
                                                                                                Очень вряд ли, что там PIC.
                                                                                                Скорее всего там клон Intel i8048
                                                                                                  Цитата trainer @ 16.01.04, 22:15
                                                                                                  Цитата
                                                                                                  bizar, 16.01.04, 18:15
                                                                                                  У меня в клаве имеется микроконтроллер
                                                                                                  Очень вряд ли, что там PIC.
                                                                                                  Скорее всего там клон Intel i8048

                                                                                                  Там точно не PIC (аналог Intel i8048)
                                                                                                  Я думаю совецкого производства.
                                                                                                    potor - ты не прав. Можно повесить очень мощные, если управляешь нулями, т.е. например..
                                                                                                    PIC
                                                                                                    ___
                                                                                                    | PB.7 LED ___
                                                                                                    |------|<|--|___|-----* +5v
                                                                                                    | '' 330 Ом
                                                                                                    |
                                                                                                    |
                                                                                                    |
                                                                                                    |
                                                                                                    |
                                                                                                    |
                                                                                                    ____
                                                                                                      2SimpleSoft
                                                                                                      тут вот какое дело, максимальный ток стока для PORTB, PORTA по документации 200мА.
                                                                                                      ты предлагаешь вкльчить 13 диодов по 15мА- это 195мА(почти предел), я бы не рекомендовал так издеваться над контроллером, во всяком случае греться он будет как электроплитка и долго не проработает:(
                                                                                                        Теперь нужно чтобы контроллер ждал
                                                                                                        когда мы нажмём на кнопку (то есть два порта RB соединяться)
                                                                                                        и после этого он начнёт их зажигать.
                                                                                                          в общем цепляем кнопку одним контактом на RB1, этот же контакт через 100кОм на питание, второй контакт кнопки на 0
                                                                                                          в программе изменяем:
                                                                                                          TRISB = 2;// RB1 настраиваем на вход, остальные разряды PORTB на выход
                                                                                                          далее перед while(1) добавляем строчку
                                                                                                          while(PORTB & Bit(1));
                                                                                                          и вся любовь:)
                                                                                                            А если я хочю чтобы он ждал нажатие у нескольких
                                                                                                            кнопок, и выполнял при каждем нажатии определённое
                                                                                                            включения светодиодов.
                                                                                                              хороше, ты только напиши, куда планируешь подключит кнопки, и куда светодиоды
                                                                                                                1 кнопка RA2 RA4
                                                                                                                2 кнопка RA2 RA3
                                                                                                                3 кнопка RA4 RA3

                                                                                                                Светодиоды подрубил к RB0,RB1 RB2, RB3, RB4, RB5, RB6, RB7, RA1.
                                                                                                                  Если нажимаем (RA2, RA4).
                                                                                                                  Выполняется...
                                                                                                                  main()
                                                                                                                  {
                                                                                                                  TRISB = 0;
                                                                                                                  PORTB = 0xfc;
                                                                                                                  while(1)
                                                                                                                  {
                                                                                                                  tick();
                                                                                                                  switch(PORTB)
                                                                                                                  {
                                                                                                                  case 0x1c : PORTB = 0xfc;
                                                                                                                  break;
                                                                                                                  case 0xfc : PORTB = 0xf3;
                                                                                                                  break;
                                                                                                                  case 0xf3 : PORTB = 0xcf;
                                                                                                                  break;
                                                                                                                  case 0xcf : PORTB = 0x3f;
                                                                                                                  break;
                                                                                                                  case 0x3f : PORTB = 0x1c;
                                                                                                                  }
                                                                                                                  }

                                                                                                                  Если нажимаем (RA4, RA3).
                                                                                                                  Выполняется...

                                                                                                                  main()
                                                                                                                  {
                                                                                                                  TRISB = 0;
                                                                                                                  PORTB = 0xfe;
                                                                                                                  while(1)
                                                                                                                  {
                                                                                                                  tick();
                                                                                                                  switch(PORTB)
                                                                                                                  {
                                                                                                                  case 0x1d : PORTB = 0xfe;
                                                                                                                  break;
                                                                                                                  case 0xfe : PORTB = 0xfd;
                                                                                                                  break;
                                                                                                                  case 0xfd : PORTB = 0xfb;
                                                                                                                  break;
                                                                                                                  case 0xfb : PORTB = 0xf7;
                                                                                                                  break;
                                                                                                                  case 0xf7 : PORTB = 0xef;
                                                                                                                  break;
                                                                                                                  case 0xef : PORTB = 0xdf;
                                                                                                                  break;
                                                                                                                  case 0xdf : PORTB = 0xbf;
                                                                                                                  break;
                                                                                                                  case 0xbf : PORTB = 0x7f;
                                                                                                                  break;
                                                                                                                  case 0x7f : PORTB = 0x1e;
                                                                                                                  break;
                                                                                                                  case 0x1e : PORTB = 0x1d;
                                                                                                                  break;
                                                                                                                  case 0x1d : PORTB = 0xfe;
                                                                                                                  }
                                                                                                                  }
                                                                                                                    батенька, вы совсем обленились:)
                                                                                                                    ну попытайся, хоть что нибудь сам написать, иначе ты ничему не научишься, тем более задача простенькая
                                                                                                                    в общем лови подсказку:
                                                                                                                    1)switch(PORTA)
                                                                                                                    ...
                                                                                                                    2)TRISA = 0x04;// настройка RA2 на ввод, остальное на вывод
                                                                                                                    3)TRISA = 0x08;// настройка RA3 на ввод, остальное на вывод
                                                                                                                    попробуй написать сам, вышли свой вариант, укажу на ошибки, ну если уж совсем туго, напишу как правильно, просто обьясняю еще раз, пока не начнеш писать сам не научишься:)
                                                                                                                      Да лень вперёд меня родилась.
                                                                                                                      Попробую сам, только скажи как
                                                                                                                      настроить RA0 и RB2 на ноль, а
                                                                                                                      остальные на единицу. КАК RB c RB
                                                                                                                      и RA c RA разобрался, не могу понять как
                                                                                                                      RA с RB.
                                                                                                                        Все просто
                                                                                                                        только ты не забывай, что помимо этого часть ног PORTA тебе нужно настраивать на вход, часть на выход и при опросе матрицы кнопок менять эти настройки.
                                                                                                                        вот пример RA0,RA1 на выход. RA0 настраиваем на ноль RA1 на единицу, остальные RA не важно, т.к. Настраиваем их на выход. PORTB весь на выход RB2 в 0, остальные разряды PORTB в 1:
                                                                                                                        TRISA = 0xfc;// настраиваем RA0, RA1 на выход
                                                                                                                        PORTA = 0xfe;// запиисываем в RA0 0, в остальные разряды PORTA 1(в частности нас интересует RA1 а,
                                                                                                                        // т.к остальные мы настроили на вход, по барабану, что туда писать)
                                                                                                                        TRISB = 0;// весь PORTB на выход
                                                                                                                        PORTB = 0xfb; //в RB2 0, в остальные разряды 1
                                                                                                                          Кнопки цепляем по этой схеме.
                                                                                                                          (проверь правельно ли я подрубил кнопки)
                                                                                                                          Прикреплённый файлПрикреплённый файлCVET.rar (5.65 Кбайт, скачиваний: 461)
                                                                                                                            можно так, я думал ты хотел их в матрицу объединить.
                                                                                                                            в зтом случае соответствующие разряды PORTA просто программируешь на ввод, дерзай дальше:)
                                                                                                                            на сегодня я побежал...

                                                                                                                            Добавлено в :
                                                                                                                            маленькое замечание, зачем ты взял нормально замкнутые контакты??? чтобы тока больше жрали??
                                                                                                                              Поправка
                                                                                                                              ExpandedWrap disabled
                                                                                                                                _    _
                                                                                                                                 \
                                                                                                                                  \

                                                                                                                              Мы на секунду замыкаем контакт, и отпускаем его (кнопка не должна быть нажата постоянно)??????
                                                                                                                              Сообщение отредактировано: bizar -
                                                                                                                                да, только есснно в этом случае критерием нажатой кнопки будет 0 на соответствующем разряде порта
                                                                                                                                  ExpandedWrap disabled
                                                                                                                                    критерием нажатой кнопки будет 0

                                                                                                                                  В смысле критерием, я таких слов незнаю.
                                                                                                                                  (малясь недоразвет)
                                                                                                                                    признаком:)
                                                                                                                                      Это для одной кнопки.
                                                                                                                                      ExpandedWrap disabled
                                                                                                                                        main()
                                                                                                                                             {
                                                                                                                                              TRISA = 4;
                                                                                                                                              PORTA = 0x1c;
                                                                                                                                              TRISB = 0;
                                                                                                                                              PORTB = 0xff;
                                                                                                                                              while(PORTA & Bit(1));
                                                                                                                                              while(1)
                                                                                                                                                      {
                                                                                                                                                      tick();
                                                                                                                                                      switch(PORTB, PORTA)
                                                                                                                                                                         {
                                                                                                                                                                         case 0x1c : PORTB = 0xfc;
                                                                                                                                                                         break;
                                                                                                                                                                         case 0xfc : PORTB = 0xf3;
                                                                                                                                                                         break;
                                                                                                                                                                         case 0xf3 : PORTB = 0xcf;
                                                                                                                                                                         break;
                                                                                                                                                                         case 0xcf : PORTB = 0x3f;
                                                                                                                                                                         break;
                                                                                                                                                                         case 0x3f : PORTA = 0x1c;
                                                                                                                                                                         }
                                                                                                                                                      }
                                                                                                                                        }

                                                                                                                                      Для двух кнопок, можно создать две функции и врубать их поочерёдно если кнопка была нажата он будет выполнять эту функцию бесконечно???????? - (так можно реализовать программу)…..
                                                                                                                                        Цитата
                                                                                                                                        bizar, 24.01.04, 12:01
                                                                                                                                        switch(PORTB, PORTA)
                                                                                                                                        Так делать бессмысленно. Это эквивалентно просто switch(PORTA)
                                                                                                                                          А как нужно (PORTB & PORTA)
                                                                                                                                            Цитата
                                                                                                                                            bizar, 24.01.04, 12:23
                                                                                                                                            А как нужно (PORTB & PORTA)
                                                                                                                                            А скажи словами, чего хочешь получить?
                                                                                                                                            Я некоторые этапы вашего диалога пропустил.
                                                                                                                                              Хотим заставить мигать светодиоды на PORTA и PORTB,
                                                                                                                                              чтобы они мигали при нажатии кнопки.

                                                                                                                                              Добавлено в :
                                                                                                                                              Нужно чтобы два светодиода первый RB второй на RA загорались одновременно.
                                                                                                                                                работа над ошибками:
                                                                                                                                                Цитата

                                                                                                                                                main()
                                                                                                                                                {
                                                                                                                                                TRISA = 3; // заменяем на TRISA = 3; ты же опрашиваешь кнопку на RA1, т е его и настраиваешь на вход
                                                                                                                                                PORTA = 0x1c;
                                                                                                                                                TRISB = 0;
                                                                                                                                                PORTB = 0xff;
                                                                                                                                                while(PORTA & Bit(1));
                                                                                                                                                while(1)
                                                                                                                                                {
                                                                                                                                                tick();
                                                                                                                                                if (PORTA & Bit(2)) PORTA &= ~Bit(2);
                                                                                                                                                else POTRA |= Bit(2);
                                                                                                                                                if (PORTB & Bit(1)) PORTB &= ~Bit(1);
                                                                                                                                                else POTRB |= Bit(1);
                                                                                                                                                }
                                                                                                                                                }
                                                                                                                                                  ExpandedWrap disabled
                                                                                                                                                    {
                                                                                                                                                    tick();
                                                                                                                                                    if (PORTA & Bit(2)) PORTA &= ~Bit(2);
                                                                                                                                                    else POTRA |= Bit(2);
                                                                                                                                                    if (PORTB & Bit(1)) PORTB &= ~Bit(1);
                                                                                                                                                    else POTRB |= Bit(1);
                                                                                                                                                    }

                                                                                                                                                  Объясни принцип работы этого кусочка (или натолкни на него).
                                                                                                                                                    Цитата

                                                                                                                                                    {
                                                                                                                                                    tick();
                                                                                                                                                    //------------------------------------------------
                                                                                                                                                    if (PORTA & Bit(2)) PORTA &= ~Bit(2);
                                                                                                                                                    else POTRA |= Bit(2);
                                                                                                                                                    // дословно:
                                                                                                                                                    // если 2-й бит порта PORTB установлен, сбрасываем его
                                                                                                                                                    // иначе устанавливаем его
                                                                                                                                                    //------------------------------------------------
                                                                                                                                                    if (PORTB & Bit(1)) PORTB &= ~Bit(1);
                                                                                                                                                    else POTRB |= Bit(1);
                                                                                                                                                    // тоже самое про первый бит порта PORTA
                                                                                                                                                    }
                                                                                                                                                      Проще написать PORTB ^= Bit(1);
                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                        main()
                                                                                                                                                            {
                                                                                                                                                              TRISA = 3; // заменяем на TRISA = 3; ты же опрашиваешь кнопку на RA1, т е его и настраиваешь на вход
                                                                                                                                                              PORTA = 0x1c;
                                                                                                                                                              TRISB = 0;
                                                                                                                                                              PORTB = 0xff;
                                                                                                                                                              while(PORTA & Bit(1));
                                                                                                                                                              while(1)
                                                                                                                                                                      {
                                                                                                                                                                      tick();
                                                                                                                                                                      PORTA ^= Bit(2); // инвертируем бит
                                                                                                                                                                      PORTB ^= Bit(1); // инвертируем бит
                                                                                                                                                                      }
                                                                                                                                                        }
                                                                                                                                                        2trainer
                                                                                                                                                        да, действительно, а я то бошку в свое время ломал, ка кэто одной командой сделать:)
                                                                                                                                                          main()
                                                                                                                                                          {
                                                                                                                                                          TRISA = 3; // RA1 настраиваем на вход
                                                                                                                                                          TRISA = 4; // RA2 настраиваем на вход
                                                                                                                                                          TRISA = 8; // RA3 настраиваем на вход
                                                                                                                                                          PORTA = 0x1c;
                                                                                                                                                          TRISB = 0;
                                                                                                                                                          PORTB = 0xff;
                                                                                                                                                          while(PORTA & Bit(1));
                                                                                                                                                          while(1)
                                                                                                                                                          {
                                                                                                                                                          tick(); ????????????????????
                                                                                                                                                          tick2(); ??????????????????????
                                                                                                                                                          tick3(); ???????????????????????
                                                                                                                                                          PORTA ^= Bit(2); // инвертируем бит
                                                                                                                                                          PORTB ^= Bit(1); // инвертируем бит
                                                                                                                                                          ??????????
                                                                                                                                                          ??????????

                                                                                                                                                          }
                                                                                                                                                          }

                                                                                                                                                          Чёта я не понял как для нескольких кнопок делать.
                                                                                                                                                          А так в общем то potor и trainer спасибо за ваше терпение.
                                                                                                                                                            Я так понимаю, что схема включения из CVET.RAR?
                                                                                                                                                            tick() - задержка на некоторый интервал времени?
                                                                                                                                                            Тогда этот код должен моргать некоторое время после нажатия кнопок одним из светодиодов, соответсвующим двоичному коду, образуемому нажатыми клавишами
                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                              main() {
                                                                                                                                                                 volatile unsigned char Keys;
                                                                                                                                                                 unsigned char mask;
                                                                                                                                                                 unsigned int i;
                                                                                                                                                                 TRISA = 4 | 8 | 16; // RA2,RA3,RA4 настраиваем на вход
                                                                                                                                                                 PORTA = 0x1c;
                                                                                                                                                                 TRISB = 0;
                                                                                                                                                                 while( 1 ) {
                                                                                                                                                                    PORTB = 0xff;
                                                                                                                                                                    do {
                                                                                                                                                                       tick();  // не будеи опрашивать кнопки слишком часто
                                                                                                                                                                       Keys = (~PORTA) & (4|8|16); // состояние кнопок на RA2-RA4. 1-нажата
                                                                                                                                                                    } while(Keys == 0);
                                                                                                                                                                    Keys >>= 2; // нормализуем(сдвигаем)
                                                                                                                                                                    mask = 1<<Keys; // битовая маска инвертируемого вывода порта B
                                                                                                                                                                    for( i=1000 ; i != 0 ; i-- ) {
                                                                                                                                                                       // "мигаем" соответствующим светодиодом
                                                                                                                                                                       PORTB ^= mask; // инвертируем бит
                                                                                                                                                                       tick(); // делаем небольшую задержку
                                                                                                                                                                    }
                                                                                                                                                                 }
                                                                                                                                                              }
                                                                                                                                                            Здесь, правда, неплохо было бы ввести "антидребезг"
                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                for( i=1000; i != 0; i-- )


                                                                                                                                                              i=1000, это i = (TRISA = 8)? (В донном случаи i будет TRISA?)

                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                mask = 1<<Keys; // битовая маска инвертируемого вывода порта B


                                                                                                                                                              По подробнее объясните.
                                                                                                                                                              У тебя в исходнике где: // "мигаем" соответствующим светодиодом
                                                                                                                                                              Можно указать одну последовательность миганий при нажатии,
                                                                                                                                                              А если я хочу к каждой кнопки различные последовательности мигания?
                                                                                                                                                              Так, на словах, что за "антидребезг".

                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                Я так понимаю, что схема включения из CVET.RAR?
                                                                                                                                                                tick() - задержка на некоторый интервал времени?


                                                                                                                                                              Да, да.
                                                                                                                                                              Сообщение отредактировано: bizar -
                                                                                                                                                                Цитата
                                                                                                                                                                bizar, 28.01.04, 17:01
                                                                                                                                                                i=1000, это i = (TRISA = 8)? (В донном случаи i будет TRISA?)
                                                                                                                                                                Это просто цикл из 1000 изменений состояния одного из светодиодов(светит/не светит).

                                                                                                                                                                Цитата
                                                                                                                                                                bizar, 28.01.04, 17:01
                                                                                                                                                                mask = 1<<Keys; // битовая маска инвертируемого вывода порта B

                                                                                                                                                                По подробнее объясните.
                                                                                                                                                                Это формирование битовой маски для инвертирования состояния нужного вывода. Просто в mask в бите, номер которого находится в Keys, будет установлена 1, в остальных битах - 0.

                                                                                                                                                                Цитата
                                                                                                                                                                bizar, 28.01.04, 17:01
                                                                                                                                                                У тебя в исходнике где: // "мигаем" соответствующим светодиодом
                                                                                                                                                                Можно указать одну последовательность миганий при нажатии,
                                                                                                                                                                А если я хочу к каждой кнопки различные последовательности мигания?
                                                                                                                                                                Можно. Программа только немного изменится.

                                                                                                                                                                Цитата
                                                                                                                                                                bizar, 28.01.04, 17:01
                                                                                                                                                                Так, на словах, что за "антидребезг".
                                                                                                                                                                Это несколько считываний состояния с небольшими интервалами между ними. Для устранения дребезга контактов.
                                                                                                                                                                  ExpandedWrap disabled
                                                                                                                                                                    main()
                                                                                                                                                                            {
                                                                                                                                                                            volatile unsigned char Keys;
                                                                                                                                                                            unsigned char mask;
                                                                                                                                                                            unsigned int i;
                                                                                                                                                                            TRISA = 4 | 8 | 16; // RA2,RA3,RA4 настраиваем на вход
                                                                                                                                                                            PORTA = 0x1c;
                                                                                                                                                                            TRISB = 0;
                                                                                                                                                                            while(1)
                                                                                                                                                                                   {
                                                                                                                                                                                   PORTB = 0xff;
                                                                                                                                                                                   do
                                                                                                                                                                                    {
                                                                                                                                                                                    tick(); // не будеи опрашивать кнопки слишком часто
                                                                                                                                                                                    Keys = (~PORTA) & (4|8|16); // состояние кнопок на RA2-RA4. 1-нажата
                                                                                                                                                                                    }
                                                                                                                                                                                   while(Keys == 0);
                                                                                                                                                                                   Keys >>= 2; // нормализуем(сдвигаем)
                                                                                                                                                                                   mask = 1<<Keys; // битовая маска инвертируемого вывода порта B
                                                                                                                                                                                   for( i=1000; i != 0; i-- )
                                                                                                                                                                                           {
                                                                                                                                                                                           if (PORTA = 0x1b) PORTB == 0xfd; //Если RA2 вход, зажигаем RB1
                                                                                                                                                                                           if (PORTA = 0x17) PORTB == 0xfb; //Если RA3 вход, зажигаем RB2
                                                                                                                                                                                           else POTRB == 0xf7; //Если RA4 вход, зажигаем RB3
                                                                                                                                                                                           PORTB ^= mask; // инвертируем бит
                                                                                                                                                                                           tick(); // делаем небольшую задержку
                                                                                                                                                                                           }
                                                                                                                                                                                    }
                                                                                                                                                                            }
                                                                                                                                                                    }


                                                                                                                                                                  Для нескольких кнопок.
                                                                                                                                                                  Думаю что здесь что то не то. Проверьте?
                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                      main() {
                                                                                                                                                                         volatile unsigned char Keys;
                                                                                                                                                                         unsigned char mask;
                                                                                                                                                                         unsigned int i;
                                                                                                                                                                         TRISA = 4 | 8 | 16; // RA2,RA3,RA4 настраиваем на вход
                                                                                                                                                                         PORTA = 0x1c;
                                                                                                                                                                         TRISB = 0;
                                                                                                                                                                         while(1) {
                                                                                                                                                                            PORTB = 0xff;
                                                                                                                                                                            do {
                                                                                                                                                                               tick(); // не будеи опрашивать кнопки слишком часто
                                                                                                                                                                               Keys = (~PORTA) & (4|8|16); // состояние кнопок на RA2-RA4. 1-нажата
                                                                                                                                                                            } while(Keys == 0);
                                                                                                                                                                            Keys >>= 2; // нормализуем(сдвигаем). Теперь:
                                                                                                                                                                                        //  бит 0 - RA2,
                                                                                                                                                                                        //  бит 1 - RA3,
                                                                                                                                                                                        //  бит 2 - RA4.
                                                                                                                                                                            mask = Keys;
                                                                                                                                                                            for( i=1000; i != 0; i-- ) {
                                                                                                                                                                               PORTB ^= mask;
                                                                                                                                                                               tick(); // делаем небольшую задержку
                                                                                                                                                                            }
                                                                                                                                                                         }
                                                                                                                                                                      }
                                                                                                                                                                    Так?
                                                                                                                                                                    P.S. Можно кое-что соптимизировать, но нагладность окончательно потеряется.
                                                                                                                                                                    Сообщение отредактировано: trainer -
                                                                                                                                                                      1)что то я не понял, Trainer же сделал тебе для нескольких кнопок?
                                                                                                                                                                      2) нафига , если у тебя есть код нажатой кнопки в переменной mask, ты еще раз пытаешься проверять PORTA???
                                                                                                                                                                      3) в твоем коде ошибка
                                                                                                                                                                      if (PORTA = 0x1b) PORTB == 0xfd; //Если RA2 вход, зажигаем RB1
                                                                                                                                                                      if (PORTA = 0x17) PORTB == 0xfb; //Если RA3 вход, зажигаем RB2
                                                                                                                                                                      else POTRB == 0xf7; //Если RA4 вход, зажигаем RB3
                                                                                                                                                                      эти строчки лишние:)
                                                                                                                                                                        potor, то есть где у trainer, написано
                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                          // "мигаем" соответствующим светодиодом

                                                                                                                                                                        Можно написать код:
                                                                                                                                                                        Если mask ровен тому-то выполнять те та включения светодиодов,
                                                                                                                                                                        Если равен другому то другие светодиоды будут гореть?
                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                          for( i=1000; i != 0; i-- )

                                                                                                                                                                        trainer, зачем ты :o использовал :o это в программе?
                                                                                                                                                                          Это цикл. Выполнять заданное действие ограниченное количество раз, а значит и ограниченное время.

                                                                                                                                                                          Добавлено в :
                                                                                                                                                                          Цитата
                                                                                                                                                                          bizar, 30.01.04, 09:29
                                                                                                                                                                          Если mask ровен тому-то выполнять те та включения светодиодов,
                                                                                                                                                                          Только лучше не mask, а Keys. Расшифровку см. в сообщении #80
                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                              potor, то есть где у trainer, написано
                                                                                                                                                                              // "мигаем" соответствующим светодиодом
                                                                                                                                                                               
                                                                                                                                                                              Можно написать код:
                                                                                                                                                                              Если mask ровен тому-то выполнять те та включения светодиодов,
                                                                                                                                                                              Если равен другому то другие светодиоды будут гореть?

                                                                                                                                                                            Это будет выглядеть вот так:
                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                              {
                                                                                                                                                                              if (Keys = 0) POTRB == 0xfd; //Если Keys равен 0 горит светодиод на RB1
                                                                                                                                                                              if (Keys = 1) PORTB == 0xfb; //Если Keys равен 1 горит светодиод на RB2
                                                                                                                                                                              if (Keys = 2) PORTB == 0xf7; // Если Keys равен 2 горит светодиод на RB3
                                                                                                                                                                              }

                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                              Это цикл. Выполнять заданное действие ограниченное количество раз, а значит и ограниченное время.

                                                                                                                                                                            Тоесть светодиод мигнёт 1000 раз, и всё?
                                                                                                                                                                            Сообщение отредактировано: bizar -
                                                                                                                                                                              Цитата
                                                                                                                                                                              bizar, 31.01.04, 12:10
                                                                                                                                                                              Тоесть светодиод мигнёт 1000 раз, и всё?
                                                                                                                                                                              Точнее - 500 раз. В цикле одна итерация - зажечь, другая - погасить, т.е. две итерации на одну "вспышку". 1000/2 = 500.
                                                                                                                                                                              Потом снова будет ожидаться нажатие кнопок.

                                                                                                                                                                              Цитата
                                                                                                                                                                              bizar, 31.01.04, 12:10
                                                                                                                                                                              if (Keys = 0) POTRB == 0xfd; //Если Keys равен 0 горит светодиод на RB1
                                                                                                                                                                              Keys внутри цикла for никогда не будет равен 0. Только от 1 до 7 включительно.
                                                                                                                                                                              И этот набор if-ов можно заменить на switch(Keys)
                                                                                                                                                                              P.S. В C и C++ присваивание значения обозначается = , а сравнение на равенство ==
                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                  {
                                                                                                                                                                                  switch (Keys == 1) PORTB = 0xfb; //Если Keys равен 1 горит светодиод на RB2
                                                                                                                                                                                  switch (Keys == 2) PORTB = 0xf7; // Если Keys равен 2 горит светодиод на RB3
                                                                                                                                                                                  else PORTB = 0xf7;
                                                                                                                                                                                  }

                                                                                                                                                                                Как ещё можно сделать, Keys = 0?
                                                                                                                                                                                trainer, у тебя в примере, Keys от ноля до 2, можно было сделать от 1 до 3, или нет?
                                                                                                                                                                                Чтобы такого гимара не было как в for не может Keys = 0.
                                                                                                                                                                                  Цитата
                                                                                                                                                                                  bizar, 1.02.04, 10:59
                                                                                                                                                                                  Как ещё можно сделать, Keys = 0?
                                                                                                                                                                                  А зачем? Почему именно 0, а не, например, 1?

                                                                                                                                                                                  Цитата
                                                                                                                                                                                  bizar, 1.02.04, 10:59
                                                                                                                                                                                  у тебя в примере, Keys от ноля до 2
                                                                                                                                                                                  Не от 0 до 2, а три бита(с №0 по №2) - семь ненулевых значений(1,2,3,4,5,6,7).

                                                                                                                                                                                  Добавлено в :
                                                                                                                                                                                  ExpandedWrap disabled
                                                                                                                                                                                    switch( Keys ) {
                                                                                                                                                                                       case 1:
                                                                                                                                                                                          PORTB = 0xfb; //Если Keys равен 1 горит светодиод на RB2
                                                                                                                                                                                          break;
                                                                                                                                                                                       case 2:
                                                                                                                                                                                          PORTB = 0xf7; // Если Keys равен 2 горит светодиод на RB3
                                                                                                                                                                                          break;
                                                                                                                                                                                       case 3:
                                                                                                                                                                                          // другое действие
                                                                                                                                                                                          break;
                                                                                                                                                                                       case 4:
                                                                                                                                                                                          // другое действие
                                                                                                                                                                                          break;
                                                                                                                                                                                       case 5:
                                                                                                                                                                                          // другое действие
                                                                                                                                                                                          break;
                                                                                                                                                                                       case 6:
                                                                                                                                                                                          // другое действие
                                                                                                                                                                                          break;
                                                                                                                                                                                       case 7:
                                                                                                                                                                                          // другое действие
                                                                                                                                                                                    }
                                                                                                                                                                                    У нас же 3 кнопки почему case - 7 значений? :mellow:
                                                                                                                                                                                      Цитата
                                                                                                                                                                                      bizar, 2.02.04, 11:52
                                                                                                                                                                                      У нас же 3 кнопки почему case - 7 значений?
                                                                                                                                                                                      Потому что каждой кнопке соответствует один бит, три кнопки - три бита. Могут быть нажаты и две и три кнопки одновременно. Всего комбинаций нажатий трех кнопок - 7 штук, в двоичном виде так:
                                                                                                                                                                                      001
                                                                                                                                                                                      010
                                                                                                                                                                                      011
                                                                                                                                                                                      100
                                                                                                                                                                                      101
                                                                                                                                                                                      110
                                                                                                                                                                                      111
                                                                                                                                                                                      Прим.: 1 - кнопка нажата, 0 - нет.
                                                                                                                                                                                      Сообщение отредактировано: trainer -
                                                                                                                                                                                        Можно до 7 кнопок замутить?
                                                                                                                                                                                          Цитата
                                                                                                                                                                                          bizar, 2.02.04, 13:42
                                                                                                                                                                                          Можно до 7 кнопок замутить?
                                                                                                                                                                                          Можно сколько угодно. Лишь бы портов хватило. В существующем варианте 3 кнопки, для которых существует 7 комбинаций нажатий.
                                                                                                                                                                                            нет, 3-входа=7 возможных состояний

                                                                                                                                                                                            Добавлено в :
                                                                                                                                                                                            ссори, уже ответили:)
                                                                                                                                                                                              Типа этого?
                                                                                                                                                                                              Прикреплённый файлПрикреплённый файл____2.rar (5.18 Кбайт, скачиваний: 428)
                                                                                                                                                                                                Прошу прощения за оффтопик, но тут вообще про что? А то интересно стало!
                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                  NadZ, 2.02.04, 22:31
                                                                                                                                                                                                  Прошу прощения за оффтопик, но тут вообще про что? А то интересно стало!
                                                                                                                                                                                                  Да тут bizar пытается осваивать программирование микроконтроллеров на примере создания "мигалки" на МК семейства PIC16

                                                                                                                                                                                                  Добавлено в :
                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                  bizar, 2.02.04, 20:23
                                                                                                                                                                                                  Типа этого?
                                                                                                                                                                                                  Нет. :)
                                                                                                                                                                                                  У тебя три бита(три входа: RA2,RA3,RA4, три кнопки). Сколько у трех бит возможных ненулевых состояний?
                                                                                                                                                                                                  Ответ: 7
                                                                                                                                                                                                  Хочешь больше - добавь еще используемых входов(портов) микроконтроллера. Только придется взять микроконтроллер побольше или совмещать функции выводов в существующем.
                                                                                                                                                                                                    Если нельзя сделать на трёх выводах семь кнопок,
                                                                                                                                                                                                    зачем нужны :huh: 7 :huh: ненулевых состояний?
                                                                                                                                                                                                      тебе же говорят, ты можешь отслеживать одновременное нажатие кнопок:)
                                                                                                                                                                                                        Цитата
                                                                                                                                                                                                        bizar, 3.02.04, 12:26
                                                                                                                                                                                                        зачем нужны 7 ненулевых состояний?
                                                                                                                                                                                                        Они не нужны. Они есть. Элементарная двоичная арифметика - слово размером в три двоичных разряда имеет семь состояний, когда хотя бы один бит ненулевой. Не хочешь отслеживать все возможные состояния - не отслеживай. :)
                                                                                                                                                                                                          Нажимаю на кнопку выполняется зажигание светодиодов,
                                                                                                                                                                                                          потом нажимаю другую, в исходнике trainer, не должны выполняться
                                                                                                                                                                                                          другие зажигания, а будет выполняться до конца нажатие первой кнопки????

                                                                                                                                                                                                          Добавлено в :
                                                                                                                                                                                                          potor, я смогу нажать две кнопки одновременно и что из этого выйдит?
                                                                                                                                                                                                            :)
                                                                                                                                                                                                            Программа опрашивает состояние всех кнопок и ждет пока не будет нажата хотя бы одна из них. Затем в соответствии с их состоянием выполняет некое действие в течение некоторого времени, затем снова опрашивает состояние и т.д..
                                                                                                                                                                                                            Цитата
                                                                                                                                                                                                            bizar, 3.02.04, 15:43
                                                                                                                                                                                                            я смогу нажать две кнопки одновременно и что из этого выйдит?
                                                                                                                                                                                                            Что напишешь в соответствующем case, то и выйдет.
                                                                                                                                                                                                              trainer, почему та сказал "нет" :rolleyes: , про схему
                                                                                                                                                                                                              #93 там-же есть одновременное нажатие 2 кнопок, только в одной кнопки?
                                                                                                                                                                                                                Потому, что это не решение. В схеме из #93 можно все равно нажать несколько кнопок. Так зачем такой огород городить? Если 3 кнопки обеспечивают то же самое.
                                                                                                                                                                                                                  В #include, нужно указать библиотеку, у меня IAR (PIC), (potor у тебя есть IAR для пик (ты его скачал или нет)) я не знаю какие библиотеки для чего служат, укажите какие/для чего?
                                                                                                                                                                                                                  Фрагменты выделенные :unsure: с двух сторон :unsure: :
                                                                                                                                                                                                                  Можно ли описывать так или нужно ставить break, мне надо одновременно чтобы порты RA и RB гасли светодиоды?
                                                                                                                                                                                                                  ExpandedWrap disabled
                                                                                                                                                                                                                    #include<имя файла, где описан твой пресловутый порт RB, RA>
                                                                                                                                                                                                                    main()
                                                                                                                                                                                                                         {
                                                                                                                                                                                                                         volatile unsigned char Keys;
                                                                                                                                                                                                                         unsigned char mask;
                                                                                                                                                                                                                         unsigned int i;
                                                                                                                                                                                                                         TRISA = 4 | 8 | 16; // RA2,RA3,RA4 настраиваем на вход
                                                                                                                                                                                                                         PORTA = 0xff;
                                                                                                                                                                                                                         TRISB = 0;
                                                                                                                                                                                                                         while(1)
                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                 PORTB = 0xff;
                                                                                                                                                                                                                                 do
                                                                                                                                                                                                                                   {
                                                                                                                                                                                                                                    tick(); // не будеи опрашивать кнопки слишком часто
                                                                                                                                                                                                                                    Keys = (~PORTA) & (4|8|16); // состояние кнопок на RA2-RA4. 1-нажата
                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                 while(Keys == 0);
                                                                                                                                                                                                                                 Keys >>= 2; // нормализуем(сдвигаем)
                                                                                                                                                                                                                                 mask = 1<<Keys; // битовая маска инвертируемого вывода порта B
                                                                                                                                                                                                                                 for( i=1000; i != 0; i-- )
                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                           switch( Keys )
                                                                                                                                                                                                                                                                        {
                                                                                                                                                                                                                                                                        case 1:
                                                                                                                                                                                                                                           PORTA = 0x1d; //Если Keys равен 1 горит светодиод на RA1
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTA = 0x1c; //горит RA1 и RA0
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0x7f; // горит RB7 с RA1 и RA0
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0x3f; // горит RB7, RB6 (RA1 - 0)
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0x1f; // горит RB7 - RB5 (RA1 - 0)
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xf; // горит RB7 - RB4 (RA1 - 0)
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0x7; // горит RB7 - RB3 (RA1 - 0)
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0x3; // горит RB7 - RB2 (RA1 - 0)
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0x1; // горит RB7 - RB1 (RA1 - 0)
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0x0; // горит RB7 - RB0 (RA1 - 0)
                                                                                                                                                                                                                                           //горят все светодиоды
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                    :unsure:               PORTB = 0xff; // гасим светодиоды на RB
                                                                                                                                                                                                                                           PORTA = 0xff; // гасим светодиоды на RA
                                                                                                                                                                                                                    :unsure:               break;  
                                                                                                                                                                                                                                           PORTB = 0xfe; // горит RB0
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xfc; // горит RB0, RB1
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xf8; // горит RB0 - RB2
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xf0; // горит RB0 - RB3
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xe0; // горит RB0 - RB4
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xco; // горит RB0 - RB5
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0x80; // горит RB0 - RB6
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0x0; // горит весь RB порт
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTA = 0x1d; // горит RA1 (RB0 - 7)
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTA = 0x1c; // горит RA0, RA1 (RB0 - 7)
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                    :unsure:               PORTA = 0xff; // гасим RA
                                                                                                                                                                                                                                           POTRB = 0xff; // гасим RB
                                                                                                                                                                                                                    :unsure:               break;
                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                     case 2: // делаю в виде бегущей туда сюда точки
                                                                                                                                                                                                                                           PORTA = 0x1d; // Если Keys равен 2 горит светодиод на RA1
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTA = 0x1e; //горит светодиод на RA0                      
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                    :unsure:               PORTA = 0xff; // гасим RA порт
                                                                                                                                                                                                                                           PORTB = 0x7f; //горит светодиод на RB7
                                                                                                                                                                                                                    :unsure:               break;  
                                                                                                                                                                                                                                           PORTB = 0xbf; //горит светодиод на RB6
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xdf; //горит светодиод на RB5
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xef; //горит светодиод на RB4
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xf7; //горит светодиод на RB3
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xfb; //горит светодиод на RB2
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xfd; //горит светодиод на RB1
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xfe; //горит светодиод на RB0
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xfd; //горит светодиод на RB1
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xfb; //горит светодиод на RB2
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xf7; //горит светодиод на RB3
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xef; //горит светодиод на RB4
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xdf; //горит светодиод на RB5
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0xbf; //горит светодиод на RB6
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                           PORTB = 0x7f; //горит светодиод на RB7
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                    :unsure:               PORTB = 0xff; // гасим RB порт
                                                                                                                                                                                                                                           PORTA = 0x1e; //горит светодиод на RA0
                                                                                                                                                                                                                    :unsure:               break;
                                                                                                                                                                                                                                           PORTA = 0x1d; //горит светодиод на RA1
                                                                                                                                                                                                                                           break;
                                                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                                         PORTB ^= mask; // инвертируем бит
                                                                                                                                                                                                                                                         tick(); // делаем небольшую задержку
                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                               }
                                                                                                                                                                                                                    tick() // делаем задержку времени
                                                                                                                                                                                                                         {
                                                                                                                                                                                                                          for (unsigned int i = 0xffff; i!=0; i--);
                                                                                                                                                                                                                          for (unsigned int i = 0xffff; i!=0; i--);
                                                                                                                                                                                                                          for (unsigned int i = 0xffff; i!=0; i--);
                                                                                                                                                                                                                          for (unsigned int i = 0xffff; i!=0; i--);
                                                                                                                                                                                                                         }
                                                                                                                                                                                                                  Сообщение отредактировано: bizar -
                                                                                                                                                                                                                    Слишком уж много у тебя строчек в switch. :)
                                                                                                                                                                                                                    то есть хочется сделать бегущий огонь?
                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                      #include <pic16f84.h>
                                                                                                                                                                                                                      /* подпрограмма временной задержки */
                                                                                                                                                                                                                      void tick(void) {
                                                                                                                                                                                                                         unsigned int i;
                                                                                                                                                                                                                         for ( i = 0xffff; i!=0; i--);
                                                                                                                                                                                                                         for ( i = 0xffff; i!=0; i--);
                                                                                                                                                                                                                         for ( i = 0xffff; i!=0; i--);
                                                                                                                                                                                                                         for ( i = 0xffff; i!=0; i--);
                                                                                                                                                                                                                      }
                                                                                                                                                                                                                      /* Эта подпрограмма зажигает нулем светодиод на определенном выводе */
                                                                                                                                                                                                                      void FlashPin(unsigned char pin_code){
                                                                                                                                                                                                                         switch(pin_code) {
                                                                                                                                                                                                                            case 0:
                                                                                                                                                                                                                            case 1:
                                                                                                                                                                                                                            case 2:
                                                                                                                                                                                                                            case 3:
                                                                                                                                                                                                                            case 4:
                                                                                                                                                                                                                            case 5:
                                                                                                                                                                                                                            case 6:
                                                                                                                                                                                                                            case 7:
                                                                                                                                                                                                                               /* 0-7 - выводы порта B */
                                                                                                                                                                                                                               PORTB &= 0xfe<<pin_code;
                                                                                                                                                                                                                               break;
                                                                                                                                                                                                                            case 8:
                                                                                                                                                                                                                            case 9:
                                                                                                                                                                                                                               /* 8,9 - выводы порта A(RA0,RA1) */
                                                                                                                                                                                                                               PORTA &= 0xfe<<(pin_code-8);
                                                                                                                                                                                                                         }
                                                                                                                                                                                                                      }
                                                                                                                                                                                                                      /* Эта подпрограмма гасит все светодиоды */
                                                                                                                                                                                                                      void TurnOffPins(void) {
                                                                                                                                                                                                                         PORTB = 0xff;
                                                                                                                                                                                                                         PORTA |= 3;
                                                                                                                                                                                                                      }
                                                                                                                                                                                                                      /* основная программа */
                                                                                                                                                                                                                      main() {
                                                                                                                                                                                                                         volatile unsigned char Keys;
                                                                                                                                                                                                                         unsigned char counter;
                                                                                                                                                                                                                         unsigned char i;
                                                                                                                                                                                                                         unsigned char direction;
                                                                                                                                                                                                                         TRISA = 4 | 8 | 16; // RA2,RA3,RA4 настраиваем на вход
                                                                                                                                                                                                                         PORTA = 0x1c;
                                                                                                                                                                                                                         TRISB = 0;
                                                                                                                                                                                                                         while(1) {
                                                                                                                                                                                                                            TurnOffPins();   /* гасим все светодиоды */
                                                                                                                                                                                                                            do {
                                                                                                                                                                                                                               tick(); // не будем опрашивать кнопки слишком часто
                                                                                                                                                                                                                               Keys = (~PORTA) & (4|8|16); // состояние кнопок на RA2-RA4. 1-нажата
                                                                                                                                                                                                                            } while(Keys == 0);
                                                                                                                                                                                                                            Keys >>= 2; // нормализуем(сдвигаем). Теперь:
                                                                                                                                                                                                                                        //  бит 0 - RA2,
                                                                                                                                                                                                                                        //  бит 1 - RA3,
                                                                                                                                                                                                                                        //  бит 2 - RA4.
                                                                                                                                                                                                                            counter = Keys;
                                                                                                                                                                                                                            direction = -1;   /* направление "движения" */
                                                                                                                                                                                                                            for( i=1000 ; i != 0 ; i-- ) {
                                                                                                                                                                                                                               if( counter == Keys ) {
                                                                                                                                                                                                                                  // прошли круг - начанаем двигаться в другую сторону
                                                                                                                                                                                                                                  direction = -direction;
                                                                                                                                                                                                                               }
                                                                                                                                                                                                                               TurnOffPins();        /* гасим все светодиоды */
                                                                                                                                                                                                                               FlashPin(counter);    /* зажигаем определенный */
                                                                                                                                                                                                                               counter += direction; /* в следующий раз будем зажигать другой */
                                                                                                                                                                                                                               if( counter == 0xff ) {
                                                                                                                                                                                                                                  /* закольцовываем "снизу" */
                                                                                                                                                                                                                                  counter = 9;
                                                                                                                                                                                                                               }
                                                                                                                                                                                                                               if( counter == 10 ) {
                                                                                                                                                                                                                                  /* закольцовываем "сверху" */
                                                                                                                                                                                                                                  counter = 0;
                                                                                                                                                                                                                               }
                                                                                                                                                                                                                               tick();  /* пауза - чтобы светодиод погорел немного */
                                                                                                                                                                                                                            }
                                                                                                                                                                                                                         }
                                                                                                                                                                                                                      }
                                                                                                                                                                                                                    Работоспособность не проверял - у меня нет ни IAR EW PIC, ни PIC16F84
                                                                                                                                                                                                                    Что будет не понятно - отвечу.
                                                                                                                                                                                                                    Сообщение отредактировано: trainer -
                                                                                                                                                                                                                      Цитата

                                                                                                                                                                                                                      potor у тебя есть IAR для пик (ты его скачал или нет)

                                                                                                                                                                                                                      скачать то я его скачал, два раза пытался, не проходит у меня его установка, причем на обоих домашних машинах:((
                                                                                                                                                                                                                        Может сначало кряк поставить надо:
                                                                                                                                                                                                                        Прикреплённый файлПрикреплённый файлEWPIC_V221Acrk.rar (16.65 Кбайт, скачиваний: 490)
                                                                                                                                                                                                                          нет, я думаю сам пакет на iar-овском сайте битый лежит, ты то себе установил???
                                                                                                                                                                                                                            У меня всё Ok поставилось, бес проблем.
                                                                                                                                                                                                                            Может как-нибудь тебе перекинуть... ^_^
                                                                                                                                                                                                                              да наверное не надо, как ты можешь его выслать? если почтой, я не вытяну такое письмо физически, кстати, ты тестовую плату спаял? работает? а то может мы обсуждаем неизвестно что?
                                                                                                                                                                                                                                trainer, у тебя всё так сложно (в исходнике),
                                                                                                                                                                                                                                ты сможешь написать алгоритм (чтобы было более понятней)?
                                                                                                                                                                                                                                (до простого смертного это не доходит).

                                                                                                                                                                                                                                potor, плату накидал, теперь нужно скомпилить.
                                                                                                                                                                                                                                Как в IAR компилить??? :unsure:
                                                                                                                                                                                                                                  Цитата

                                                                                                                                                                                                                                  Как в IAR компилить???

                                                                                                                                                                                                                                  build, только предварительно выставить нужные опции в свойствах проекта
                                                                                                                                                                                                                                    свойства проекта где расположены?
                                                                                                                                                                                                                                    Project->build all?
                                                                                                                                                                                                                                      Project->build all это скомпилировать весь проект
                                                                                                                                                                                                                                      свойства проекта, это что то типа Project->properties, я сейчас на работе а там IAR а нет, поэтому точно сказать не могу, но помню точно, что значек свойств есть на панели инструментов

                                                                                                                                                                                                                                      что тебе конкретно не понятно в исходнике trainera?
                                                                                                                                                                                                                                      ты кернигена с ричем скачал?
                                                                                                                                                                                                                                        potor, если ссылки есть скинь.
                                                                                                                                                                                                                                        Я обыкновенной самообучалкой пользуюсь, там такие сложные
                                                                                                                                                                                                                                        примеры на разбирают.
                                                                                                                                                                                                                                            Цитата
                                                                                                                                                                                                                                            bizar, 10.02.04, 11:30
                                                                                                                                                                                                                                            ты сможешь написать алгоритм (чтобы было более понятней)?
                                                                                                                                                                                                                                            А воспользоваться отладчиком? ;)

                                                                                                                                                                                                                                            Итак, идея программы из #104 - создание бегущего огня. Пользователь нажимает одну или несколько кнопок - МК определяет двоичную комбинацию N, соответствующую нажатыи кнопкам и начинает гонять огоньки. Первым загорается светодиод N, затем он гаснет и загорается N+1-ый и так далее до 10-го, после которого загорается 1, затем 2 и так далее до N-го, после чего начинается движение в обратную сторону: N-1-ый, N-2-ой,...,1-ый, 10-ый и далее снова до N-го. И так далее по кругу.
                                                                                                                                                                                                                                            Комментариев я там в тексте программы вроде достаточно много написал. :)
                                                                                                                                                                                                                                              trainer, а алгоритм для второй кнопки не как сделать не могу
                                                                                                                                                                                                                                              а свитчей там ещё больше (это в моём примере где много свитч)

                                                                                                                                                                                                                                              Добавлено в :
                                                                                                                                                                                                                                              potor тестовую плату спаял только пример скомпилить не могу.
                                                                                                                                                                                                                                                Цитата

                                                                                                                                                                                                                                                trainer, а алгоритм для второй кнопки не как сделать не могу
                                                                                                                                                                                                                                                а свитчей там ещё больше (это в моём примере где много свитч)

                                                                                                                                                                                                                                                дык он же тебе для нескольких кнопок сделал?
                                                                                                                                                                                                                                                Цитата

                                                                                                                                                                                                                                                potor тестовую плату спаял только пример скомпилить не могу.

                                                                                                                                                                                                                                                что неполучается? что говорят компилятор и линкер?
                                                                                                                                                                                                                                                  Создаю Project и что дальше делать не знаю
                                                                                                                                                                                                                                                  куда кад вставлять?
                                                                                                                                                                                                                                                  Когда создаёшь Text вставляешь код
                                                                                                                                                                                                                                                  В заголовке Project, build - нельзя нажать.
                                                                                                                                                                                                                                                  Что делать?
                                                                                                                                                                                                                                                    Если в IAR EWPIC так же, как и в IAR EWAVR, то нажимаешь меню File->New..., выбираешь source/text, вставляешь текст, нажимаешь File->SaveAs..., вводишь имя в виде имя_файла.c , нажимаешь Сохранить.
                                                                                                                                                                                                                                                    Если в проекте в разделе Common Sources этот файл не появился, то нажимаешь меню Project->Files..., выбираешь этот файл, нажимаешь Add, затем Done.
                                                                                                                                                                                                                                                    Файл в проекте.
                                                                                                                                                                                                                                                    Дальше - компиляция.
                                                                                                                                                                                                                                                      В IAR для pic также.
                                                                                                                                                                                                                                                      Но у меня проблема счёлкаю project
                                                                                                                                                                                                                                                      а там все кнопки нельзя нажать кроме
                                                                                                                                                                                                                                                      двух последних (Librarian, Debugger).???????
                                                                                                                                                                                                                                                        незнаю, что то ты тупишь, домой приду посмотрю:)
                                                                                                                                                                                                                                                          Ну, не знаю...
                                                                                                                                                                                                                                                          У меня в IAR EWAVR даже при пустом проекте эти кнопки активны.
                                                                                                                                                                                                                                                            Вот полюбуйтесь что у меня выдаёт.
                                                                                                                                                                                                                                                            (Я почему-то не смог прекрепить этот файл к сообщению
                                                                                                                                                                                                                                                            выдовал ошибку может кто попробует, мне любопытно)Скачайте тут
                                                                                                                                                                                                                                                              дык сначало надо проект создать, а потом уже к нему С файл прикркплять

                                                                                                                                                                                                                                                              Добавлено в :
                                                                                                                                                                                                                                                              в меню file должно быть что то типа New WorckSpace, или New Project
                                                                                                                                                                                                                                                                Создал я New Project
                                                                                                                                                                                                                                                                как к нему *.с файл прекрепить
                                                                                                                                                                                                                                                                и что далее делать опиши???
                                                                                                                                                                                                                                                                  ну ищи что то типа Add file to project

                                                                                                                                                                                                                                                                  Добавлено в :
                                                                                                                                                                                                                                                                  посмотри вчерашний пост 120 от trainerа
                                                                                                                                                                                                                                                                    Нашёл Project->File
                                                                                                                                                                                                                                                                    Теперь с чего начинать компилить.????
                                                                                                                                                                                                                                                                      ты присоединил файл к проекту?

                                                                                                                                                                                                                                                                      Добавлено в :
                                                                                                                                                                                                                                                                      тип процессора задал?

                                                                                                                                                                                                                                                                      Добавлено в :
                                                                                                                                                                                                                                                                      если все ок, то жмакаешь build и наблюдаешь кучу ошибок, а потом вываливаешь их сюда
                                                                                                                                                                                                                                                                        В Project->Options
                                                                                                                                                                                                                                                                        В General нужно указать путь к "Процессор сетап файл" pic16f84
                                                                                                                                                                                                                                                                        Так да??? Что дальше???

                                                                                                                                                                                                                                                                        Добавлено в :
                                                                                                                                                                                                                                                                        Rebuilding target Debug...
                                                                                                                                                                                                                                                                        tit.c
                                                                                                                                                                                                                                                                        C:\Documents and Settings\bizar1\Рабочий стол\tit.c (2) : Fatal Error[Pe005]: could not open source file "pic16f84.h"

                                                                                                                                                                                                                                                                        Total number of errors: 1
                                                                                                                                                                                                                                                                        Total number of warnings: 0

                                                                                                                                                                                                                                                                        Ошибка с описанием pic16f84????
                                                                                                                                                                                                                                                                          смотри где у тебя находится файл pic16f84.h, и если его нет иши вайл с описаниями регистров
                                                                                                                                                                                                                                                                          а вообще если он в каталоге твоего проекта пишут #include"pic16f84.h", а если в каталоге стандартных заголовков пишут #include<pic16f84.h>, но скорее всего он у тебя называется по другому, ищи, я на обед буду через час
                                                                                                                                                                                                                                                                            Нашол он правельно называеться io16f84.h
                                                                                                                                                                                                                                                                            Теперь выдаёт:Rebuilding target Debug...
                                                                                                                                                                                                                                                                            tit.c
                                                                                                                                                                                                                                                                            C:\Documents and Settings\bizar1\Рабочий стол\tit.c (56) : Warning[Pe068]: integer conversion resulted in a change of sign
                                                                                                                                                                                                                                                                            C:\Documents and Settings\bizar1\Рабочий стол\tit.c (57) : Warning[Pe069]: integer conversion resulted in truncation
                                                                                                                                                                                                                                                                            Linking...

                                                                                                                                                                                                                                                                            Total number of errors: 0
                                                                                                                                                                                                                                                                            Total number of warnings: 2
                                                                                                                                                                                                                                                                            Что дальше??
                                                                                                                                                                                                                                                                              ну, вроде скомпилил (правда с варнингами), посмотри на какие мтрочки кода он выдает варнинги
                                                                                                                                                                                                                                                                                Всё удолил и повторил всё заново
                                                                                                                                                                                                                                                                                Выдаёт:
                                                                                                                                                                                                                                                                                Rebuilding target Debug...
                                                                                                                                                                                                                                                                                tit.c
                                                                                                                                                                                                                                                                                C:\PROGRA~1\IARSYS~1\ew23\PICmicro\INC\io16f84.h (24) : Fatal Error[Pe035]: #error directive: "This I/O-file is for the 16F84 controller only"

                                                                                                                                                                                                                                                                                Total number of errors: 1
                                                                                                                                                                                                                                                                                Total number of warnings: 0
                                                                                                                                                                                                                                                                                  видимо ты забыл в свойствах проекта задать тип контроллера, т е получается, что ты берешь заголовочный файл для PIC 16f84, а в проекте указан другой тип
                                                                                                                                                                                                                                                                                    Цитата
                                                                                                                                                                                                                                                                                    bizar, 19.02.04, 13:37
                                                                                                                                                                                                                                                                                    Всё удолил и повторил всё заново
                                                                                                                                                                                                                                                                                    Зачем? У тебя же в #132 уже откомпилировалось. :)
                                                                                                                                                                                                                                                                                      Незнаю просто решил потренироваться.
                                                                                                                                                                                                                                                                                      Сейчас удолил строчку в библиотеке io16f84.h
                                                                                                                                                                                                                                                                                      Скампелил:
                                                                                                                                                                                                                                                                                      Rebuilding target Debug...
                                                                                                                                                                                                                                                                                      tit.c
                                                                                                                                                                                                                                                                                      C:\Documents and Settings\bizar1\Рабочий стол\tit.c (55) : Warning[Pe068]: integer conversion resulted in a change of sign
                                                                                                                                                                                                                                                                                      C:\Documents and Settings\bizar1\Рабочий стол\tit.c (56) : Warning[Pe069]: integer conversion resulted in truncation
                                                                                                                                                                                                                                                                                      Linking...

                                                                                                                                                                                                                                                                                      Total number of errors: 0
                                                                                                                                                                                                                                                                                      Total number of warnings: 2


                                                                                                                                                                                                                                                                                      warnings:
                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                        direction = -1;  
                                                                                                                                                                                                                                                                                              for( i=1000; i != 0; i-- )


                                                                                                                                                                                                                                                                                      Добавлено в :
                                                                                                                                                                                                                                                                                      Potor ты был прав...
                                                                                                                                                                                                                                                                                        определи direction как signed char
                                                                                                                                                                                                                                                                                          Всё работает теперь осталось одна ошибка
                                                                                                                                                                                                                                                                                          ExpandedWrap disabled
                                                                                                                                                                                                                                                                                            for( i=1000; i != 0; i-- )
                                                                                                                                                                                                                                                                                            объяви i как unsigned int

                                                                                                                                                                                                                                                                                            Добавлено в :
                                                                                                                                                                                                                                                                                            только в функции main конечно
                                                                                                                                                                                                                                                                                              Цитата
                                                                                                                                                                                                                                                                                              potor, 19.02.04, 14:06
                                                                                                                                                                                                                                                                                              определи direction как signed char
                                                                                                                                                                                                                                                                                              Или напиши:
                                                                                                                                                                                                                                                                                              direction = (unsigned char)-1;



                                                                                                                                                                                                                                                                                              Ну что, типа, одним эмбеддером стало больше. :)



                                                                                                                                                                                                                                                                                              А работает-то как задумано?
                                                                                                                                                                                                                                                                                              Сообщение отредактировано: trainer -
                                                                                                                                                                                                                                                                                                Цитата

                                                                                                                                                                                                                                                                                                Ну что, типа, одним эмбеддером стало больше

                                                                                                                                                                                                                                                                                                да, вот только проверить на девайсе осталось:)
                                                                                                                                                                                                                                                                                                  Total number of errors - Это ошибки
                                                                                                                                                                                                                                                                                                  Total number of warnings - а это про что??
                                                                                                                                                                                                                                                                                                    Цитата

                                                                                                                                                                                                                                                                                                    Total number of errors - Это ошибки
                                                                                                                                                                                                                                                                                                    Total number of warnings - а это про что??

                                                                                                                                                                                                                                                                                                    это придупреждение, грубо говоря компилятор "сомневается" правильно ли он скомпилировал некий участок кода
                                                                                                                                                                                                                                                                                                      Цитата
                                                                                                                                                                                                                                                                                                      bizar, 20.02.04, 11:56
                                                                                                                                                                                                                                                                                                      Total number of warnings - а это про что??
                                                                                                                                                                                                                                                                                                      Это просто предупреждения. Например, о том, что компилятор не уверен в правильности чего-то. Или предупреждает о потенциальной опастности каких-то конструкций. Или просто сообщает, что он что-то сделал. :)
                                                                                                                                                                                                                                                                                                        Всё откомпилил "Ошибок нет".
                                                                                                                                                                                                                                                                                                        Теперь нужно вытащить *.hex или *.bin
                                                                                                                                                                                                                                                                                                        Как?
                                                                                                                                                                                                                                                                                                          если линкер не создал hex, смотри настройки линкера, там должно быть чтго то типа generate hex file, или create hex file
                                                                                                                                                                                                                                                                                                            Нашёл только Generate linker listing
                                                                                                                                                                                                                                                                                                            постави галочку и некаких изменений как мне быть? :unsure:
                                                                                                                                                                                                                                                                                                              Смотри содержимое папки Debug\Exe или Release\Exe в зависимости от того, какой проект собираешь(debug или release)
                                                                                                                                                                                                                                                                                                              Сообщение отредактировано: trainer -
                                                                                                                                                                                                                                                                                                                В Release\Exe пусто нет ни одного файла
                                                                                                                                                                                                                                                                                                                а в Debug\Exe два файла:
                                                                                                                                                                                                                                                                                                                rrr.d39
                                                                                                                                                                                                                                                                                                                rrr - в нём садержиться:
                                                                                                                                                                                                                                                                                                                [Registers]
                                                                                                                                                                                                                                                                                                                HiddenRegs=
                                                                                                                                                                                                                                                                                                                NumVirtualRegs=0
                                                                                                                                                                                                                                                                                                                [Watch]
                                                                                                                                                                                                                                                                                                                Watches=
                                                                                                                                                                                                                                                                                                                [Report]
                                                                                                                                                                                                                                                                                                                DefWindowPos=0,1,-1,-1,-1,-1,0,0,500,195
                                                                                                                                                                                                                                                                                                                [Source]
                                                                                                                                                                                                                                                                                                                DefWindowPos=0,1,-1,-1,-4,-23,22,22,522,217
                                                                                                                                                                                                                                                                                                                [Desktop]
                                                                                                                                                                                                                                                                                                                Maximized=1
                                                                                                                                                                                                                                                                                                                Pos0=0,1,-1,-1,-4,-23,22,22,522,217
                                                                                                                                                                                                                                                                                                                Pos1=0,1,-1,-1,-1,-1,0,0,500,195
                                                                                                                                                                                                                                                                                                                WndList=1,4
                                                                                                                                                                                                                                                                                                                [States]
                                                                                                                                                                                                                                                                                                                RestoreStates=0
                                                                                                                                                                                                                                                                                                                NoOfStates=5
                                                                                                                                                                                                                                                                                                                State0=1@8@8@0@24@1@1@4@21@1@4@0x18@^@^@^@
                                                                                                                                                                                                                                                                                                                State1=1@8@8@0@25@1@1@4@21@1@4@0x19@^@^@^@
                                                                                                                                                                                                                                                                                                                State2=1@8@8@0@27@1@1@4@21@1@4@0x1B@^@^@^@
                                                                                                                                                                                                                                                                                                                State3=9@1@8@0@
                                                                                                                                                                                                                                                                                                                State4=4@1@1@0@

                                                                                                                                                                                                                                                                                                                Что дальше делать???? :ph34r:
                                                                                                                                                                                                                                                                                                                  В свойствах соответствующей версии проекта в категории XLINK, закладка Output, группа Format что указано?
                                                                                                                                                                                                                                                                                                                    Debug info with terminal I/O
                                                                                                                                                                                                                                                                                                                    На нём точка стоит.

                                                                                                                                                                                                                                                                                                                    Добавлено в :
                                                                                                                                                                                                                                                                                                                    Всё зделал
                                                                                                                                                                                                                                                                                                                    Результат:
                                                                                                                                                                                                                                                                                                                    :100000000A28950A950B052808000310930D940DF6
                                                                                                                                                                                                                                                                                                                    :020010000228C4
                                                                                                                                                                                                                                                                                                                    :100014006E28FF308C008D001328FF308D07031CE1
                                                                                                                                                                                                                                                                                                                    :100024008C030C080D04031D0F28FF308C008D0079
                                                                                                                                                                                                                                                                                                                    :100034001F28FF308D07031C8C030C080D04031DBF
                                                                                                                                                                                                                                                                                                                    :100044001B28FF308C008D002B28FF308D07031CEC
                                                                                                                                                                                                                                                                                                                    :100054008C030C080D04031D2728FF308C008D0031
                                                                                                                                                                                                                                                                                                                    :100064003728FF308D07031C8C030C080D04031D77
                                                                                                                                                                                                                                                                                                                    :100074003328080000308A000C08F63E031867286D
                                                                                                                                                                                                                                                                                                                    :100084000D3E020703188A0A82005128512851287C
                                                                                                                                                                                                                                                                                                                    :10009400512851285128512851285C285C28940162
                                                                                                                                                                                                                                                                                                                    :1000A400FE3093000C0895000120130813088312F6
                                                                                                                                                                                                                                                                                                                    :1000B400860567289401FE3093000C08F83E9500ED
                                                                                                                                                                                                                                                                                                                    :1000C400012013081308831285050800FF308312EA
                                                                                                                                                                                                                                                                                                                    :1000D40086000330850408001C30831685008312D3
                                                                                                                                                                                                                                                                                                                    :1000E400850000308316860068200B2083120509E2
                                                                                                                                                                                                                                                                                                                    :1000F4001C398F008F080319772803108F0C031005
                                                                                                                                                                                                                                                                                                                    :100104008F0C0F088E00FF30900003309100E83010
                                                                                                                                                                                                                                                                                                                    :10011400920011081204031976280F080E06031D15
                                                                                                                                                                                                                                                                                                                    :1001240096281008003C900068200E088C003C20A3
                                                                                                                                                                                                                                                                                                                    :1001340010088E07FF300E06031DA22809308E001A
                                                                                                                                                                                                                                                                                                                    :100144000A300E06031DA82800308E000B20FF3055
                                                                                                                                                                                                                                                                                                                    :080154009207031C91038B28A4
                                                                                                                                                                                                                                                                                                                    :00000001FF

                                                                                                                                                                                                                                                                                                                    Добавлено в :
                                                                                                                                                                                                                                                                                                                    Теперь ради интереса
                                                                                                                                                                                                                                                                                                                    хотел попробовать исходник с сообщения #103
                                                                                                                                                                                                                                                                                                                    Визде где switch выдал ошибки, поидее должно работать.
                                                                                                                                                                                                                                                                                                                    В чём дело???
                                                                                                                                                                                                                                                                                                                      Цитата
                                                                                                                                                                                                                                                                                                                      bizar, 22.02.04, 11:10
                                                                                                                                                                                                                                                                                                                      хотел попробовать исходник с сообщения #103
                                                                                                                                                                                                                                                                                                                      Нет, то , что написано там, нормально компилироваться не будет никогда.

                                                                                                                                                                                                                                                                                                                      Добавлено в :
                                                                                                                                                                                                                                                                                                                      Цитата
                                                                                                                                                                                                                                                                                                                      bizar, 22.02.04, 11:10
                                                                                                                                                                                                                                                                                                                      Результат:
                                                                                                                                                                                                                                                                                                                      Ну вот это и есть hex-файл :)
                                                                                                                                                                                                                                                                                                                        В инете не могу нармального, обычного програматора для Pic 16f84 найти.
                                                                                                                                                                                                                                                                                                                        Схем море но они нерабочие 2 программатор собираю и облом.
                                                                                                                                                                                                                                                                                                                        Скиньте схему точно рабочего прогромматора для PIC16F84, для программы ICPROG???
                                                                                                                                                                                                                                                                                                                          http://www.lancos.com/prog.html
                                                                                                                                                                                                                                                                                                                          подойдет, если у тебя PIC16F84A (там и схема и программа), а лучше задай этот вопрос на телесистемах людям, которые пиками занимаются, или на www.microchip.ru
                                                                                                                                                                                                                                                                                                                            Собираю это воидино и должно работать???

                                                                                                                                                                                                                                                                                                                            user posted image
                                                                                                                                                                                                                                                                                                                            user posted image
                                                                                                                                                                                                                                                                                                                              возможно, не знаю, не пробовал:)
                                                                                                                                                                                                                                                                                                                                potor что за выход Select power ext/batt
                                                                                                                                                                                                                                                                                                                                их вместе соединять с обеих картинок?
                                                                                                                                                                                                                                                                                                                                На сайте печатную плату не нашёл, (небеда сделаю) но ты её на том сайте
                                                                                                                                                                                                                                                                                                                                не видел, а то время тратить неохота?
                                                                                                                                                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                                                                                                                                                  bizar, 29.02.04, 07:55
                                                                                                                                                                                                                                                                                                                                  что за выход Select power ext/batt
                                                                                                                                                                                                                                                                                                                                  Это не выход. Это переключатель - внешнее питание( с External power circuit, а тот в свою очередь с внешнего БП ) или батарейное( от BT1 )
                                                                                                                                                                                                                                                                                                                                  Сообщение отредактировано: trainer -
                                                                                                                                                                                                                                                                                                                                    Вроде всё пашет но чёто быстро он моргает.
                                                                                                                                                                                                                                                                                                                                    Теперь нужно разобраться с обменном информации с компом.
                                                                                                                                                                                                                                                                                                                                    Подключаю PIC к COM порту, подрубаю две кнопки.
                                                                                                                                                                                                                                                                                                                                    При нажатии кнопки в моей проге на компе будет выведено какая кнопка была нажата.
                                                                                                                                                                                                                                                                                                                                    Пишим прошиву. Что посоветуете??? potor, trainer вы работали с COM портами???
                                                                                                                                                                                                                                                                                                                                      Цитата

                                                                                                                                                                                                                                                                                                                                      Вроде всё пашет но чёто быстро он моргает.

                                                                                                                                                                                                                                                                                                                                      ну переделай подпрограмму задержки, в чем проблемы?
                                                                                                                                                                                                                                                                                                                                      например так:
                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                        void tick(void)
                                                                                                                                                                                                                                                                                                                                           {
                                                                                                                                                                                                                                                                                                                                           for ( unsigned int i = 0xffff; i!=0; i--)
                                                                                                                                                                                                                                                                                                                                              for ( unsigned char j = 10; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                           }

                                                                                                                                                                                                                                                                                                                                      на будующее вообще в восьмиразрядных контроллерах лучше меньше использовать тип int, как правило получается длинный код, тоесть оптимальнее так:
                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                        void tick(void)
                                                                                                                                                                                                                                                                                                                                           {
                                                                                                                                                                                                                                                                                                                                           for ( unsigned char i = 0xff; i!=0; i--)
                                                                                                                                                                                                                                                                                                                                              for ( unsigned char y = 0xff; y!=0; y--)
                                                                                                                                                                                                                                                                                                                                                 for ( unsigned char j = 10; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                           }



                                                                                                                                                                                                                                                                                                                                      Цитата

                                                                                                                                                                                                                                                                                                                                      Пишим прошиву. Что посоветуете??? potor, trainer вы работали с COM портами???


                                                                                                                                                                                                                                                                                                                                      да, работали, ща посмотрю доку на твой контроллер

                                                                                                                                                                                                                                                                                                                                      Добавлено в :
                                                                                                                                                                                                                                                                                                                                      хе, у PIC16f84 нет встроенного UARTа т е придется тебе программно, по битику передавать
                                                                                                                                                                                                                                                                                                                                      помочь помогу, но писать за тебя не буду:)
                                                                                                                                                                                                                                                                                                                                      теперь скажи какая у тебя тактовая частота
                                                                                                                                                                                                                                                                                                                                        8 Mhz

                                                                                                                                                                                                                                                                                                                                        Что за UART???
                                                                                                                                                                                                                                                                                                                                          ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                            Что за UART???

                                                                                                                                                                                                                                                                                                                                          универсальный асинхронный приемопередатчик, каковым com и является

                                                                                                                                                                                                                                                                                                                                          ща прикину, как это лучше сделать передачу
                                                                                                                                                                                                                                                                                                                                            На какой скорости хочешь общаться с ПК?
                                                                                                                                                                                                                                                                                                                                              в общем так:
                                                                                                                                                                                                                                                                                                                                              1) для начала нам надо реализовать функию задрежки передачи следующего бита
                                                                                                                                                                                                                                                                                                                                              выглядеть она будет примерно так
                                                                                                                                                                                                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                void TransmitBitDelay(void)
                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                for (int i= число1; i!=0; i--)
                                                                                                                                                                                                                                                                                                                                                  for (int j= число2; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                }

                                                                                                                                                                                                                                                                                                                                              как подобрать числа расскажу дальше
                                                                                                                                                                                                                                                                                                                                              2)организуем передачу (предполагаем ,что передатчик подключен к RA0, 8 бит данных, проверки четности нет, 1 стоповый бит, на выходе RA0 стоит max232)
                                                                                                                                                                                                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                void TransmitByte(char Symbol)
                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                 PORTA &= 0xfe; //передаем стартовый бит
                                                                                                                                                                                                                                                                                                                                                 count = 8;// счетчик передаваемых бит данных
                                                                                                                                                                                                                                                                                                                                                 do
                                                                                                                                                                                                                                                                                                                                                   {
                                                                                                                                                                                                                                                                                                                                                    TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                    PORTA ^= (~Symbol) & 1; // выдаем очередной бит в COM
                                                                                                                                                                                                                                                                                                                                                    Symbol >>= 1; //следующий бит
                                                                                                                                                                                                                                                                                                                                                    count--;
                                                                                                                                                                                                                                                                                                                                                   } while (count >0);
                                                                                                                                                                                                                                                                                                                                                 TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                 PORTA |= 1; //передаем стоповый бит
                                                                                                                                                                                                                                                                                                                                                }


                                                                                                                                                                                                                                                                                                                                              теперь как посчитать числа:
                                                                                                                                                                                                                                                                                                                                              компилиш программу, заходишь в отладчик и смотришь ассемблерный код функции TransmitBitDelay зная что обычная команда у тебя выполняется с частотой 2MHz команда перехода 1MHz подбираещь числа таким образом, чтобы вышеуказанная ф-я выполнялась с частотой равной частоте передачи
                                                                                                                                                                                                                                                                                                                                                Цитата trainer @ 12.03.04, 17:26
                                                                                                                                                                                                                                                                                                                                                На какой скорости хочешь общаться с ПК?

                                                                                                                                                                                                                                                                                                                                                А с какой лучше?
                                                                                                                                                                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                                                                                                                                                                  bizar, 12.03.04, 20:28
                                                                                                                                                                                                                                                                                                                                                  А с какой лучше?
                                                                                                                                                                                                                                                                                                                                                  Это зависит от задачи. С одной стороны, чем выше скорость - тем быстрее обмен. С другой стороны, чем выше скорость, тем больше ресурсов отъедает эмуляция последовательного порта. Обычно выбирают от 300 до 9600 бит/сек. Можно просто прикинуть необходимую скорость исходя из пропускной способности, времени реакции и реализуемого протокола.
                                                                                                                                                                                                                                                                                                                                                  Сообщение отредактировано: trainer -
                                                                                                                                                                                                                                                                                                                                                    /*Вод что у меня преблезительно получилось*/
                                                                                                                                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                      #include <io16f84.h>
                                                                                                                                                                                                                                                                                                                                                      /* подпрограмма временной задержки */
                                                                                                                                                                                                                                                                                                                                                      void tick(void) {
                                                                                                                                                                                                                                                                                                                                                         unsigned int p;
                                                                                                                                                                                                                                                                                                                                                         for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                         for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                         for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                         for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                      void TransmitBitDelay(void)
                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                      for (int i= число1; i!=0; i--)
                                                                                                                                                                                                                                                                                                                                                        for (int j= число2; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                      void TransmitByte(char Symbol)
                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                       PORTA &= 0xfe; //передаем стартовый бит
                                                                                                                                                                                                                                                                                                                                                       count = 8;// счетчик передаваемых бит данных
                                                                                                                                                                                                                                                                                                                                                       do
                                                                                                                                                                                                                                                                                                                                                         {
                                                                                                                                                                                                                                                                                                                                                          TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                          PORTA ^= (~Symbol) & 1; // выдаем очередной бит в COM
                                                                                                                                                                                                                                                                                                                                                          Symbol >>= 1; //следующий бит
                                                                                                                                                                                                                                                                                                                                                          count--;
                                                                                                                                                                                                                                                                                                                                                         } while (count >0);
                                                                                                                                                                                                                                                                                                                                                       TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                       PORTA |= 1; //передаем стоповый бит
                                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                      main ()
                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                          TRISB = 4|8;  /* RB2 - RB3 настраиваем на вход */
                                                                                                                                                                                                                                                                                                                                                          PORTB = 0xfc; /* RB0 - RB1 настраиваем на вывод*/
                                                                                                                                                                                                                                                                                                                                                          while(1)
                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                           do
                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                               tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */
                                                                                                                                                                                                                                                                                                                                                               Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */
                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                          Keys >>= 1;
                                                                                                                                                                                                                                                                                                                                                          while(PORTB & Bit(0)); /* если установлен бит 0, значит нажата кнопка на RB2 */
                                                                                                                                                                                                                                                                                                                                                          while(1)
                                                                                                                                                                                                                                                                                                                                                              {
                                                                                                                                                                                                                                                                                                                                                              void TransmitByte(34) /* посылаем 34 */
                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                          while(PORTB & Bit(1)); /* если установлен бит 1, значит нажата кнопка на RB3 */
                                                                                                                                                                                                                                                                                                                                                          while(1)
                                                                                                                                                                                                                                                                                                                                                              {
                                                                                                                                                                                                                                                                                                                                                              void TransmitByte(35) /* посылаем 35 */
                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                      Цитата
                                                                                                                                                                                                                                                                                                                                                      bizar, 14.03.04, 11:19
                                                                                                                                                                                                                                                                                                                                                      do
                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                      TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                      PORTA ^= (~Symbol) & 1; // выдаем очередной бит в COM
                                                                                                                                                                                                                                                                                                                                                      Symbol >>= 1; //следующий бит
                                                                                                                                                                                                                                                                                                                                                      count--;
                                                                                                                                                                                                                                                                                                                                                      } while (count >0);
                                                                                                                                                                                                                                                                                                                                                      Лучше бы наверное так:
                                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                         do
                                                                                                                                                                                                                                                                                                                                                           {
                                                                                                                                                                                                                                                                                                                                                            TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                            PORTA = (PORTA&0xfe)|(Symbol&1); // выдаем очередной бит в COM
                                                                                                                                                                                                                                                                                                                                                            Symbol >>= 1; //следующий бит
                                                                                                                                                                                                                                                                                                                                                            count--;
                                                                                                                                                                                                                                                                                                                                                           } while (count >0);


                                                                                                                                                                                                                                                                                                                                                      В main напортачил:
                                                                                                                                                                                                                                                                                                                                                      Цитата
                                                                                                                                                                                                                                                                                                                                                      bizar, 14.03.04, 11:19
                                                                                                                                                                                                                                                                                                                                                      while(1)
                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                      void TransmitByte(34) /* посылаем 34 */
                                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                                      Здесь цикл явно лишний: while(1) - это бесконечный цикл

                                                                                                                                                                                                                                                                                                                                                      Цитата
                                                                                                                                                                                                                                                                                                                                                      bizar, 14.03.04, 11:19
                                                                                                                                                                                                                                                                                                                                                      while(1)
                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                      void TransmitByte(35) /* посылаем 35 */
                                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                                      Здесь то же самое.
                                                                                                                                                                                                                                                                                                                                                      Ну и еще там несколько ошибок и лишних действий. :)
                                                                                                                                                                                                                                                                                                                                                      Я не знаю, что ты задумал, но main можно написать так:
                                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                        main () {
                                                                                                                                                                                                                                                                                                                                                           TRISB = 4|8;  /* RB2 - RB3 настраиваем на вход */
                                                                                                                                                                                                                                                                                                                                                           PORTB = 0xfc; /* RB0 - RB1 настраиваем на вывод*/
                                                                                                                                                                                                                                                                                                                                                           while(1) {
                                                                                                                                                                                                                                                                                                                                                              do {
                                                                                                                                                                                                                                                                                                                                                                 tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */
                                                                                                                                                                                                                                                                                                                                                                 Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */
                                                                                                                                                                                                                                                                                                                                                              } while( Keys == 0 );
                                                                                                                                                                                                                                                                                                                                                              if(Keys & Bit(2))   /* если установлен бит 0, значит нажата кнопка на RB2 */
                                                                                                                                                                                                                                                                                                                                                                 TransmitByte(34); /* посылаем 34 */
                                                                                                                                                                                                                                                                                                                                                              if(Keys & Bit(3))   /* если установлен бит 1, значит нажата кнопка на RB3 */
                                                                                                                                                                                                                                                                                                                                                                 TransmitByte(35); /* посылаем 35 */
                                                                                                                                                                                                                                                                                                                                                           }
                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                        Цитата
                                                                                                                                                                                                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                          Я не знаю, что ты задумал,

                                                                                                                                                                                                                                                                                                                                                        Создаём две кнопки при нажатии которых pic будет посылать
                                                                                                                                                                                                                                                                                                                                                        код соответствующей кнопки.
                                                                                                                                                                                                                                                                                                                                                        Теперь по поводу числа potor чёт я несовсем понял?????
                                                                                                                                                                                                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                          #include <io16f84.h>
                                                                                                                                                                                                                                                                                                                                                          /* подпрограмма временной задержки */
                                                                                                                                                                                                                                                                                                                                                          void tick(void) {
                                                                                                                                                                                                                                                                                                                                                             unsigned int p;
                                                                                                                                                                                                                                                                                                                                                             for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                             for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                             for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                             for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                          void TransmitBitDelay(void)
                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                          for (int i= число1; i!=0; i--)
                                                                                                                                                                                                                                                                                                                                                            for (int j= число2; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                          void TransmitByte(char Symbol)
                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                           PORTA &= 0xfe; //передаем стартовый бит
                                                                                                                                                                                                                                                                                                                                                           count = 8;// счетчик передаваемых бит данных
                                                                                                                                                                                                                                                                                                                                                           do
                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                              TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                              PORTA ^= (~Symbol) & 1; // выдаем очередной бит в COM
                                                                                                                                                                                                                                                                                                                                                              Symbol >>= 1; //следующий бит
                                                                                                                                                                                                                                                                                                                                                              count--;
                                                                                                                                                                                                                                                                                                                                                             } while (count >0);
                                                                                                                                                                                                                                                                                                                                                           TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                           PORTA |= 1; //передаем стоповый бит
                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                          main () {
                                                                                                                                                                                                                                                                                                                                                             TRISB = 4|8;  /* RB2 - RB3 настраиваем на вход */
                                                                                                                                                                                                                                                                                                                                                             PORTB = 0xfc; /* RB0 - RB1 настраиваем на вывод*/
                                                                                                                                                                                                                                                                                                                                                             while(1) {
                                                                                                                                                                                                                                                                                                                                                                do {
                                                                                                                                                                                                                                                                                                                                                                   tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */
                                                                                                                                                                                                                                                                                                                                                                   Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */
                                                                                                                                                                                                                                                                                                                                                                } while( Keys == 0 );
                                                                                                                                                                                                                                                                                                                                                                if(Keys & Bit(2))   /* если установлен бит 0, значит нажата кнопка на RB2 */
                                                                                                                                                                                                                                                                                                                                                                   TransmitByte(34); /* посылаем 34 */
                                                                                                                                                                                                                                                                                                                                                                if(Keys & Bit(3))   /* если установлен бит 1, значит нажата кнопка на RB3 */
                                                                                                                                                                                                                                                                                                                                                                   TransmitByte(35); /* посылаем 35 */
                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                          PORTA забыл проинициализировать
                                                                                                                                                                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                              PORTA &= 0xfe; //передаем стартовый бит


                                                                                                                                                                                                                                                                                                                                                            Народ а помоему это PORTB ??????

                                                                                                                                                                                                                                                                                                                                                            potor, дык про числа обьестни по понятней..
                                                                                                                                                                                                                                                                                                                                                              Цитата

                                                                                                                                                                                                                                                                                                                                                              Народ а помоему это PORTB ??????

                                                                                                                                                                                                                                                                                                                                                              не понял?????
                                                                                                                                                                                                                                                                                                                                                              Цитата

                                                                                                                                                                                                                                                                                                                                                              дык про числа обьестни по понятней..

                                                                                                                                                                                                                                                                                                                                                              откомпили, зайди в отладчик и выложи сюда ассемблерный код ф-и TransmitBitDelay
                                                                                                                                                                                                                                                                                                                                                                ессно перед тем как компилить подставь вместо чисел например 10
                                                                                                                                                                                                                                                                                                                                                                  ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                    #include<io16f84.h>
                                                                                                                                                                                                                                                                                                                                                                    void TransmitBitDelay(void)
                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                    int i,j;
                                                                                                                                                                                                                                                                                                                                                                    for (i=10; i!=0; i--)
                                                                                                                                                                                                                                                                                                                                                                    for (j=10; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                                    }

                                                                                                                                                                                                                                                                                                                                                                  Выдаёт ошибку
                                                                                                                                                                                                                                                                                                                                                                  ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                    Rebuilding target Debug...
                                                                                                                                                                                                                                                                                                                                                                    Untitled4.c
                                                                                                                                                                                                                                                                                                                                                                    Linking...
                                                                                                                                                                                                                                                                                                                                                                    Error[e46]: Undefined external "main" referred in __MAIN_CALL__ ( C:\PROGRAM FILES\IAR SYSTEMS\EW23\PICmicro\LIB\cl16f84.r39 )
                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                    Total number of errors: 1
                                                                                                                                                                                                                                                                                                                                                                    Total number of warnings: 0


                                                                                                                                                                                                                                                                                                                                                                  Что делать???
                                                                                                                                                                                                                                                                                                                                                                    скомпили весь проект, так оно у тебя компилится не будет:), укажи компилятору чтобы он создал файл .lst с ассемблерным кодом, и выложи его здесь? либо зайди в дебаггер, укажи чтобы он показал тебе ВЕСЬ ассемблерный код, он показывает так :

                                                                                                                                                                                                                                                                                                                                                                    строка С
                                                                                                                                                                                                                                                                                                                                                                    асм
                                                                                                                                                                                                                                                                                                                                                                    асм
                                                                                                                                                                                                                                                                                                                                                                    асм
                                                                                                                                                                                                                                                                                                                                                                    асм
                                                                                                                                                                                                                                                                                                                                                                    строка С
                                                                                                                                                                                                                                                                                                                                                                    ...

                                                                                                                                                                                                                                                                                                                                                                    найди код ф-и TransmitBitDelay и выложи его сюда

                                                                                                                                                                                                                                                                                                                                                                    Добавлено в :
                                                                                                                                                                                                                                                                                                                                                                    т.е. понял меня? линкер тебе говорит, что обьявлена функция main, но нигде не описана, эта ф-я должна присутствовать обязательно, т к это точка входа в программу
                                                                                                                                                                                                                                                                                                                                                                      Цитата
                                                                                                                                                                                                                                                                                                                                                                      bizar, 25.03.04, 13:19
                                                                                                                                                                                                                                                                                                                                                                      Выдаёт ошибку
                                                                                                                                                                                                                                                                                                                                                                      В проекте нет файла, содержащего функцию main.
                                                                                                                                                                                                                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                          #include <io16f84.h>
                                                                                                                                                                                                                                                                                                                                                                          /* подпрограмма временной задержки */
                                                                                                                                                                                                                                                                                                                                                                          void tick(void) {
                                                                                                                                                                                                                                                                                                                                                                             unsigned int p;
                                                                                                                                                                                                                                                                                                                                                                             for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                                             for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                                             for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                                             for ( p = 0xffff; p!=0; p--);
                                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                                          void TransmitBitDelay(void)
                                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                                          for (int i= 10; i!=0; i--)
                                                                                                                                                                                                                                                                                                                                                                            for (int j= 10; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                                          void TransmitByte(char Symbol)
                                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                                           PORTA &= 0xfe; //передаем стартовый бит
                                                                                                                                                                                                                                                                                                                                                                           count = 8;// счетчик передаваемых бит данных
                                                                                                                                                                                                                                                                                                                                                                           do
                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                              TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                                              PORTA ^= (~Symbol) & 1; // выдаем очередной бит в COM
                                                                                                                                                                                                                                                                                                                                                                              Symbol >>= 1; //следующий бит
                                                                                                                                                                                                                                                                                                                                                                              count--;
                                                                                                                                                                                                                                                                                                                                                                             } while (count >0);
                                                                                                                                                                                                                                                                                                                                                                           TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                                           PORTA |= 1; //передаем стоповый бит
                                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                                          main ()
                                                                                                                                                                                                                                                                                                                                                                                 {
                                                                                                                                                                                                                                                                                                                                                                           TRISB = 4|8;  /* RB2 - RB3 настраиваем на вход */
                                                                                                                                                                                                                                                                                                                                                                           PORTB = 0xfc; /* RB0 - RB1 настраиваем на вывод*/
                                                                                                                                                                                                                                                                                                                                                                           while(1)
                                                                                                                                                                                                                                                                                                                                                                           {
                                                                                                                                                                                                                                                                                                                                                                            do
                                                                                                                                                                                                                                                                                                                                                                           {
                                                                                                                                                                                                                                                                                                                                                                                   tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */
                                                                                                                                                                                                                                                                                                                                                                                   Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */
                                                                                                                                                                                                                                                                                                                                                                           }
                                                                                                                                                                                                                                                                                                                                                                           Keys >>= 1;
                                                                                                                                                                                                                                                                                                                                                                           while(PORTB & Bit(0)); /* если установлен бит 0, значит нажата кнопка на RB2 */
                                                                                                                                                                                                                                                                                                                                                                           while(1)
                                                                                                                                                                                                                                                                                                                                                                            {
                                                                                                                                                                                                                                                                                                                                                                            void TransmitByte(34) /* посылаем 34 */
                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                           while(PORTB & Bit(1)); /* если установлен бит 1, значит нажата кнопка на RB3 */
                                                                                                                                                                                                                                                                                                                                                                           while(1)
                                                                                                                                                                                                                                                                                                                                                                            {
                                                                                                                                                                                                                                                                                                                                                                            void TransmitByte(35) /* посылаем 35 */
                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                           }
                                                                                                                                                                                                                                                                                                                                                                           }

                                                                                                                                                                                                                                                                                                                                                                        Выдаёт ошибку
                                                                                                                                                                                                                                                                                                                                                                        [/CODE]Rebuilding target Debug...
                                                                                                                                                                                                                                                                                                                                                                        Untitled1.c
                                                                                                                                                                                                                                                                                                                                                                        Fatal Error[Cp001]: Copy protection check, Your time limited license is out of date - You must
                                                                                                                                                                                                                                                                                                                                                                        register NOW to get the permanent key in order to continue using
                                                                                                                                                                                                                                                                                                                                                                        this product!

                                                                                                                                                                                                                                                                                                                                                                        Total number of errors: 1
                                                                                                                                                                                                                                                                                                                                                                        Total number of warnings: 0[CODE]
                                                                                                                                                                                                                                                                                                                                                                          ты крякнул IAR? он говорит, что у тебя лицензия закончилась
                                                                                                                                                                                                                                                                                                                                                                            Увсё сделал
                                                                                                                                                                                                                                                                                                                                                                            Ошибки
                                                                                                                                                                                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                              count = 8;// счетчик передаваемых бит данных

                                                                                                                                                                                                                                                                                                                                                                            и
                                                                                                                                                                                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                              Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */
                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                               Keys >>= 1;
                                                                                                                                                                                                                                                                                                                                                                               while(PORTB & Bit(0)); /* если установлен бит 0, значит нажата кнопка на RB2 */
                                                                                                                                                                                                                                                                                                                                                                               while(1)
                                                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                                                void TransmitByte(34) /* посылаем 34 */
                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                               while(PORTB & Bit(1)); /* если установлен бит 1, значит нажата кнопка на RB3 */
                                                                                                                                                                                                                                                                                                                                                                               while(1)
                                                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                                                void TransmitByte(35) /* посылаем 35 */
                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                               }


                                                                                                                                                                                                                                                                                                                                                                            Добавлено в :
                                                                                                                                                                                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                              count = 8;// счетчик передаваемых бит данных

                                                                                                                                                                                                                                                                                                                                                                            Надо сделать int правельно я думаю???
                                                                                                                                                                                                                                                                                                                                                                              Цитата

                                                                                                                                                                                                                                                                                                                                                                              unsigned char count=8;

                                                                                                                                                                                                                                                                                                                                                                              Цитата

                                                                                                                                                                                                                                                                                                                                                                              unsigned char Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */

                                                                                                                                                                                                                                                                                                                                                                              определять такие ошибки пора бы уже и саму научиться:)
                                                                                                                                                                                                                                                                                                                                                                                potor, в тех местах так ошибки и остались
                                                                                                                                                                                                                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                  Rebuilding target Debug...
                                                                                                                                                                                                                                                                                                                                                                                  Untitled1.c
                                                                                                                                                                                                                                                                                                                                                                                  C:\Documents and Settings\Administrator\My Documents\IAR проект\Новая папка\Untitled1.c (21) : Error[Pe268]: declaration may not appear after executable statement in block
                                                                                                                                                                                                                                                                                                                                                                                  C:\Documents and Settings\Administrator\My Documents\IAR проект\Новая папка\Untitled1.c (43) : Error[Pe268]: declaration may not appear after executable statement in block
                                                                                                                                                                                                                                                                                                                                                                                  C:\Documents and Settings\Administrator\My Documents\IAR проект\Новая папка\Untitled1.c (45) : Error[Pe112]: expected "while"
                                                                                                                                                                                                                                                                                                                                                                                  C:\Documents and Settings\Administrator\My Documents\IAR проект\Новая папка\Untitled1.c (46) : Warning[Pe223]: function declared implicitly
                                                                                                                                                                                                                                                                                                                                                                                  C:\Documents and Settings\Administrator\My Documents\IAR проект\Новая папка\Untitled1.c (49) : Error[Pe079]: expected a type specifier
                                                                                                                                                                                                                                                                                                                                                                                  C:\Documents and Settings\Administrator\My Documents\IAR проект\Новая папка\Untitled1.c (50) : Error[Pe065]: expected a ";"
                                                                                                                                                                                                                                                                                                                                                                                  C:\Documents and Settings\Administrator\My Documents\IAR проект\Новая папка\Untitled1.c (51) : Warning[Pe128]: loop is not reachable from preceding code
                                                                                                                                                                                                                                                                                                                                                                                  C:\Documents and Settings\Administrator\My Documents\IAR проект\Новая папка\Untitled1.c (54) : Error[Pe079]: expected a type specifier
                                                                                                                                                                                                                                                                                                                                                                                  C:\Documents and Settings\Administrator\My Documents\IAR проект\Новая папка\Untitled1.c (55) : Error[Pe065]: expected a ";"
                                                                                                                                                                                                                                                                                                                                                                                  C:\Documents and Settings\Administrator\My Documents\IAR проект\Новая папка\Untitled1.c (57) : Warning[Pe001]: last line of file ends without a newline
                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                  Total number of errors: 7
                                                                                                                                                                                                                                                                                                                                                                                  Total number of warnings: 3
                                                                                                                                                                                                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                                                                                                                                                                                                  bizar, 26.03.04, 11:38
                                                                                                                                                                                                                                                                                                                                                                                  do
                                                                                                                                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                                                                                                                                  tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */
                                                                                                                                                                                                                                                                                                                                                                                  Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */
                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                  Keys >>= 1;
                                                                                                                                                                                                                                                                                                                                                                                  while(PORTB & Bit(0)); /* если установлен бит 0, значит нажата кнопка на RB2 */
                                                                                                                                                                                                                                                                                                                                                                                  Для do нет соответствующего while. Или Keys >>= 1; стоит не там, где нужно
                                                                                                                                                                                                                                                                                                                                                                                    ПОПРОБУЙ ТАК:
                                                                                                                                                                                                                                                                                                                                                                                    Цитата

                                                                                                                                                                                                                                                                                                                                                                                    void TransmitByte(char Symbol)
                                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                                    unsigned int count = 8;// счетчик передаваемых бит данных
                                                                                                                                                                                                                                                                                                                                                                                    PORTA &= 0xfe; //передаем стартовый бит
                                                                                                                                                                                                                                                                                                                                                                                    do
                                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                                    TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                                                    PORTA ^= (~Symbol) & 1; // выдаем очередной бит в COM
                                                                                                                                                                                                                                                                                                                                                                                    Symbol >>= 1; //следующий бит
                                                                                                                                                                                                                                                                                                                                                                                    count--;
                                                                                                                                                                                                                                                                                                                                                                                    } while (count >0);
                                                                                                                                                                                                                                                                                                                                                                                    TransmitBitDelay(); // задержка перед передачей следующего бита
                                                                                                                                                                                                                                                                                                                                                                                    PORTA |= 1; //передаем стоповый бит
                                                                                                                                                                                                                                                                                                                                                                                    }

                                                                                                                                                                                                                                                                                                                                                                                    Цитата

                                                                                                                                                                                                                                                                                                                                                                                    unsignet char Keys;
                                                                                                                                                                                                                                                                                                                                                                                    main ()
                                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                                    TRISB = 4|8; /* RB2 - RB3 настраиваем на вход */
                                                                                                                                                                                                                                                                                                                                                                                    PORTB = 0xfc; /* RB0 - RB1 настраиваем на вывод*/
                                                                                                                                                                                                                                                                                                                                                                                    while(1)
                                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                                    do
                                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                                    tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */
                                                                                                                                                                                                                                                                                                                                                                                    Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */
                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                    Keys >>= 1;
                                                                                                                                                                                                                                                                                                                                                                                    while(PORTB & Bit(0)); /* если установлен бит 0, значит нажата кнопка на RB2 */
                                                                                                                                                                                                                                                                                                                                                                                    while(1)
                                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                                    void TransmitByte(34) /* посылаем 34 */
                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                    while(PORTB & Bit(1)); /* если установлен бит 1, значит нажата кнопка на RB3 */
                                                                                                                                                                                                                                                                                                                                                                                    while(1)
                                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                                    void TransmitByte(35) /* посылаем 35 */
                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                      Думаю нужно начать всё сначало?
                                                                                                                                                                                                                                                                                                                                                                                      Прикреплённый файлПрикреплённый файл__________.rar (26.83 Кбайт, скачиваний: 417)
                                                                                                                                                                                                                                                                                                                                                                                        в общем в моем IARe для AVR надо в режиме дебаггера сделать View/Disassembly, либо в Project/Options в закладке компилятора list ставишь галочку Assembler mnemonics, т е ты выслал не то, нужен ассемблерный код
                                                                                                                                                                                                                                                                                                                                                                                          potor, я этим покозал что ошибок море,
                                                                                                                                                                                                                                                                                                                                                                                          и не знаю как их исправить (уже всё перепробовал).
                                                                                                                                                                                                                                                                                                                                                                                            бл...
                                                                                                                                                                                                                                                                                                                                                                                            unsigned char Keys
                                                                                                                                                                                                                                                                                                                                                                                            :)

                                                                                                                                                                                                                                                                                                                                                                                            Добавлено в :
                                                                                                                                                                                                                                                                                                                                                                                            точку с запятой незабудь поставить:)
                                                                                                                                                                                                                                                                                                                                                                                              на будующее, в микроконтроллерных компиляторах, ввиду их недоделанности, следует обращать внимание на первую ошибку, остальные генерятся как правило от балды:)
                                                                                                                                                                                                                                                                                                                                                                                                Ещё остались ошибки.
                                                                                                                                                                                                                                                                                                                                                                                                Прикреплённый файлПрикреплённый файл__________.rar (21.64 Кбайт, скачиваний: 428)
                                                                                                                                                                                                                                                                                                                                                                                                  ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                    main () {
                                                                                                                                                                                                                                                                                                                                                                                                       TRISB = 4|8;  /* RB2 - RB3 настраиваем на вход */
                                                                                                                                                                                                                                                                                                                                                                                                       PORTB = 0xfc; /* RB0 - RB1 настраиваем на вывод*/
                                                                                                                                                                                                                                                                                                                                                                                                       while(1) {
                                                                                                                                                                                                                                                                                                                                                                                                          do {
                                                                                                                                                                                                                                                                                                                                                                                                             tick(); /* НЕБОЛЬШОЙ ПРОМЕЖУТОК ВРЕМЕНИ, "не будем опрашивать кнопки слишком часто" */
                                                                                                                                                                                                                                                                                                                                                                                                             Keys = (~PORTB) & (4|8); /* состояние кнопок на RB2-RB3. Ждёт нажатия */
                                                                                                                                                                                                                                                                                                                                                                                                          } while( Keys == 0 );
                                                                                                                                                                                                                                                                                                                                                                                                          if(Keys & Bit(2))   /* если установлен бит 0, значит нажата кнопка на RB2 */
                                                                                                                                                                                                                                                                                                                                                                                                             TransmitByte(34); /* посылаем 34 */
                                                                                                                                                                                                                                                                                                                                                                                                          if(Keys & Bit(3))   /* если установлен бит 1, значит нажата кнопка на RB3 */
                                                                                                                                                                                                                                                                                                                                                                                                             TransmitByte(35); /* посылаем 35 */
                                                                                                                                                                                                                                                                                                                                                                                                       }
                                                                                                                                                                                                                                                                                                                                                                                                    }

                                                                                                                                                                                                                                                                                                                                                                                                  этот код тебе писал ранее trainer:)
                                                                                                                                                                                                                                                                                                                                                                                                    В нём ошибка:
                                                                                                                                                                                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                      if(Keys & Bit(2))

                                                                                                                                                                                                                                                                                                                                                                                                    Сдесь выдаёт ошибку.
                                                                                                                                                                                                                                                                                                                                                                                                      после #include <io16f84.h>
                                                                                                                                                                                                                                                                                                                                                                                                      вставь строчку
                                                                                                                                                                                                                                                                                                                                                                                                      #define Bit(x) 1<<(x)
                                                                                                                                                                                                                                                                                                                                                                                                      дело в том что команды Bit нет, это макрос который мы определяем сами
                                                                                                                                                                                                                                                                                                                                                                                                        Ok всё скомпелил без ошибок
                                                                                                                                                                                                                                                                                                                                                                                                        теперь зашить и проверить.
                                                                                                                                                                                                                                                                                                                                                                                                          неееет, зашить и проверить неполучится, сначала надо подобрать числа, т е десятки там не пройдут:)
                                                                                                                                                                                                                                                                                                                                                                                                            повторюсь:
                                                                                                                                                                                                                                                                                                                                                                                                            вышли сюда ассемблерный код функции TransmitBitDelay, я тебе обьясню как вычислить эти числа
                                                                                                                                                                                                                                                                                                                                                                                                              Я всё довно понял, времени просто не было
                                                                                                                                                                                                                                                                                                                                                                                                              Прикреплённый файлПрикреплённый файлwood.rar (1.71 Кбайт, скачиваний: 416)
                                                                                                                                                                                                                                                                                                                                                                                                                слуай, ты случайно в следующем коде точку с запятой после первого for не ставил???
                                                                                                                                                                                                                                                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                  void TransmitBitDelay(void)
                                                                                                                                                                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                                                                                                                                                                  for (int i= число1; i!=0; i--) // здесь точка с запятой ненужна
                                                                                                                                                                                                                                                                                                                                                                                                                    for (int j= число2; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                                                                                  }

                                                                                                                                                                                                                                                                                                                                                                                                                если не ставил, значит оптимизатор что то намудрил, уменьши уровень оптимизации и вышли еще раз:)

                                                                                                                                                                                                                                                                                                                                                                                                                Добавлено в :
                                                                                                                                                                                                                                                                                                                                                                                                                или попробуй вот так записать:
                                                                                                                                                                                                                                                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                  void TransmitBitDelay(void)
                                                                                                                                                                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                                                                                                                                                                  for (int i= число1; i!=0; i--)
                                                                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                                                                    for (int j= число2; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                                  Млин откуда там точка с запятой взялась не понимаю
                                                                                                                                                                                                                                                                                                                                                                                                                  вроде всё правельно наберал.
                                                                                                                                                                                                                                                                                                                                                                                                                  Ну ладно вот без неё.
                                                                                                                                                                                                                                                                                                                                                                                                                  Прикреплённый файлПрикреплённый файлwoodd.rar (2.46 Кбайт, скачиваний: 391)
                                                                                                                                                                                                                                                                                                                                                                                                                    ok завтра на работе посмотрю:)
                                                                                                                                                                                                                                                                                                                                                                                                                      вот это больше на правду похоже, но извини, я опять намудрил:)
                                                                                                                                                                                                                                                                                                                                                                                                                      переделай функцию вот так, а то компилятор много избыточного кода вставляет:
                                                                                                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                        void TransmitBitDelay(void)
                                                                                                                                                                                                                                                                                                                                                                                                                        {
                                                                                                                                                                                                                                                                                                                                                                                                                        for (unsigned char i= число1; i!=0; i--) // здесь точка с запятой ненужна
                                                                                                                                                                                                                                                                                                                                                                                                                          for (unsigned char j= число2; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                                                                                        }


                                                                                                                                                                                                                                                                                                                                                                                                                      Добавлено в :
                                                                                                                                                                                                                                                                                                                                                                                                                      ссори вот так:
                                                                                                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                        void TransmitBitDelay(void)
                                                                                                                                                                                                                                                                                                                                                                                                                        {
                                                                                                                                                                                                                                                                                                                                                                                                                        unsigned char i,j
                                                                                                                                                                                                                                                                                                                                                                                                                        for (i= число1; i!=0; i--) // здесь точка с запятой ненужна
                                                                                                                                                                                                                                                                                                                                                                                                                          for (j= число2; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                                                                        Кстати я там поменял:
                                                                                                                                                                                                                                                                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                          void TransmitBitDelay(void)
                                                                                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                                                                                          int i,j
                                                                                                                                                                                                                                                                                                                                                                                                                          for (i= число1; i!=0; i--)
                                                                                                                                                                                                                                                                                                                                                                                                                            for (j= число2; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                                                                                          }

                                                                                                                                                                                                                                                                                                                                                                                                                        А зачем unsigned char?
                                                                                                                                                                                                                                                                                                                                                                                                                          int занимает 2 байта, char 1 байт, контроллер восьмиразрядный, т е вся арифметика побайтовая, и если использовать тип int получается больше по коду, в твоем случае рационально использовать unsignrd char

                                                                                                                                                                                                                                                                                                                                                                                                                          Добавлено в :
                                                                                                                                                                                                                                                                                                                                                                                                                          я тебе уже раньше писал, что int надо использовать по возможности реже
                                                                                                                                                                                                                                                                                                                                                                                                                            Ну вот всё готово.
                                                                                                                                                                                                                                                                                                                                                                                                                            Что там на счёт чисел?
                                                                                                                                                                                                                                                                                                                                                                                                                            Прикреплённый файлПрикреплённый файлchar.rar (2.39 Кбайт, скачиваний: 415)
                                                                                                                                                                                                                                                                                                                                                                                                                              сейчас, разбирусь с тем, что он накомпилил, и расскажу:)
                                                                                                                                                                                                                                                                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;------------------------------------------------- этот код выполняется 1 раз-------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                  TransmitBitDelay:           ;сюда попадаем по call2 цикла
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;    12 {
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;    13 unsigned char i,j;
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;    14 for (i= 10; i!=0; i--)
                                                                                                                                                                                                                                                                                                                                                                                                                                          MOVLW   10                            ;W=10                                         1 цикл  
                                                                                                                                                                                                                                                                                                                                                                                                                                          MOVWF   i                             ;i=W (i=10)                                   1 цикл
                                                                                                                                                                                                                                                                                                                                                                                                                                          GOTO    TransmitBitDelay_0            ;                                             2 цикла  
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;----------------------------------------------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 итого 6 циклов
                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;    15   for (j= 10; j!=0; j--);
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;--------------------------------------------этот код выполняется i*j раз----------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;-------------------причем команда BTFSS   _A_STATUS,2  выполняется за два цикла i раз---------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;-----------------------------------------------а за один цикл i*(j-1) раз---------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;-------------------команда GOTO    TransmitBitDelay_1 выполняется i*(j-1) раз-----------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                  TransmitBitDelay_1:
                                                                                                                                                                                                                                                                                                                                                                                                                                          DECF    j,1                           ; вычитаем из j 1                             1 цикл
                                                                                                                                                                                                                                                                                                                                                                                                                                  TransmitBitDelay_2:
                                                                                                                                                                                                                                                                                                                                                                                                                                          MOVF    j,1                           ; (j==0)?                                     1 цикл
                                                                                                                                                                                                                                                                                                                                                                                                                                          BTFSS   _A_STATUS,2                   ; если не равно                               1(2)цикла
                                                                                                                                                                                                                                                                                                                                                                                                                                          GOTO    TransmitBitDelay_1              ; идем вычитать j                             2 цикла
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;-----------------------------------------------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             итого i*(5*j-1) циклов
                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;--------------------------------------------этот код выполняется i раз----------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;-------------------есть тонкость, команда BTFSС i-1 раз выполняется за 2 цикла и 1 раз за 1 цикл--------------
                                                                                                                                                                                                                                                                                                                                                                                                                                  ; ------------------а команда  GOTO    TransmitBitDelay_4   выполнится всего один раз-------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                          DECF    i,1                                      ; а если равно вычитаем из i  1    1 цикл
                                                                                                                                                                                                                                                                                                                                                                                                                                  TransmitBitDelay_0:
                                                                                                                                                                                                                                                                                                                                                                                                                                          MOVF    i,1                                      ;(i==0)?                           1 цикл
                                                                                                                                                                                                                                                                                                                                                                                                                                          BTFSC   _A_STATUS,2                              ;если равно  заканчиваем ф-ю       1(2)цикла
                                                                                                                                                                                                                                                                                                                                                                                                                                          GOTO    TransmitBitDelay_4                       ;на завершение ф-и                 2 цикла
                                                                                                                                                                                                                                                                                                                                                                                                                                          MOVLW   10                                       ;если не равно W=10                1 цикл  
                                                                                                                                                                                                                                                                                                                                                                                                                                          MOVWF   j                                        ;j=W (j=10)                        1 цикл
                                                                                                                                                                                                                                                                                                                                                                                                                                          GOTO    TransmitBitDelay_2                       ;идем разбираться с j              2 цикла
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;-----------------------------------------------------------------------------------------------------------------                                                                                              итого 8*i+1 циклов
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;    16 }
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;----------------------------------и этот код 1 выполняется 1 раз-----------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                  TransmitBitDelay_4:
                                                                                                                                                                                                                                                                                                                                                                                                                                          RETURN                                           ; возврат в основную прогу         2 цикла
                                                                                                                                                                                                                                                                                                                                                                                                                                  ;------------------------------------------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                           получаем всего циклов i*(5*j + 7)+9 циклов. Один цикл при твоем кварце 2MHz=2000000Hz
                                                                                                                                                                                                                                                                                                                                                                                                                                  допустим нам надо работать со частотой 9600Hz, решаем уравнение
                                                                                                                                                                                                                                                                                                                                                                                                                                  9600=2000000/(i*(5*j+7)+9)
                                                                                                                                                                                                                                                                                                                                                                                                                                  мы видим, что оно имеет множество решений, но нам нужны целые, или максимально приближенные к целым, решается оно методом подбора
                                                                                                                                                                                                                                                                                                                                                                                                                                  P.S.проверь правильность моих вычислений, а то я мог где то ошибитьсяJ
                                                                                                                                                                                                                                                                                                                                                                                                                                  Ok
                                                                                                                                                                                                                                                                                                                                                                                                                                  если использовать 8Mhz = (8000000)
                                                                                                                                                                                                                                                                                                                                                                                                                                  Что лучше использовать 2Mhz или 8Mhz
                                                                                                                                                                                                                                                                                                                                                                                                                                  для передачи таких небольших чисел.
                                                                                                                                                                                                                                                                                                                                                                                                                                  Но чтобы не было ни каких задержек тормажений?
                                                                                                                                                                                                                                                                                                                                                                                                                                    нет, читайте доки, они рулез:)
                                                                                                                                                                                                                                                                                                                                                                                                                                    один такт-8MHz
                                                                                                                                                                                                                                                                                                                                                                                                                                    машинный цикл состоит у твоего пика из четырех тактов, т е 2MHz
                                                                                                                                                                                                                                                                                                                                                                                                                                    т е это я тебе сказал для твоего кварца
                                                                                                                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                        Один цикл при твоем кварце 2MHz=2000000Hz

                                                                                                                                                                                                                                                                                                                                                                                                                                      Мой кварц вобще-то 8Mhz
                                                                                                                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                        т е это я тебе сказал для твоего кварца


                                                                                                                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                        Что лучше использовать 2Mhz или 8Mhz
                                                                                                                                                                                                                                                                                                                                                                                                                                        для передачи таких небольших чисел.
                                                                                                                                                                                                                                                                                                                                                                                                                                        Но чтобы не было ни каких задержек тормажений?
                                                                                                                                                                                                                                                                                                                                                                                                                                        еше раз обьясняю, машинный цикл и тактовая частота разные вещи
                                                                                                                                                                                                                                                                                                                                                                                                                                        считай машинным циклом время выполнения самой быстрой команды
                                                                                                                                                                                                                                                                                                                                                                                                                                        у PIC16 два типа команд, одни выполняются за один машинный цикл, другие за два, есть правда команды, время выполнение которых зависит от результата
                                                                                                                                                                                                                                                                                                                                                                                                                                        у PIC16 один машинный цикл = 4 такта, т е я тебе привел вычисления для кварца 8MHz
                                                                                                                                                                                                                                                                                                                                                                                                                                          Всё теперь осуществляем проект.
                                                                                                                                                                                                                                                                                                                                                                                                                                          Ну нужно ещё прогу написать для приёма с COM порта.
                                                                                                                                                                                                                                                                                                                                                                                                                                          Документацию по настройки COM скачал.
                                                                                                                                                                                                                                                                                                                                                                                                                                          Короче potor, бли я даже не знаю как тебя отблагодорить.
                                                                                                                                                                                                                                                                                                                                                                                                                                          :D :lol: :rolleyes: :wub: B) :yes:
                                                                                                                                                                                                                                                                                                                                                                                                                                          Правда вопросов у меня ещё море но сначало
                                                                                                                                                                                                                                                                                                                                                                                                                                          разберёмся с этим примером.
                                                                                                                                                                                                                                                                                                                                                                                                                                            Цитата

                                                                                                                                                                                                                                                                                                                                                                                                                                            Всё теперь осуществляем проект.
                                                                                                                                                                                                                                                                                                                                                                                                                                            Ну нужно ещё прогу написать для приёма с COM порта

                                                                                                                                                                                                                                                                                                                                                                                                                                            ненадо ничего писать, воспользуйся стандартным гипер терминалом для проверки:)
                                                                                                                                                                                                                                                                                                                                                                                                                                              potor, в гипере нужно поставить ждать звонка и всё?
                                                                                                                                                                                                                                                                                                                                                                                                                                                нет, просто запустить, указав вместо модема номер com порта, попробуй нульмодемным кабелем соединить два com порта между собой, запусти два гипер терминала, настроенных на одну скорость с одинаковыми параметрами, в окне одного набери несколько символов с клавы, посмотри на окно другого, и все станет понятно
                                                                                                                                                                                                                                                                                                                                                                                                                                                  Провернул всё как ты сказал
                                                                                                                                                                                                                                                                                                                                                                                                                                                  жму ждать звонка, а на другом звонить
                                                                                                                                                                                                                                                                                                                                                                                                                                                  ну и они не саеденяються тот бесконечно ждёт
                                                                                                                                                                                                                                                                                                                                                                                                                                                  другой дозванивается.
                                                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата

                                                                                                                                                                                                                                                                                                                                                                                                                                                    Провернул всё как ты сказал
                                                                                                                                                                                                                                                                                                                                                                                                                                                    жму ждать звонка, а на другом звонить
                                                                                                                                                                                                                                                                                                                                                                                                                                                    ну и они не саеденяються тот бесконечно ждёт
                                                                                                                                                                                                                                                                                                                                                                                                                                                    другой дозванивается.

                                                                                                                                                                                                                                                                                                                                                                                                                                                    не надо ждать звонка, и звонить тоже не надо
                                                                                                                                                                                                                                                                                                                                                                                                                                                    просто соедини два кома кабелем, настрой их в терминале одинаково, набири в одном окне строку символов, она должна появиться в другом, если нет, тогда либо что то с COMом, либо с кабелем, кстати ты правильно кабель распаял?
                                                                                                                                                                                                                                                                                                                                                                                                                                                      Nullmodem (9-9) Cable
                                                                                                                                                                                                                                                                                                                                                                                                                                                      Это
                                                                                                                                                                                                                                                                                                                                                                                                                                                        да, такой, но тебе достаточно просто 3 провода
                                                                                                                                                                                                                                                                                                                                                                                                                                                        2-3
                                                                                                                                                                                                                                                                                                                                                                                                                                                        3-2
                                                                                                                                                                                                                                                                                                                                                                                                                                                        5-5
                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ещё я немогу печатать пока до кого ни будь не дозванюсь.??
                                                                                                                                                                                                                                                                                                                                                                                                                                                            скорее всего у тебя выключено эхо, главное, чтобы в другом терминале, что то появилось

                                                                                                                                                                                                                                                                                                                                                                                                                                                            Добавлено в :
                                                                                                                                                                                                                                                                                                                                                                                                                                                            зайди в свойства\настройки\параметры ASCII, и поставь галочку перед - отображать введенные символы на экран
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Народ ! Буду признателен если кто нить надоумит как IAR подключить к
                                                                                                                                                                                                                                                                                                                                                                                                                                                              AVR Studio!?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Small, 19.09.04, 16:44
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Народ ! Буду признателен если кто нить надоумит как IAR подключить к
                                                                                                                                                                                                                                                                                                                                                                                                                                                                AVR Studio!?


                                                                                                                                                                                                                                                                                                                                                                                                                                                                Попробуйте в AVR Studio загрузить *.d90 с отладочной информацией.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Приведите пример обработки прерывания, например по переполнению таймера под Atmel !!
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    На ассемблере(IAR EWAVR):
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      NAME KernelIntr        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RTMODEL "__64bit_doubles", "disabled"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RTMODEL "__cpu", "3"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RTMODEL "__cpu_name", "AT90Mega161"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RTMODEL "__enhanced_core", "enabled"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RTMODEL "__has_elpm", "false"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RTMODEL "__memory_model", "2"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RTMODEL "__rt_version", "2.30"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RSEG CSTACK:DATA:NOROOT(0)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RSEG NEAR_Z:DATA:NOROOT(0)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RSEG RSTACK:DATA:NOROOT(0)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         PUBLIC TaskSwitcher
                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RSEG CODE:CODE:NOROOT(1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      TaskSwitcher:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ; что-то делаем
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         reti  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ;------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         COMMON INTVEC:CODE:ROOT(1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ORG  36d             ; TIMER0_OVERFLOW_VECTOR
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RJMP TaskSwitcher
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      END
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    На C(IAR EWAVR):
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      #pragma vector=TIMER0_OVF0_vect
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      __interrupt void CommonInterruptHandler(void) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                         /* что-то делаем */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        кто работал с IAR for AVR 3.20C, подскажите как там в дебагере заставить срабатывать прерывания от таймеров тогда когда им положено, а не прописывать постоянно какую-то абстрактную частоту их появления в Simulator/Interrupts
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          В IAR-е, вроде (давно не юзал), можно файлик сделать с таймингами прерываний и по нему отлаживаться.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            По симуляции периферии вообще и прерываний в частности IAR EWAVR слабоват по сравнению с AVR Studio, ПМСМ. Это, похоже, единственный его недостаток.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Цитата

                                                                                                                                                                                                                                                                                                                                                                                                                                                                              По симуляции периферии вообще и прерываний в частности IAR EWAVR слабоват по сравнению с AVR Studio, ПМСМ. Это, похоже, единственный его недостаток.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                              это точно, ты можешь сконвертить отладочный файл для AVR Studio и отлаживать там
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ладно, спасибо,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                буду писать в AVR studio, там тоже есть С (а так хотелось С++ :'( )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата Moneyiac @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  буду писать в AVR studio, там тоже есть С (а так хотелось С++ )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Можешь откомпилировать в IAR, а отлаживать под AVR Studio. Правда будут ли под AVR Studio видны прелести C++ - не знаю.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Драсте всем кто нибудь пытался програмить контроллер Segnetics с помощью IAR systems. Начал разбираться с этим компилятором возникла куча проблемм прежде всего с настройками. Если кто сталкивался помогите. :wall:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      IAR systems, почему-то не знает об Segnetics абсолютно ни чего, наверное шифруются. И гугль о Segnetics-ах ни чего сказать не смог. Кинь ссылку на документацию или на сайт.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      У тебя возникли проблемы с IAR systems или с настройками компилятора? Собственно в чем проблемы, может быть ты всетаки расскажешь, shtirlizzz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Цитата MeG @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        И гугль о Segnetics-ах ни чего сказать не смог.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Он просто неправильно написал. Signetics http://www.signetics.com/product.html
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата shtirlizzz @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          хотя Time я ни где и не использовал вроде
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          А в ClassBiosSMH не используется? И вообще, о таких ошибках без полных исходников можно долго гадать.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            у кого есть сама эта программа(iar ewpic)??? пишите. как тока будет она я сразу вступю в дискуссию. а пока очень очень очень нужна
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Сообщение отредактировано: AVANGARD0_1338 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Всем привет! Вот, на старости лет лет решил освоить программирование микроконтроллеров... :)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Попробовал себя в AvrStudio на асме - вроде все нормально. Решил освоить и С. Полазив по интернету остановил свой выбор на IAR. Методом научного тыка вроде разобрался с настройками. Но в один прекрасный момент вылезла такая проблема.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Суть в следующем:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Изголяюсь с камнем ATtiny45, а конкретно с его USI под TWI. Все вроде бы нормально, все получается, а вот когда я захотел прикрутить к TWI прерывания вылезла непонятка. В симуляторе начали вылазить ошибки о выходе куда-то за пределы кода. Подозрение пало на инициализацию векторов. IAR вектора инициализирует двухбайтовыми командами. Смотрю в даташит по ATtiny45. Вижу следующее:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                9.1 Interrupt Vectors in ATtiny25/45/85
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The interrupt vectors of ATtiny25/45/85 are described in Table 9-1below.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Table 9-1. Reset and Interrupt Vectors
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                =========================================================================
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Vector No.  Program Address   Source         Interrupt Definition
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                =========================================================================
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1           0x0000            RESET          External Pin, Power-on Reset,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Brown-out Reset, Watchdog Reset
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2           0x0001            INT0           External Interrupt Request 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3           0x0002            PCINT0         Pin Change Interrupt Request 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4           0x0003            TIMER1_COMPA   Timer/Counter1 Compare Match A
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5           0x0004            TIMER1_OVF     Timer/Counter1 Overflow
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6           0x0005            TIMER0_OVF     Timer/Counter0 Overflow
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                7           0x0006            EE_RDY EEPROM  Ready
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                8           0x0007            ANA_COMP       Analog Comparator
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                9           0x0008            ADC            ADC Conversion Complete
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                10          0x0009            TIMER1_COMPB   Timer/Counter1 Compare Match B
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                11          0x000A            TIMER0_COMPA   Timer/Counter0 Compare Match A
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                12          0x000B            TIMER0_COMPB   Timer/Counter0 Compare Match B
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                13          0x000C            WDT Watchdog   Time-out
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                14          0x000D            USI_START      USI START
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                15          0x000E            USI_OVF        USI Overflow
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the program never enables an interrupt source, the Interrupt Vectors are not used, and regular
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                program code can be placed at these locations. The most typical and general program setup for
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                the Reset and Interrupt Vector Addresses in ATtiny25/45/85 is shown in the program example
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                below.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Как видно - везде выравнивание вроде как на байт. Смотрю в заголовочный файл IAR для ATtiny45 и вижу следующее:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                /* NB! vectors are specified as byte addresses */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    RESET_vect          (0x00) /* External Pin, Power-on Reset, Brown-out Reset,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Watchdog Reset */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    INT0_vect           (0x02) /* External Interrupt Request 0 */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    PCINT0_vect         (0x04) /* Pin Change Interrupt Request 0 */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    TIM1_COMPA_vect     (0x06) /* Timer/Counter1 Compare Match A */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    TIM1_OVF_vect       (0x08) /* Timer/Counter1 Overflow */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    TIM0_OVF_vect       (0x0A) /* Timer/Counter0 Overflow */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    EE_RDY_vect         (0x0C) /* EEPROM Ready */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    ANA_COMP_vect       (0x0E) /* Analog Comparator */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    ADC_vect            (0x10) /* ADC Conversion Complete */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    TIM1_COMPB_vect     (0x12) /* Timer/Counter1 Compare Match B */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    TIM0_COMPA_vect     (0x14) /* Timer/Counter0 Compare Match A */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    TIM0_COMPB_vect     (0x16) /* Timer/Counter0 Compare Match B */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    WDT_vect            (0x18) /* Watchdog Time-out */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    USI_START_vect      (0x1A) /* USI START */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define    USI_OVF_vect        (0x1C) /* USI Overflow */

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Вижу выравнивание на слово. Начинаю тормозить... :slow:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Лезу в инклуды асма AvrStudio - вижу следующее:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ; ***** INTERRUPT VECTORS ************************************************
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    INT0addr    = 0x0001    ; External Interrupt 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    PCI0addr    = 0x0002    ; Pin change Interrupt Request 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    OC1Aaddr    = 0x0003    ; Timer/Counter1 Compare Match 1A
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    OVF1addr    = 0x0004    ; Timer/Counter1 Overflow
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    OVF0addr    = 0x0005    ; Timer/Counter0 Overflow
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    ERDYaddr    = 0x0006    ; EEPROM Ready
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    ACIaddr         = 0x0007    ; Analog comparator
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    ADCaddr         = 0x0008    ; ADC Conversion ready
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    OC1Baddr    = 0x0009    ; Timer/Counter1 Compare Match B
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    OC0Aaddr    = 0x000a    ; Timer/Counter0 Compare Match A
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    OC0Baddr    = 0x000b    ; Timer/Counter0 Compare Match B
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    WDTaddr         = 0x000c    ; Watchdog Time-out
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    USI_STARTaddr   = 0x000d    ; USI START
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                .equ    USI_OVFaddr = 0x000e    ; USI Overflow

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Потихоньку начинаю офигевать... :crazy:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Решил посмотреть что видно в дизассемблере AvrStudio - увидел вот это:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ---- Test_3.asm -----------------------------------------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                47:             rjmp RESET           ; Reset Handler
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000000:   C00E       RJMP      PC+0x000F      Relative jump
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                48:             reti                 ; rjmp EXT_INT0 ; IRQ0 Handler
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000001:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                49:             reti                 ; rjmp PCINT0 ; PCINT0 Handler
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000002:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                50:             reti                 ; rjmp TIM1_COMPA ; Timer1 CompareA Handler
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000003:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                51:             reti                 ; rjmp TIM1_OVF ; Timer1 Overflow Handler
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000004:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                52:             reti                 ; rjmp TIM0_OVF ; Timer0 Overflow Handler
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000005:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                53:             reti                 ; rjmp EE_RDY ; EEPROM Ready Handler
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000006:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                54:             reti                 ; rjmp ANA_COMP ; Analog Comparator Handler
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000007:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                55:             reti                 ; rjmp ADC ; ADC Conversion Handler
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000008:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                56:             reti                 ; rjmp TIM1_COMPB ; Timer1 CompareB Handler
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000009:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                57:             reti                 ; rjmp TIM0_COMPA ;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +0000000A:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                58:             reti                 ; rjmp TIM0_COMPB ;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +0000000B:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                59:             reti                 ; rjmp WDT ;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +0000000C:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                60:             reti                 ; rjmp USI_START ;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +0000000D:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                61:             reti                 ; rjmp USI_OVF ;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +0000000E:   9518       RETI                     Interrupt return
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                @0000000F: RESET
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                73:       RESET:    ldi r16, low(RAMEND)         ; Main program start
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +0000000F:   E50F        LDI       R16,0x5F          Load immediate
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                74:                 ldi r17, high(RAMEND); Tiny45/85 also has SPH
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000010:   E011        LDI       R17,0x01          Load immediate
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                75:                 out SPL, r16         ; Set Stack Pointer to top of RAM
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000011:   BF0D        OUT       0x3D,R16          Out to I/O location
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                76:                 out SPH, r17         ; Tiny45/85 als has SPH
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +00000012:   BF1E        OUT       0x3E,R17          Out to I/O location

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Каждая команда занимает слово, но адресация почему то идет как побайтная. Вот тут я приехал. :wall:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Вот может кто нибудь прояснить эту ситуацию? А то у меня уже мозги кипят. :D

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ================================================================================
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              И еще вопрос. IAR не генерит код(кроме области векторов) если в опциях не подключена никакая библиотека. А мне надо заставить компилятор генерить код без подключения библиотек. Исходников стандартных библиотек в моем IAR нет, только скомпилированные. Можно ли как-то заставить IAR генерить код без подключения библиотек? Или может у кого-то есть эти исходники? Поделитесь плиз? Я догадываюсь, что исходники есть наверное в инсталяторе IAR, но как их вытянуть оттуда пока не знаю. Наверное нужна более дорогая лицензия.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата ir0407 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Смотрю в даташит по ATtiny45. Вижу следующее:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Как видно - везде выравнивание вроде как на байт.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Не на байт, а на слово. Память программ при переходах адресуется пословно, младший бит адреса не указывается в коде команды и подразумевается равным 0. Ну или, если смотреть с другой стороны - адрес является порядковым номером 16-битного слова. Особенность архитектуры AVR.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Спасибо. :) А в каком документе на сайте Atmel-a можно найти эту инфу об особенностях архитектуры. А то я что-то никак не могу ничего такого найти. Инфы столько, что глаза разбегаются.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Вот уж не помню.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Цитата trainer @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Не на байт, а на слово. Память программ при переходах адресуется пословно, младший бит адреса не указывается в коде команды и подразумевается равным 0. Ну или, если смотреть с другой стороны - адрес является порядковым номером 16-битного слова. Особенность архитектуры AVR.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      вы уж уточняйте о каком адресе идет речь, а то у авр-а много адресных пространств и для каждой свои правила организации и свои инструкции для доступа.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Собственно речь идет об указателе инструкций
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        А там вроде бы на русском языке написано "Память программ", "при переходах"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата ir0407 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          IAR не генерит код(кроме области векторов) если в опциях не подключена никакая библиотека. А мне надо заставить компилятор генерить код без подключения библиотек. Исходников стандартных библиотек в моем IAR нет, только скомпилированные.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Исходники библиотек обычно имеются у версий компилятора "professional".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Но, насколько я помню, если библиотека указана, но ничего из неё
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          не используется, то в исполнимые коды ничего из такой библиотеки
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          не включается. И это не только у IAR.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Что касается тонкостей адресации.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Использование С/C++ - компилятора как раз и даёт возможность
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          не обращать на эти самые тонкости никакого внимания.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Не помню, чтобы мне это понадобилось за последние xxx лет.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Цитата ЫукпШ @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Но, насколько я помню, если библиотека указана, но ничего из неё
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            не используется, то в исполнимые коды ничего из такой библиотеки
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            не включается.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Да, ничего не включается, но все равно в дампе присутствует небольшой код инициализации библиотеки. А мне бы хотелось посмотреть где это находится, как сделано и если нужно изменить под свои нужды.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Цитата ЫукпШ @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Использование С/C++ - компилятора как раз и даёт возможность
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            не обращать на эти самые тонкости никакого внимания.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Теперь это я уже понял. Просто надо хорошо знать и умело применять опции компилятора и линкера.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Цитата ЫукпШ @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Не помню, чтобы мне это понадобилось за последние xxx лет.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Столько не живут. :jokingly:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Цитата ir0407 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Да, ничего не включается, но все равно в дампе присутствует небольшой код инициализации библиотеки. А мне бы хотелось посмотреть где это находится, как сделано и если нужно изменить под свои нужды.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Не знаю, не замечал. :huh:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Может речь идёт о стартапе ?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Его исходники обычно имеются.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Поищи файл cstartup (.s90 ?).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Что касается стандартных процедур, то линкер IAR имеет
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              "удобную" логику работы, а именно:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              если некая процедура обнаружена в юзерной программе, в библиотеке
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              она не разыскивается. Это значит, можно переопределить
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              любую стандартную процедуру. Например, если реализовать
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              собственную putchar тогда стандартный printf будет пользовать
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              именно её. В результате можно выводить данные куда захочешь.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                О, как! :D Не густо же тут вопросов однако... И мой был последним аж два года назад. Ну что ж, попробуем продолжить, т.к. я так и не поборол тогда IAR-овский компилятор, вернулся к своему любимому асму. Потом времени не было этим заниматься, потом желания... И вот теперь и время появилось и желание, но воз пока и ныне там же.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Вопрос состоит в следующем. В качестве учебного эксперимента решил переписать под IAR свой асмовый модуль под USART. И снова сразу же наткнулся на какие-то сишные грабли при передаче парметра в функцию. Делаю вот так:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #define SYS_CLK = 14745600UL
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #define USART_BAUD = 57600
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #define BAUD_CONST (SYS_CLK / (16 * USART_BAUD) - 1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  void InitUSART(unsigned int BaudConst);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  void main(void)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    InitUSART(BAUD_CONST);  //<-- Компилятор ругается на эту строку
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  void InitUSART(unsigned int BaudConst);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    UBRRH = (unsigned char)BaudConst >> 8;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    UBRRL = (unsigned char)BaudConst;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  }

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                При компиляции идет ругань на указанную строчку в виде текста "expected expression". При этом если в параметр функции подставить конкретное число все компилируется нормально, а вот с макроподстановкой BAUD_CONST не хочет. Подскажите плиз где я тут на грабли наступаю. Уже весь мануал по языку триста раз скурил, но по той скудной инфе что там есть никак не могу раздуплиться по работе с макросами. В чем мой косяк?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата ir0407 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  При компиляции идет ругань на указанную строчку в виде текста "expected expression".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Естественно будет ругань. Убери символ = из макроопределений. Иначе у тебя после развертывания макросов получается ( = 14745600UL / (16 * = 57600) - 1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Сообщение отредактировано: trainer -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Гы... :D Ёкереный бабай... Точно! Вот что значит сила привычки. Спасибо большое.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Всю ветку прочитал.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Есть проект, написан в IAR.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Напарник передаёт мне исходный код, у него компиляция выдаёт hex-файл размером в 96кб, а у меня копия такого же проекта выдаёт hex-файл размером в 146кб.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Проверили настройки в Project - Options:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      - Debugger - Driver: ST-Link (для него делаем).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      - С/С++ compiler - Optimizations - Level: High.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      - Linker - Config - Linker Configuration File: Задали Override default (задана копия файла как и у напарника).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Засада в том, что мой hex-файл размером в 146кб никак не подходит для прошивки прибора (прошивальщики что в IAR, что фирменный STM32 не могут прошить им, ругаясь на слишком большой размер - это факт). А hex-файл размером в 96кб, получаемый при компиляции у напарника, прекрасно подходит (но его надо отлаживать далее при приборе).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Вобщем, надо выяснить причину, почему IAR выдаёт hex-файл повышенного размера.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      HELP. :help:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Если в настройках проекта все идентично - разница может быть из-за разных версий компиляторов и/или библиотек
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          trainer версии сравнили - у меня поновей, по мнению напарника это не должно влиять. Также обратил внимание, что у меня нет прав на запись в каталоге программы IAR, в каталоге Program Files. Пытаюсь получить права администратора - у нас на работе это не просто сделать. :)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Цитата VLeshka @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Также обратил внимание, что у меня нет прав на запись в каталоге программы IAR, в каталоге Program Files.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            А зачем тебе нужны права туда? :blink:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              trainer только предположение, что это влияет. Другой теории, куда надо идти, нет.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Аааа... Ну тогда переустанови Windows. Точно поможет.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                runtime у вас, очевидно, разного размера.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                IAR, если я правильно помню, в map-файлах умеет выдавать размеры откомпилированных функций и объектов. Можно сравнить.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  trainer переустановка помогла бы, особенно с установкой прав админа для меня.:)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Вобщем, на одном и том же комьпютере, "до меня", под логином администратора всё было нормально. Под моим логином, гостя, как мной и описано. В итоге просто "перебазировался" с приборами на свой компьютер с моими администраторскими правами.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Воскрешу тему!

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    При построении проекта, в окне build выводит отчёт типа:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    7 274 bytes of CODE memory
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    240 bytes of DATA memory (+ 23 absolute )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    763 bytes of CONST memory (+ 136 absolute )


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Хочу узнать, что значит (+ 23 absolute ).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Справочник IAR не знает, что это такое. Интернет тоже (если есть где-либо - поправьте!).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Решил копать через отчёты IAR. Настройкой в Linker -> Generate linker listing создал segment map в формате html.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Далее, в этом файле так же сухо приводится absolute в сокращении "abs" в таблице Module summary.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Зацепился за "Module summary" -> Перерыл официальные доки IAR, много всяких в инете скачал, НО: везде приводится одна и та же фраза "Module summary which lists the contribution (in bytes) from each module". Ни слова про absolute.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ТАК ЧТО ЖЕ ТАКОЕ ABSOLUTE???
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    0 пользователей:


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Рейтинг@Mail.ru
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    [ Script execution time: 0,4394 ]   [ 16 queries used ]   [ Generated: 19.03.24, 11:20 GMT ]