The PULSIN and PULSOUT commands at 4MHz have a 10us resolution per count.
PULSIN will time out after 65535 counts or 655ms and return a value of 0 (zero) if it doesn't see the expected pulse.
Make sure MCLR setting is OFF or pin 4 pulled HIGH with a 10K or something to keep it out of reset.
Try this code but realize that if the PULSIN times out, the 0 (zero) will turn the LED ON too because it is <8.
Code:
ANSEL = 0 ' set I/O pin to digital
CMCON0 = 7 ' set comparator off
osccon = $60
define osc 4
input GPIO.4 ' set GPIO.4 to input pin 3
OUtput GPIO.2 ' set GPIO.0 to output pin 5
output GPIO.1 ' set GPIO.1 to output pin 6
sens var GPIO.4
led var GPIO.2
trig var GPIO.1
dist var word
main:
GOSUB distance
IF dist < 8 THEN
HIGH led
ELSE
LOW led
ENDIF
GOTO main
distance:
trig = 0 ' start output in LOW state
PULSOUT trig,1 ' each count = 10us
PULSIN sens,1,dist ' will time out in 655ms if nothing received
dist= dist/15 'convert to inches
PAUSE 100
RETURN
END
If you don't want the LED ON when PULSOUT times out then I would use the SELECT CASE:
Code:
ADCON0 = 0 ' A/D module OFF
ANSEL = 0 ' set I/O pin to digital
CMCON0 = 7 ' set comparator off
osccon = $60
define osc 4
input GPIO.4 ' set GPIO.4 to input pin 3
OUtput GPIO.2 ' set GPIO.0 to output pin 5
output GPIO.1 ' set GPIO.1 to output pin 6
sens var GPIO.4
led var GPIO.2
trig var GPIO.1
dist var word
main:
GOSUB distance
SELECT CASE dist
CASE 0 ' PULSIN timed out and returns zero, turns LED OFF
LOW led
CASE IS < 8 ' dist <8 inches but not zero, turns ON LED
HIGH led
CASE ELSE ' dist >8 inches turns LED OFF
LOW led
END SELECT
GOTO main
distance:
trig = 0 ' start output in LOW state
PULSOUT trig,1 ' each count = 10us
PULSIN sens,1,dist ' will time out in 655ms if nothing received
dist= dist/15 'convert to inches
PAUSE 100
RETURN
END
Bookmarks