Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. #define XTAL_FREQ 4MHZ
  2. #define byte unsigned char
  3. #define word unsigned int
  4. #include <pic.h>
  5. #include <stdio.h>
  6. __CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROTECT & PWRTEN);
  7. char schet; //число циклов переполнения таймеров TMR0, TMR1, TMR2
  8. char perep1; //программный счетчик первого уровня
  9. char perep2; //программный счетчик второго уровня
  10. char perep3; //программный счетчик третьего уровня
  11. interrupt isr(void); //подключение подпрограммы обслуживания прерывания.
  12.  
  13. main() {
  14. ANSEL = 0x00; //включение PORTA в цифровой режим
  15. TRISA = 0xFD; //настройка PORTA (RA1 на вывод, остальные на ввод)
  16. ANSELH = 0x00; //включение PORTB в цифровой режим
  17. TRISB = 0xFF; //настройка PORTB на ввод
  18. TRISC = 0x00; //настройка PORTC на вывод
  19. TRISD = 0x00; // настройка PORTD на ввод
  20. OPTION_REG = 0x07; //подключение подтягивающих резисторов
  21. // предделитель включен перед таймером TMR0, коэфф. деления 1:256
  22. PORTC = 0x00; // сброс выходного порта С
  23. INTE = 1; // разрешение прерывания от внешнего источника
  24. GIE = 1; //глобальное разрешение прерывания.
  25. for (;;) { //бесконечный цикл
  26.  
  27. while (!RD0) {
  28. }
  29. RE1 = RD0 && RD1; //включение индикатора начала работы программы.
  30. while (!RC4) {
  31. RC4 = RD0 && RB2 && !RB4 && !RE0; //включение гидростанции Кг
  32. }
  33. RC2 = 1; //включение индикации задержки на 8 сек с помощью программного таймера
  34.  
  35. for (perep3 = 0x00; perep3 < 0x86; perep3++) {
  36. for (perep2 = 0x00; perep2 < 0xFF; perep2++) {
  37. for (perep1 = 0x00; perep1 < 0xFF; perep1++) {
  38. }
  39. }
  40. }
  41.  
  42. ADCON0 = 0x41; //настройка АЦП
  43. ADCON1 = 0x80; // левое выравнивание
  44. while (ADRESH < 0xBD) {
  45. for (perep1 = 0x00; perep1 < 0xED; perep1++) {
  46. }
  47. ADIF = 0; // сброс флага АЦП
  48. GO = 1; //пуск АЦП
  49. while (ADIF) {
  50. } // ожидание конца преобразования
  51.  
  52. }
  53.  
  54. RC2 = 0; //отключение индикации задержки
  55. while (!RC5) {
  56. RC5 = (RA0 && RB2 && RC4 && !RE0) || (RA0 && RB3 && RC4 && !RE0);
  57. //включение электрогидроклапана
  58. }
  59. RC0 = 0; // предварительное отключение Кп и Кр
  60. RC1 = 0;
  61. while (!RC0) {
  62. RC0 = (RD0 && RD4 && RC5 && RC4 && !RC1 && !RB5) || (RD0 && RD1 && RB1 && RC5 && RC4 && !RC1 && !RB5) || (RD0 && RD1 && RD5 && RC5 && RC4 && !RC1 && !RB5);
  63. } // булево уравнение для Кп (RC0)
  64. RC2 = 1; // включение индикации задержки на 4,6 сек таймером TMR1
  65.  
  66. for (perep3 = 0x00; perep3 < 0xBA; perep3++) {
  67. for (perep2 = 0x00; perep2 < 0xFF; perep2++) {
  68. for (perep1 = 0x00; perep1 < 0xFF; perep1++) {
  69. }
  70. }
  71. }
  72.  
  73. RC2 = 0; //отключение индикации задержки
  74.  
  75. RC0 = 0; // отключение Кп
  76. RC2 = 0; //отключение индикации задержки
  77.  
  78. while (!RC1) {
  79. RC1 = (RD0 && RB3 && RC4 && !RC0 && RC5 && !RB5) || (RD0 && RB1 && RD2 && RC4 && !RC0 && RC5 && !RB5);
  80. } // условие включения Кр
  81.  
  82. RC2 = 1; //включение индикации задержки на 3.8 сек таймером TMR2
  83.  
  84. for (perep3 = 0x00; perep3 < 0xC7; perep3++) {
  85. for (perep2 = 0x00; perep2 < 0xFF; perep2++) {
  86. for (perep1 = 0x00; perep1 < 0xFF; perep1++) {
  87. }
  88. }
  89. }
  90. RC1 = 0; //отключение Кр
  91. PORTC = 0x00; // отключение всех устройств и индикаторов.
  92.  
  93. } //конец цикла
  94. } // конец main
  95.  
  96. interrupt isr(void) {
  97. while (!INTF) {
  98. PORTC = 0x00;
  99. RC2 = 1;
  100. }
  101. INTF = 0;
  102.  
  103. for (perep3 = 0x00; perep3 < 0x68; perep3++) {
  104. for (perep2 = 0x00; perep2 < 0xFF; perep2++) {
  105. for (perep1 = 0x00; perep1 < 0xFF; perep1++) {
  106. }
  107. }
  108. }
  109. RC2 = 0;
  110. RE1 = 0;
  111. GIE = 1;
  112. } // выход из прерывания.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement