Advertisement
DrAungWinHtut

ok.c

Jul 13th, 2023
825
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.67 KB | None | 0 0
  1. #include <xc.h>
  2. #include <stdio.h>
  3.  
  4. // Constants for oxygen level and water exchange
  5. #define OXYGEN_THRESHOLD 80     // Threshold for low oxygen level
  6. #define WATER_EXCHANGE_INTERVAL 5000   // Water exchange interval in milliseconds
  7.  
  8. // Function prototypes
  9. void Interrupt_Init();
  10. void __interrupt() OxygenLevel_ISR();
  11. void __interrupt() WaterExchange_ISR();
  12.  
  13. // Global variables
  14. volatile uint8_t oxygenLevel = 100;    // Initial oxygen level
  15. volatile uint8_t waterExchangeFlag = 0;    // Water exchange flag
  16. volatile uint16_t waterExchangeTimer = 0;  // Timer for water exchange interval
  17.  
  18. void main(void) {
  19.     // Initialize Interrupts
  20.     Interrupt_Init();
  21.  
  22.     while (1) {
  23.      void main(void);   // Main program loop
  24.                     ;   // Perform other tasks
  25.     }
  26.  
  27.     return;
  28. }
  29.  
  30. void Interrupt_Init() {
  31.     // Enable interrupts
  32.     INTCONbits.PEIE = 1;    // Peripheral Interrupt Enable bit
  33.     INTCONbits.GIE = 1;     // Global Interrupt Enable bit
  34.  
  35.     // Configure oxygen level interrupt
  36.     IOCANbits.IOCAN4 = 1;   // Interrupt on falling edge (LOW to HIGH)
  37.     PIE0bits.IOCIE = 1;     // Enable IOC (Interrupt-on-Change) interrupt
  38.  
  39.     // Configure timer interrupt for water exchange
  40.     T0CON0bits.T0EN = 1;    // Enable Timer0
  41.     T0CON0bits.T016BIT = 0; // 8-bit mode
  42.     T0CON0bits.T0OUTPS = 0b0000;    // 1:1 postscaler
  43.     T0CON1bits.T0CS = 0b010;    // FOSC/4 as the clock source
  44.     T0CON1bits.T0ASYNC = 0;     // Synchronized operation
  45.     T0CON1bits.T0CKPS = 0b1111; // 1:32768 prescaler
  46.     TMR0H = 0x06;   // Initialize Timer0 value (for 5 ms interrupt interval)
  47.     TMR0L = 0x18;
  48.     PIE0bits.TMR0IE = 1;    // Enable Timer0 interrupt
  49. }
  50.  
  51. void __interrupt() OxygenLevel_ISR() {
  52.     if (IOCAFbits.IOCAF4) {
  53.         IOCAFbits.IOCAF4 = 0;    // Clear the interrupt flag
  54.  
  55.         // Read oxygen level from sensor
  56.         // Update the oxygenLevel variable with the new value
  57.  
  58.         // Check oxygen level
  59.         if (oxygenLevel < OXYGEN_THRESHOLD) {
  60.             // Low oxygen level, take appropriate action (e.g., sound an alarm)
  61.         TRISCbits.TRISC1 = 0;   // Perform necessary tasks
  62.         PORTCbits.RC1 = 1;
  63.         }
  64.     }
  65. }
  66. /*
  67. void __interrupt() WaterExchange_ISR() {
  68.     if (PIR0bits.TMR0IF) {
  69.         PIR0bits.TMR0IF = 0;    // Clear the Timer0 interrupt flag
  70.  
  71.         // Increment water exchange timer
  72.         waterExchangeTimer++;
  73.  
  74.         // Check if water exchange interval has elapsed
  75.         if (waterExchangeTimer >= WATER_EXCHANGE_INTERVAL) {
  76.             waterExchangeTimer = 0;     // Reset the timer
  77.             waterExchangeFlag = 1;      // Set the water exchange flag
  78.         }
  79.     }
  80. }
  81.  
  82. */
  83.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement