Quote Originally Posted by jellis00 View Post
Thanks to the excellent advice from you guys, I modified the code and it now works in the form shown below. Notice I also changed the processing epoch of the COUNT loop and reduced the Pause, because of one of your comments. With this sampling rate of the sensor pulse input rate I shouldn't miss any events. Even if I miss a couple, this resolution will adequately support the application.

I am also going to continue to use WORD rather than BYTE for the variables since the production version may encounter more than 256 events during the combined epochs.

When I finally understood from your comments that WRITE was overwriting the EEPROM address that I was using to see if the indexer was indexing with a HighByte that was continuously zero, I was able to solve the problem. Actually, the indexer statement was working....I just couldn't see that it was by the way I was trying to monitor it.
Can't tell you all enough how much I appreciate your help in resolving this problem! As a long term Visual Basic programmer, my faith in PBP is restored!

Code:
'Registers Settings
TRISA = 0           ' Set PORTA pins to outputs
TRISB = 0           ' Set all PORTB and PORTC pins to outputs
TRISC = 0
ANSEL = 0           ' Set all pins to digital
ANSELH = 0
PORTC = 0			' Preset LEDs off
TRISA.1 =1          ' Set RA1 as input port for meter pulse inputs

'Variables Initialization
 switchstate   var bit ' Stores value of last measured switchstate
 k             CON 60  ' Calibration factor for flow meter...# pulses per gal
 i             VAR WORD    ' Index used in Gallon counter Repeat...Until loop
 C1            VAR WORD    ' Storage variable for count from COUNTER

'Start...normal code here
MAIN:
      'Send PWM pulse to latching solenoid to open valve
        'Generates 10 millisec pulse on RC3 output pin
         LOW PORTC.3            ' Initialize output pulse polarity
         PULSOUT PORTC.3,1000   ' Generate 10 msec pulse to RC3               
  
    ' Valve should be open at this point and water flowing
            
    ' Start measuring output of flow meter at RA1 input pin
    C1 = 0           ' Initialize pulse count variable to zero
    i = 0            ' Initialize total pulse count index to zero
    REPEAT ' Assume it takes k accumulated pulses for required gallons
        ' Count the number of pulses from Hall Effect Magnetic Sensor in 5 sec
        ' epochs and add count from each epoch to total accumulation and then 
        ' shutoff the valve when count meets i>k criteria.
        Count PORTA.1,5000,C1
        'WRITE 5,C1.HighByte    ' Write count into EEPROM location 5,6 during
        'WRITE 6,C1.LowByte     ' pre-production testing
         'Slowly blink LED during water flow  
           HIGH PORTC.0         ' If we get here, Blink the LED once
           PAUSE 100
           LOW PORTC.0
        i = i + C1              ' Add count to total pulse accumulation indexer
     'When i >= k, required gallons have flowed by the meter
     UNTIL i > k
     'WRITE 7,i.HighByte   'Store result as test of code..not in production
     'Write 8,i.LowByte
     GoTo ShutValve  

ShutValve: 'Send PWM pulse to latching solenoid to close valve
            PULSOUT PORTC.3,1000   ' Generate required 10 msec pulse to RC3
  
    ' Valve should be closed at this point and no water flowing
    
    ' Put code here to test if flow meter has stopped as an indication that
    ' no water is flowing...is a double check on valve closure.
        C1 = 0                 ' Reset pulse counter to zero
        Count PORTA.1,10000,C1 ' Collect meter pulse input, if any, for 10 secs
        IF C1 > 0 Then
            ' Water is still flowing...close the valve!
            PULSOUT PORTC.3,1000   ' Command valve solenoid to close
        ENDIF
 
    ' Put code here to put Microcontroller back to Sleep State to wait for
    ' next Interrupt
        SLEEP = 65,535 
END
Hi jellis00,
My question was, . . . actually, answered in this final cut of your code. Thank You