
Untitled
By: a guest on
May 4th, 2012 | syntax:
C | size: 2.08 KB | hits: 16 | expires: Never
#include <avr/io.h>
// коофицент длинна (м)/частота (гц)
#define distance_frequenzy 8000000
#define need 70
int main(void)
{
while(1)
{
//на PORTC.0 - кнопка спуска
while(PINC.0==0);
// Подготовка переменных
double velocity=0; //скорость
int not_new_cycle; // новый ли это пролёт по кругу или нет
int old_B; // старое значение регистра B (с датчиками)
OCR0=255; // инициализация таймера
TCCR0 = (1<<CS00); //настройка таймера
while(velocity<need) //Пока не достигли нужной скорости
{
not_new_cycle=1; //считаем цикл не новым
PORTA=1; //Отключим все катушки кроме "младшей"
//Инициализация таймера для работы счётчика
TCNT0=0;
old_B=PINB;
while(not_new_cycle)
{
while(PINB==old_B); //Пока не пролетели новый датчик - ничего не делаем
old_B=PINB; // как только пролетели - считаем новое состояние порта
if (old_B!=128) // если не пролетели последний, старший датчик
PORTA=2*PORTA; // просто включим следующую катушку
else
not_new_cycle=0;//Иначе закончим этот цикл
}
velocity=TCNT0*distance_frequenzy; //... посчитав достигнутую скорость
}
//PINC.1 - переключатель режима стрельбы
// 1 - автоматический
// 0 - ручной
if(PINC.1==0)
while(PINC.0==1);
}
return 0;
}