PDA

View Full Version : while wend problem



Russ Kincaid
- 18th March 2007, 04:44
This is a segment of my program. The PICBASIC compiler does not like my WHILE statement. What is wrong with it?
REM PORT B ARE OUTPUT, INTERCEPT ON PORTA.1
CMCON = %00001101
VRCON = %11101100 'VREF ENABLED, OUTPUT ON FA2, V = 2.5V
REM VREF ON RA2 WHICH IS ALSO INPUT TO COMPARATOR+
REM COMPARITOR NEG INPUT ON RA1 IS INTERUPT INPUT, NORMALLY HIGH
TRISA = %00000010 'PORTA.1 IS STOP INPUT, ALL OTHERS OUTPUT
TRISB = %00000000 'ALL OUTPUTS

ON INTERRUPT GOTO STOPSUB
STOPSUB:
WHILE PORTA.1 = 0 PAUSE 1 'WHY DOES THIS NOT WORK?
WEND
RESUME
ENABLE

Russ

paul borgmeier
- 18th March 2007, 04:52
you have this
WHILE PORTA.1 = 0 PAUSE 1 'WHY DOES THIS NOT WORK?
WEND

how about this?

WHILE PORTA.1 = 0
PAUSE 1 ' moved to its own line
WEND

paul borgmeier
- 18th March 2007, 05:00
and you do not appear to have a "DISABLE" before your INT routine, but you do have an "ENABLE" after it.

sougata
- 18th March 2007, 05:08
WHILE PORTA.1 = 0 PAUSE 1 'WHY DOES THIS NOT WORK?
WEND

Hi,

You can also use a : to use multiple statements on the same line.
Thus your code should be


WHILE PORTA.1 = 0 :PAUSE 1 'THIS WORKs !!!
WEND

Russ Kincaid
- 18th March 2007, 20:35
Thanks. I am so used to GWBASIC that I expected PICBASIC to be the same.

I don't know why I need an ENABLE or DISABLE, can't I just eliminate both?

Russ

rhino
- 19th March 2007, 00:25
Darrel has made working with interrupts so much easier with his Instant Interrupts (http://www.picbasic.co.uk/forum/showthread.php?t=3251). You might try this method.

Russ Kincaid
- 19th March 2007, 01:16
Thanks Ryan, I downloaded the files and it looks interesting but I don't have a clue what to do with them. Right now I need an interrupt and am looking for an easy fix. This is my program, it is a sequencer and the sequence works ok as long as the interrupt routine is not there. When the interrupt routine is there (ON INTERRUPT commented out), all the portb outputs are stuck low.

REM PORT B ARE OUTPUT, INTERCEPT ON PORTA.1
CMCON = %00001101 'COMPARATOR 2 USED, C1 DISABLED
VRCON = %11101100 'VREF ENABLED, OUTPUT ON RA2(PIN1), V = 2.5V

TRISA = %00000010 'PORTA.1 IS STOP INPUT
TRISB = %00000000 'ALL OUTPUTS

'ON INTERRUPT GOTO STOPSUB
STOPSUB:
WHILE PORTA.1 = 0 : STOP : WEND
RESUME

REM SET OUTPUTS HIGH INITIALLY
HIGH PORTB.0 : HIGH PORTB.1 : HIGH PORTB.2 : HIGH PORTB.3
HIGH PORTB.4 : HIGH PORTB.5 : HIGH PORTB.6 : HIGH PORTB.7

START:
LOW PORTB.0 : PAUSE 5000 : HIGH PORTB.0
LOW PORTB.1 : PAUSE 5000 : HIGH PORTB.1
LOW PORTB.2 : PAUSE 5000 : HIGH PORTB.2
LOW PORTB.3 : PAUSE 5000 : HIGH PORTB.3
LOW PORTB.4 : PAUSE 5000 : HIGH PORTB.4
LOW PORTB.5 : PAUSE 5000 : HIGH PORTB.5
LOW PORTB.6 : PAUSE 5000 : HIGH PORTB.6
LOW PORTB.7 : PAUSE 5000 : HIGH PORTB.7
GOTO START
END

rhino
- 19th March 2007, 01:27
Hey Russ -
Either I'm blind, or you don't have any interrupts enabled. Read through the threads on Darrel's instant interrupt routines. It's well documented, and there are plenty of examples. If I'm blind.... please point out where you are INTCON register. To be honest... I haven't played around with them much, but I'll try to help if I can.

Archangel
- 19th March 2007, 02:30
Hi Russ,
If stopsub is activated, will not all useful activity cease due to the STOP command ? As I see it the program will never WEND or RESUME, unless I misunderstand page 152 of TFM. :)

rhino
- 19th March 2007, 02:53
Good point Joe... I didn't even see that.