На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (18) « Первая ... 10 11 [12] 13 14 ...  17 18 все  ( Перейти к последнему сообщению )  
    > Разбираемся с IAR , Обсуждаем небольшие коды на IAR.
      Цитата 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 правельно я думаю???
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:
                                  Страницы: (18) « Первая ... 10 11 [12] 13 14 ...  17 18 все


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0577 ]   [ 15 queries used ]   [ Generated: 18.07.25, 10:11 GMT ]