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.
If you don't want the LED ON when PULSOUT times out then I would use the SELECT CASE: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
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