Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define XTAL_FREQ 4MHZ
- #define byte unsigned char
- #define word unsigned int
- #include <pic.h>
- #include <stdio.h>
- __CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROTECT & PWRTEN);
- char schet; //число циклов переполнения таймеров TMR0, TMR1, TMR2
- char perep1; //программный счетчик первого уровня
- char perep2; //программный счетчик второго уровня
- char perep3; //программный счетчик третьего уровня
- interrupt isr(void); //подключение подпрограммы обслуживания прерывания.
- main() {
- ANSEL = 0x00; //включение PORTA в цифровой режим
- TRISA = 0xFD; //настройка PORTA (RA1 на вывод, остальные на ввод)
- ANSELH = 0x00; //включение PORTB в цифровой режим
- TRISB = 0xFF; //настройка PORTB на ввод
- TRISC = 0x00; //настройка PORTC на вывод
- TRISD = 0x00; // настройка PORTD на ввод
- OPTION_REG = 0x07; //подключение подтягивающих резисторов
- // предделитель включен перед таймером TMR0, коэфф. деления 1:256
- PORTC = 0x00; // сброс выходного порта С
- INTE = 1; // разрешение прерывания от внешнего источника
- GIE = 1; //глобальное разрешение прерывания.
- for (;;) { //бесконечный цикл
- while (!RD0) {
- }
- RE1 = RD0 && RD1; //включение индикатора начала работы программы.
- while (!RC4) {
- RC4 = RD0 && RB2 && !RB4 && !RE0; //включение гидростанции Кг
- }
- RC2 = 1; //включение индикации задержки на 8 сек с помощью программного таймера
- for (perep3 = 0x00; perep3 < 0x86; perep3++) {
- for (perep2 = 0x00; perep2 < 0xFF; perep2++) {
- for (perep1 = 0x00; perep1 < 0xFF; perep1++) {
- }
- }
- }
- ADCON0 = 0x41; //настройка АЦП
- ADCON1 = 0x80; // левое выравнивание
- while (ADRESH < 0xBD) {
- for (perep1 = 0x00; perep1 < 0xED; perep1++) {
- }
- ADIF = 0; // сброс флага АЦП
- GO = 1; //пуск АЦП
- while (ADIF) {
- } // ожидание конца преобразования
- }
- RC2 = 0; //отключение индикации задержки
- while (!RC5) {
- RC5 = (RA0 && RB2 && RC4 && !RE0) || (RA0 && RB3 && RC4 && !RE0);
- //включение электрогидроклапана
- }
- RC0 = 0; // предварительное отключение Кп и Кр
- RC1 = 0;
- while (!RC0) {
- RC0 = (RD0 && RD4 && RC5 && RC4 && !RC1 && !RB5) || (RD0 && RD1 && RB1 && RC5 && RC4 && !RC1 && !RB5) || (RD0 && RD1 && RD5 && RC5 && RC4 && !RC1 && !RB5);
- } // булево уравнение для Кп (RC0)
- RC2 = 1; // включение индикации задержки на 4,6 сек таймером TMR1
- for (perep3 = 0x00; perep3 < 0xBA; perep3++) {
- for (perep2 = 0x00; perep2 < 0xFF; perep2++) {
- for (perep1 = 0x00; perep1 < 0xFF; perep1++) {
- }
- }
- }
- RC2 = 0; //отключение индикации задержки
- RC0 = 0; // отключение Кп
- RC2 = 0; //отключение индикации задержки
- while (!RC1) {
- RC1 = (RD0 && RB3 && RC4 && !RC0 && RC5 && !RB5) || (RD0 && RB1 && RD2 && RC4 && !RC0 && RC5 && !RB5);
- } // условие включения Кр
- RC2 = 1; //включение индикации задержки на 3.8 сек таймером TMR2
- for (perep3 = 0x00; perep3 < 0xC7; perep3++) {
- for (perep2 = 0x00; perep2 < 0xFF; perep2++) {
- for (perep1 = 0x00; perep1 < 0xFF; perep1++) {
- }
- }
- }
- RC1 = 0; //отключение Кр
- PORTC = 0x00; // отключение всех устройств и индикаторов.
- } //конец цикла
- } // конец main
- interrupt isr(void) {
- while (!INTF) {
- PORTC = 0x00;
- RC2 = 1;
- }
- INTF = 0;
- for (perep3 = 0x00; perep3 < 0x68; perep3++) {
- for (perep2 = 0x00; perep2 < 0xFF; perep2++) {
- for (perep1 = 0x00; perep1 < 0xFF; perep1++) {
- }
- }
- }
- RC2 = 0;
- RE1 = 0;
- GIE = 1;
- } // выход из прерывания.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement