Thank you for your orientation






Quote Originally Posted by mister_e
here's one method using interrupt
Code:
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _BODEN_ON 

    TRISB=%00000001     ' Set RB0 to input, others to output
    
    OPTION_REG=0        ' Enable internal pull-up on PORTB
                        ' Interrupt on falling edge of RB0
                         
    INTCON = %10010000  ' Enable global interrupt
                        ' Enable RB0 interrupt
    
    LED    VAR PORTB.7  ' connected between RB7 and GND via resistor
    ClkIn  var PORTB.0  ' connected between RB0 and GND
    
    INTF   var INTCON.1 ' RB0 Interrupt flag 
    Apulse VAR BYTE     ' store the amount of pulse
    
    on interrupt goto CountPulses

    led=0
    apulse=0

start:
    if apulse<10 then start 
        '
        '   Here we got the 10 pulses
                '                        
    INTCON = 0  ' disable all interrupt
    led=1       ' enable the LED
                '
Z:  goto z      ' stay here 'till next system reboot
        

disable
    '   //////////////////////////////|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
                                 CountPulses:
    '   //////////////////////////////|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    '                                 
    '   Here is where the program jump every time the push-buton on
    '   RB0 is press.    
    '
    apulse=apulse+1       ' add a count
    while clkin=0 : wend  ' wait untill the push button is release
    pause 50              ' debounce time
    intf=0                ' reset interupt flag
    resume                ' Get out of here
enable                    ' re-enable interrupt
without interupts but a loop.
Code:
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _BODEN_ON 

    TRISB=%00000001     ' Set RB0 to input, others to output
    
    OPTION_REG.7=0      ' Enable internal pull-up on PORTB
                           
    LED    VAR PORTB.7  ' connected between RB7 and GND via resistor
    ClkIn  var PORTB.0  ' connected between RB0 and GND
    
    Apulse VAR BYTE     ' store the amount of pulse
    
    led=0
    apulse=0

    repeat
        if clkin=0 then
            while clkin=0 : wend
            pause 50
            apulse=apulse+1
            endif
        until apulse=10
    led=1

Here:
    goto here
Using internal counter(TMR0) and polling TMR0 overflow flag and RA.4 as input instead of RB0
Code:
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _BODEN_ON 

    TRISB=0              ' Set output to all i/o
    TRISA=255            ' set input to all
    
    OPTION_REG=%11111000 ' TMR0 clock source = RA4
                         ' increment counter on high to low transistion
                         ' prescaller assign to WDT
                         ' prescaller rate 1:1
                          
    CMCON=7              ' disable analog comparator
    
    INTCON = %00100000   ' enable TMR0 overflow interrupt 
                           
    LED    VAR PORTB.7   ' connected between RB7 and GND via resistor
    T0IF   var INTCON.2  ' TMR0 Interrupt flag   

    TMR0=246             ' pre-load TMR0 to have an Interrupt after 10 pulses
                         '     TMR0 is a 8 byte Register so 246+10=256=interrupt    
    led=0
    
    WHILE T0IF=0 : WEND
    LED=1
Z:  GOTO Z
Almost the same as above but polling only the TMR0 register
Code:
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _BODEN_ON 

    TRISB=0              ' Set output to all i/o
    TRISA=255            ' set input to all
    
    OPTION_REG=%11111000 ' TMR0 clock source = RA4
                         ' increment counter on high to low transistion
                         ' prescaller assign to WDT
                         ' prescaller rate 1:1
                          
    CMCON=7              ' disable analog comparator
    
    INTCON = %00100000   ' enable TMR0 overflow interrupt 
                           
    LED    VAR PORTB.7   ' connected between RB7 and GND via resistor

    TMR0=0
    led=0
    
    WHILE TMR0<10 : WEND
    LED=1
Z:  GOTO Z
I prefer the last one, produce really tight code and easy to understand BUT if the pulse come from a PUSH-Button it can glow the LED before 10 human press as it don't provide any debounce solution. BUT if you add a 0.1-1uF in parrallel, it seems to be enough to do the job. Don't forget the pull-up resistor on the RA.4 pin. Let's say 10K as a standard value

That should be more than enough to start