COUNT pin, period, wordvariable

Pin - is a variable/constant which specifies the input pin to use.

Period - is a variable/constant (1-65535ms at 4MHz).

Wordvariable - receives the result (0-65535).


Count pulses on an input pin.

Count checks the state of the input pin and counts the number of low to high transitions within the time 'period'. A word variable should be used for 'variable'. At 4MHz the input pin is checked every 20us, so the highest frequency of pulses that can be counted is 25kHz, presuming a 50% duty cycle (ie equal on-off time). Take care with mechanical switches, which may cause multiple 'hits' for each switch push as the metal contacts 'bounce' upon closure.

Effect of increased clock speed

For all PICAXE chips the minimum width of a clocking signal (total time of high and low added together) and that signal's maximum frequency will be as follows:

Clock Signal Signal Frequency Width Frequency
4MHz 40us 25kHz
8MHz 20us 50kHz
16MHz 10us 100kHz
32MHz 5us 200kHz
64MHz 2.5us 400kHz

The unit of time for the sampling period is also affected by the operating speed.

Clock Frequency Sample Period Time Unit
4MHz 1ms (1000 us)
8MHz 500 us
16MHz 250 us
32MHz 125 us
64MHz 62.5 us

Result Variable

The 'count' command can count up to 65535 pulses and a 16-bit word variable is required to store numbers that high.

An 8-bit byte variable can only hold a maximum value of 255 so, if more than 255 pulses are counted, the number stored in the byte variable will not accurately reflect the actual count of pulses.

For this reason it is recommend that a word variable is used to store the count of pulses.

If it is known there will never be more than 255 pulses during the period of the count, or it does not matter if the variable does not hold an accurate count when there are more than 255 pulses, then a byte variable may be used.

Applies To:
See Also:
Related Create:

Count input transitions

Count how many low to high transitions there are on input pin C.1 in a 5 second period and report the result

Code Example:
main:	count C.1, 5000, w1	; count pulses in 5secs (at 4MHz)
	debug			; display value
	goto main		; loop back to start
Copy Code Submit an Example

Submit Your Own Code!

You must be logged in to submit code examples. Login now.