Re: мигалка на Pic12f629
Добавлено: Ср сен 25, 2013 07:23:17
У поворотника другой алгоритм и его функционал на PIC'е можно весомо дополнить. Но если задача формулируется только после многочисленных расспросов...
Значит мне пора на битву экстрасенсовvovik15 писал(а):да,я делаю поворотник
Ну поделитесь тогда кодом, нельзя так вот ниочём тему заканчивать.vovik15 писал(а):сам все написал
Код: Выделить всё
#include <pic.h>
// pic12f629
__CONFIG (INTIO & UNPROTECT & BOREN & MCLRDIS & PWRTEN & WDTDIS);
//конфигурация сигнальных линий
#define R GPIO2 //правый поворотник
#define L GPIO1 //левый поворотник
#define SR GPIO0 //сигнал от правого
#define SL GPIO3 //сигнал от левого
void delay_R (void);//функция задержки для правого поворотника
void delay_L (void);//функция задержки для левого поворотника
void POV_R (void); //функция обработки правого поворотника
void POV_L (void); //функция обработки левого поворотника
unsigned char flag_stop; //флаг для остановки мигания
unsigned int time; //время для задержки опроса клавиш
void main (void){
//конфигурируем контроллер
INTCON = 0; // запрет прерываний
CMCON = 7; // отключаем аналоговый компаратор
TRISIO = 0b001001;//настройка направленя работы линий
GPIO = 0; // обнуляем линии
GPPU = 0; // выключаем подтягивающие резисторы
while(1){ // начало бесконечного цикла
/*здесь проверяем включен ли поворот*/
if(SR==0) {time++;if(time>7000){time=0;POV_R();}}//и не реагируем на всякую Х....
if(SL==0) {time++;if(time>7000){time=0;POV_L();}}//и не реагируем на всякую Х....
} //конец бесконечного цикла
} //конец программы
/*функция обработки правого поворотника*/
void POV_R (void)
{
unsigned char x;//переменная для цикла
for (x=5;x>0;x--)
{ //цикл на 5 витков
R=1;//включаем правый
delay_R(); //пауза
if(flag_stop==1) {R=0; flag_stop=0; break;} //выключаем и завершаем цикл
R=0;//выключаем правый
delay_R();//пауза
if(flag_stop==1) {flag_stop=0; break;}//завершаем цикл
}//конец цикла
}//конец функции
/*функция обработки левого поворотника*/
void POV_L (void)
{
unsigned char x;
for (x=5;x>0;x--)
{
L=1;
delay_L();
if(flag_stop==1) {L=0;flag_stop=0; break;}
L=0;
delay_L();
if(flag_stop==1) {flag_stop=0; break;}
}//конец цикла
}//конец функции
//функция задержки для правого поворотника*/
void delay_R (void)
{
unsigned int tmp;//временная переменная
tmp=15000;//устанавливаем значение
do{tmp--;
if(SL==0) {flag_stop=1;break;} //завершаем цикл если нажата ПРОТИВОПОЛОЖНАЯ КЛАВИША
} while(tmp>0);
}
//функция задержки для левого поворотника*/
void delay_L (void)
{
unsigned int tmp;
tmp=15000;
do{tmp--;
if(SR==0) {flag_stop=1;break;}//завершаем цикл если нажата ПРОТИВОПОЛОЖНАЯ КЛАВИША
} while(tmp>0);
}
На сколько мне известно, для сигнализации заднего хода существуют спец. огни, а для мигания обоими поворотниками существует спец. кнопочкадобавить режим движения задним ходом,чтобы мигали оба поворотника сразу
Конечно можно, переписав заново ...vovik15 писал(а):ну что? этот код можно оптимизировать?