Программа для микроконтроллера PIC16F876

/*************************************************************

*

* 16Б25ПСп. Управляющая программа.

*

*************************************************************

*

*

*************************************************************

*

* Процессор PIC16f876, Fosc = 4,9152 МГц.

*

***********************************************************/

#include <pic.h>

#include <math.h>

CONFIG(DEBUGDIS & UNPROTECT & LVPDIS & BORDIS & PWRTEN & WDTDIS & HS & DUNPROT);

#define BITNUM(adr,bit)((unsigned)(&adr)*8+(bit)) //Адреса входов-выходов.

#define ON 1 //Включено - высокий уровень.

#define OFF 0 //Выключено - низкий уровень.

#define PAUSE 2 //Константа выдержки времени.

// В Ы Х О Д А :bit INC @ BITNUM(PORTA,1); //Загрузка индикатора скоростей.

static bit REZET @ BITNUM(PORTA,2); //Сброс ---- ----.bit TIME_ENDED @ BITNUM(PORTA,3); //Отключение главного привода.bit RUN @ BITNUM(PORTA,4); //Ход программы.bit SUP_BLOCK @ BITNUM(PORTA,5); //Отключение суппорта.bit EM1 @ BITNUM(PORTB,7); // ЭМ1 гидропривода.bit EM2 @ BITNUM(PORTB,6); // ЭМ2 ----.bit EM3 @ BITNUM(PORTB,5); // ЭМ3 ----.bit EM4 @ BITNUM(PORTB,4); // ЭМ4 ----.bit EM5 @ BITNUM(PORTB,3); // ЭМ5 ----.bit EM6 @ BITNUM(PORTB,2); // ЭМ6 ----.bit EM7 @ BITNUM(PORTB,1); // ЭМ7 ----.

// В Х О Д А :bit SP_ON @ BITNUM(PORTC,0); //Включение шпинделя.

static bit PUCH @ BITNUM(PORTC,1); //Режим "Толчок".bit S_S_BLOCK @ BITNUM(PORTC,2); //Блокировка шпинделя и суппорта.bit DIR_MOVE @ BITNUM(PORTC,3); //Прямой ход.bit INV_MOVE @ BITNUM(PORTC,7); //Обратный ход.bit GEN_BLOCK @ BITNUM(PORTC,5); //Общая блокировка.bit INP_AN @ BITNUM(PORTA,0); //Вход переключения скоростей. FLAG_GEN; //Флаг главной блокировки.FLAG_S_S; // -- блокировки суппорта и шпинделя.FLAG_PUCH; // -- включения режима "Толчок".FLAG_SPEED; // -- переключения скоростей.FLAG_NEITR; // -- перехода на нейтраль.FLAG_SP; // -- включения шпинделя.

bit FLAG_DIR_MOVE; // -- --- прямого хода.

bit FLAG_INV_MOVE; // -- --- обратного хода.

unsigned char SPEED=0; //Скорость шпинделя.int DELAY=0; //Выдержка времени.

/*************************************************************

*

* Универсальный стоп

*

*************************************************************/stop(void)

{(EM1||EM2||EM3||EM4||EM6||EM7) //Если какой - либо из электромаг-

{ //нитов включен,=EM2=EM3=EM4=EM5=EM6=EM7=OFF; //отключаем все ЭМ гидропривода,=PAUSE*15000; //время на выключение(DELAY--!=0); //примерно 0,1 сек.=EM6=ON; //Включение тормоза,=PAUSE*25000; //время на торможение(DELAY--!=0); //примерно 2 сек.=EM6=OFF; //Отключение тормоза.

}

}

/*************************************************************

*

* Переключение скоростей

*

*************************************************************/char speed_switch(void)

{char _SPEED; //Временное значение скорости.char COUNT; //Счет импульсов для индикации.=ON; //Измерение напряжения с(ADGO); //переключателя скоростей.=ON; //Сброс индикатора скоростей.

if((ADRESH>=213)&&(ADRESH<240))_SPEED=1; //Выбор скорости((ADRESH>=187)&&(ADRESH<213))_SPEED=2; //в зависимости((ADRESH>=164)&&(ADRESH<187))_SPEED=3; //от напряжения((ADRESH>=140)&&(ADRESH<164))_SPEED=4; //с переключателя((ADRESH>=117)&&(ADRESH<140))_SPEED=5; //скоростей.((ADRESH>=96)&&(ADRESH<117))_SPEED=6; //((ADRESH>=75)&&(ADRESH<96))_SPEED=7; //((ADRESH>=53)&&(ADRESH<75))_SPEED=8; //((ADRESH>=19)&&(ADRESH<53))_SPEED=9; //

if(SPEED==_SPEED); //Скорость изменилась?//если - да,

{=_SPEED; //тогда устанавливаем выбранную_SPEED=ON; //скорость и флаг переключения.

}=INC=OFF; //Снимаем сброс с индикатора скоростей=SPEED*2; //и загружаем(COUNT--!=0) //в индикатор

{=PAUSE; //полученное(DELAY--!=0); //значение=!INC; //скорости.

}SPEED; //Возвращаем выбранную скорость.

}

/*************************************************************

*

* Прямой ход.

*

*************************************************************/direct(SPEED)

{(SPEED)

{1:EM1=EM2=ON; //Включить скорость 1,;2:EM1=EM6=ON; // 2,;3:EM1=EM5=ON; // 3,;4:EM3=EM7=ON; // 4,;5:EM4=EM7=ON; // 5,;6:EM3=EM6=ON; // 6,;7:EM4=EM6=ON; // 7,;8:EM3=EM5=ON; // 8,;9:EM4=EM5=ON; // 9.

}

}

/*************************************************************

*

* Обратный ход.

*

*************************************************************/inverse(SPEED)

Перейти на страницу: 1 2

Читайте также

Проектирование РЭА
При конструкторском проектировании РЭА (радиоэлектронной аппаратуры) решаются задачи, связанные с поиском наилучшего варианта конструкции, удовлетворяющего требованиям технического задан ...

Проектирование сетевого оборудования NGN
В настоящее время всё чаще встречаются публикации, посвящённые коренному преобразованию ТфОП и переходу к сети следующего поколения (NGN). Она позиционируется как универсальная сеть, спо ...

Проектирование корпоративной сети
Информационная сеть - сеть, предназначенная для обработки, хранения и передачи данных. Информационная сеть состоит из: · абонентских и административных систем; · связы ...

Основные разделы

Все права защищены! (с)2024 - www.generallytech.ru