
Originally Posted by
lilimike
Well I guess this must be a tough one as no one commented or maybe I didn't explain clearly my issue.
I think it's just one of those, "you can't get there from here" kind of things.
Trying to time things with pauses makes it so you can't do anything else at the same time, so 6 buttons would be difficult with the example given.
However, if you do it a little differently, it's a piece of cake.
Using a timer to measure even 1ms time periods, and running the main loop freely (without pauses), you can do it like this...
Code:
<font color="#008000"><b>CLEAR
DEFINE </b></font><b>OSC </b><font color="#800000"><b>20
</b></font><font color="#008000"><b>INCLUDE </b></font><font color="#FF0000">"AllDigital.pbp" </font><font color="#0000FF"><b><i>; Disable Analog functions
</i></b></font><b>SW1 </b><font color="#008000"><b>VAR </b></font><b>PORTB</b>.<font color="#800000"><b>0
</b></font><b>SW2 </b><font color="#008000"><b>VAR </b></font><b>PORTB</b>.<font color="#800000"><b>1
</b></font><b>SW3 </b><font color="#008000"><b>VAR </b></font><b>PORTB</b>.<font color="#800000"><b>2
</b></font><b>SW4 </b><font color="#008000"><b>VAR </b></font><b>PORTB</b>.<font color="#800000"><b>3
</b></font><b>SW5 </b><font color="#008000"><b>VAR </b></font><b>PORTB</b>.<font color="#800000"><b>4
</b></font><b>SW6 </b><font color="#008000"><b>VAR </b></font><b>PORTB</b>.<font color="#800000"><b>5
</b></font><b>LED1 </b><font color="#008000"><b>VAR </b></font><b>PORTC</b>.<font color="#800000"><b>0
</b></font><b>LED2 </b><font color="#008000"><b>VAR </b></font><b>PORTC</b>.<font color="#800000"><b>1
</b></font><b>LED3 </b><font color="#008000"><b>VAR </b></font><b>PORTC</b>.<font color="#800000"><b>2
</b></font><b>LED4 </b><font color="#008000"><b>VAR </b></font><b>PORTC</b>.<font color="#800000"><b>3
</b></font><b>LED5 </b><font color="#008000"><b>VAR </b></font><b>PORTC</b>.<font color="#800000"><b>4
</b></font><b>LED6 </b><font color="#008000"><b>VAR </b></font><b>PORTC</b>.<font color="#800000"><b>5
</b></font><b>Counters </b><font color="#008000"><b>VAR WORD</b></font>[<font color="#800000"><b>6</b></font>] <font color="#0000FF"><b><i>; 6 words, for 6 buttons
</i></b></font><b>DelayTime </b><font color="#008000"><b>CON </b></font><font color="#800000"><b>10000 </b></font><font color="#0000FF"><b><i>; 10 seconds
</i></b></font><b>T0IF </b><font color="#008000"><b>VAR </b></font><b>INTCON</b>.<font color="#800000"><b>2 </b></font><font color="#0000FF"><b><i>; TMR0 overflow flag
</i></b></font><b>X </b><font color="#008000"><b>VAR BYTE
</b></font><b>OPTION_REG </b>= <font color="#800000"><b>%01010100 </b></font><font color="#0000FF"><b><i>; WPU on, TMR0 1:32 prescaler, internal clk
</i></b></font><font color="#008000"><b>PAUSE </b></font><font color="#800000"><b>50 </b></font><font color="#0000FF"><b><i>; let everything settle
</i></b></font><b>Main</b>:
<font color="#008000"><b>WHILE </b></font>!<b>T0IF </b>: <font color="#008000"><b>WEND </b></font><font color="#0000FF"><b><i>; wait for timer to overflow
</i></b></font><b>TMR0 </b>= <font color="#800000"><b>100 </b></font><font color="#0000FF"><b><i>; load timer for 1ms
</i></b></font><b>T0IF </b>= <font color="#800000"><b>0 </b></font><font color="#0000FF"><b><i>; reset the overflow flag
</i></b></font><font color="#008000"><b>IF </b></font><b>SW1 </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>then </b></font><b>Counters</b>[<font color="#800000"><b>0</b></font>] = <b>DelayTime </b>: <font color="#008000"><b>HIGH </b></font><b>LED1
</b><font color="#008000"><b>IF </b></font><b>SW2 </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>then </b></font><b>Counters</b>[<font color="#800000"><b>1</b></font>] = <b>DelayTime </b>: <font color="#008000"><b>HIGH </b></font><b>LED2
</b><font color="#008000"><b>IF </b></font><b>SW3 </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>then </b></font><b>Counters</b>[<font color="#800000"><b>2</b></font>] = <b>DelayTime </b>: <font color="#008000"><b>HIGH </b></font><b>LED3
</b><font color="#008000"><b>IF </b></font><b>SW4 </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>then </b></font><b>Counters</b>[<font color="#800000"><b>3</b></font>] = <b>DelayTime </b>: <font color="#008000"><b>HIGH </b></font><b>LED4
</b><font color="#008000"><b>IF </b></font><b>SW5 </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>then </b></font><b>Counters</b>[<font color="#800000"><b>4</b></font>] = <b>DelayTime </b>: <font color="#008000"><b>HIGH </b></font><b>LED5
</b><font color="#008000"><b>IF </b></font><b>SW6 </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>then </b></font><b>Counters</b>[<font color="#800000"><b>5</b></font>] = <b>DelayTime </b>: <font color="#008000"><b>HIGH </b></font><b>LED6
</b><font color="#008000"><b>FOR </b></font><b>X </b>= <font color="#800000"><b>0 </b></font><font color="#008000"><b>to </b></font><font color="#800000"><b>5 </b></font><font color="#0000FF"><b><i>; cycle thru counters
</i></b></font><font color="#008000"><b>IF </b></font><b>Counters</b>(<b>X</b>) > <font color="#800000"><b>0 </b></font><font color="#008000"><b>THEN </b></font><font color="#0000FF"><b><i>; if counter is counting
</i></b></font><b>Counters</b>(<b>X</b>) = <b>Counters</b>(<b>X</b>) - <font color="#800000"><b>1 </b></font><font color="#0000FF"><b><i>; decrement counter
</i></b></font><font color="#008000"><b>IF </b></font><b>Counters</b>(<b>X</b>) = <font color="#800000"><b>0 </b></font><font color="#008000"><b>THEN </b></font><font color="#0000FF"><b><i>; if counter timed out
</i></b></font><font color="#008000"><b>SELECT CASE </b></font><b>X </b><font color="#0000FF"><b><i>; turn off the appropriate LED
</i></b></font><font color="#008000"><b>CASE </b></font><font color="#800000"><b>0 </b></font>: <font color="#008000"><b>LOW </b></font><b>LED1
</b><font color="#008000"><b>CASE </b></font><font color="#800000"><b>1 </b></font>: <font color="#008000"><b>LOW </b></font><b>LED2
</b><font color="#008000"><b>CASE </b></font><font color="#800000"><b>2 </b></font>: <font color="#008000"><b>LOW </b></font><b>LED3
</b><font color="#008000"><b>CASE </b></font><font color="#800000"><b>3 </b></font>: <font color="#008000"><b>LOW </b></font><b>LED4
</b><font color="#008000"><b>CASE </b></font><font color="#800000"><b>4 </b></font>: <font color="#008000"><b>LOW </b></font><b>LED5
</b><font color="#008000"><b>CASE </b></font><font color="#800000"><b>5 </b></font>: <font color="#008000"><b>LOW </b></font><b>LED6
</b><font color="#008000"><b>END SELECT
ENDIF
ENDIF
NEXT </b></font><b>X
</b><font color="#008000"><b>GOTO </b></font><b>Main
</b>
No Interrupts required.
HTH,
Bookmarks