1) I don't understand why you keep putting those PAUSE statements in there, now you have a PAUSE 15 in there....
2) There's no GOTO LOOP anywhere so the program will "fall thru" into the UpOrDn routine then hit the RETURN and bad things will happpen. (BTW, Loop is a reserved word in newer versions of PBP, best to get used to not using it.
3) Try resampling the pins and set oldState when you return from the subroutine, ie (changes in red):
Code:
Main:
PortA.1 = 0
newState = PortA & %00011100 ; this is for my hw : 11100 = 28
PortA.1 = 1
If newState <> 28 THEN
If newState <> oldState THEN
Select Case oldState
Case 12
If NewState = 20 THEN dir=up
If NewState = 24 THEn dir=dn
Case 20
If NewState = 24 THEN dir=up
If NewState = 12 THEN dir=dn
Case 24
If NewState = 12 THEN dir=up
If NewState = 20 THEN dir=dn
END SELECT
GOSUB UpOrDn
PAUSE 15 ; time for UpOrDn
' Now resample the encoder and keep the state as oldState
PortA.1 = 0
oldState = PortA & %00011100 ; this is for my hw : 11100 = 28
PortA.1 = 1
ENDIF
ENDIF
GOTO MAIN
;============
UpOrDn:
if dir=DN then
PortB.4 = 0
pauseus 3850
PortB.4 = 1
pauseus 3850
PortB.4 = 0
pauseus 660
PortB.4 = 1
endif
if dir=UP then
PortB.4 = 0
pauseus 4450
PortB.4 = 1
pauseus 4400
PortB.4 = 0
pauseus 660
PortB.4 = 1
endif
RETURN
END
Bookmarks