Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 4th, 2012  |  syntax: C  |  size: 2.08 KB  |  hits: 16  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <avr/io.h>
  2.  
  3. // коофицент длинна (м)/частота (гц)
  4. #define distance_frequenzy 8000000
  5. #define need 70
  6.  
  7. int main(void)
  8. {
  9.  
  10.     while(1)
  11.     {
  12.         //на PORTC.0 - кнопка спуска
  13.         while(PINC.0==0);
  14.         // Подготовка переменных
  15.         double velocity=0; //скорость
  16.         int not_new_cycle; // новый ли это пролёт по кругу или нет
  17.         int old_B;         // старое значение регистра B (с датчиками)
  18.         OCR0=255;          // инициализация таймера
  19.         TCCR0 = (1<<CS00); //настройка таймера
  20.  
  21.         while(velocity<need) //Пока не достигли нужной скорости
  22.         {
  23.             not_new_cycle=1; //считаем цикл не новым
  24.             PORTA=1;         //Отключим все катушки кроме "младшей"
  25.             //Инициализация таймера для работы счётчика
  26.             TCNT0=0;
  27.                         old_B=PINB;
  28.             while(not_new_cycle)
  29.             {
  30.                 while(PINB==old_B); //Пока не пролетели новый датчик - ничего не делаем
  31.                 old_B=PINB;         // как только пролетели - считаем новое состояние порта
  32.  
  33.                 if (old_B!=128)     // если не пролетели последний, старший датчик
  34.                     PORTA=2*PORTA;  // просто включим следующую катушку
  35.                 else
  36.                     not_new_cycle=0;//Иначе закончим этот цикл
  37.             }
  38.             velocity=TCNT0*distance_frequenzy; //... посчитав достигнутую скорость
  39.         }
  40.  
  41.         //PINC.1 - переключатель режима стрельбы
  42.         // 1 - автоматический
  43.         // 0 - ручной
  44.         if(PINC.1==0)
  45.             while(PINC.0==1);
  46.     }
  47.  
  48.     return 0;
  49. }