Quote Originally Posted by Art View Post
An interrupt is overkill for this, and not the typical way to handle the problem at all.
I'd use a counter to have your button checked every 10ms, and LED routine run every 500ms like this.
and you get to save the interrupt for when it's actually needed.

Code:
x var byte
direction var bit
timerbyte var byte
TRISA = 1
TRISC = 0
x = 1

loop:
PORTC = x
pause 10
timerbyte = timerbyte + 1

IF PORTA.3 = 0 then
IF direction = 0 THEN
direction = 1
ELSE
direction = 0
ENDIF ' direction
ENDIF ' button

IF timerbyte = 50 THEN timerbyte = 0 ' 500ms has passed if timerbyte = 0

IF timerbyte = 0 THEN
IF direction = 0 THEN
	IF x = 8 THEN x = 1  <- You forgot that if x = 8 and then x = 1 you must  go to loop or else x will never be 1 but MORE than one
	x = x << 1
ELSE
	IF x = 1 THEN x = 8  <- Same here
	x = x >> 1
ENDIF ' direction
ENDIF ' timerbyte

goto loop
I have pointed out some mistakes. Thanks for your code man anyway, cool way to do things, much better than ON INTERRUPT I believe. Don't be too harsh on me guys I've been learning this for less than a week