peterdeco1
- 5th August 2005, 10:52
Hello Everyone. I just had an interesting experience I just can't explain. My PIC is a 16F818. PORTA is held high through a 47K resistor network. 3 switches on PORTA turn on 3 LED's on PORTB. When all 3 switches are closed 2 additional PORTB's go high to turn on 2 MOSFETS. Here is the anomaly: ONLY when PORTA.5 is the LAST to close, the LED on PORTB.3 does NOT light. However all the other PORTB's do go high the way they are supposed to, including the MOSFET's, proving it is indeed jumping to "REWARD". Only PORTB.3 does NOT! Now, I did fix it by changing "REWARD" as shown below. The only difference is instead of 5 lines turning on 5 PORTB's, 1 line (PORTB = 255) turns them all on. What would possibly cause this? Thank you.
START:
NAP 0
PORTB = 0 'OFF ALL LEDS & TRANSISTORS
IF PORTA.5 = 1 AND PORTA.4 = 1 AND PORTA.3 = 1 Then START 'WAIT HERE UNTIL A SWITCH IS CLOSED
RUN:
IF PORTA.5 = 0 Then High PORTB.3 'SWITCH CLOSED - LIGHT UP LED
IF PORTA.5 = 1 Then Low PORTB.3 'SWITCH OPEN - TURN OFF LED
IF PORTA.4 = 0 Then High PORTB.2 'SWITCH CLOSED - LIGHT UP LED
IF PORTA.4 = 1 Then Low PORTB.2 'SWITCH OPEN - TURN OFF LED
IF PORTA.3 = 0 Then High PORTB.5 'SWITCH CLOSED - LIGHT UP LED
IF PORTA.3 = 1 Then Low PORTB.5 'SWITCH OPEN - TURN OFF LED
IF PORTA.5 = 0 AND PORTA.4 = 0 AND PORTA.3 = 0 Then REWARD 'ALL SWITCHES CLOSED
IF PORTA.5 = 1 AND PORTA.4 = 1 AND PORTA.3 = 1 Then START 'ALL SWITCHES OPEN
GoTo RUN 'STAY HERE UNTIL ALL ON OR OFF
************OLD ONE DOESN'T WORK***************
REWARD:
HIGH PORTB.3 'MAKE SURE ALL 3 LED'S ON PORTB.3, 2 & 5 ARE ON (PORTB.3 DOES NOT!!)
HIGH PORTB.2
HIGH PORTB.5
HIGH PORTB.4 TURN ON 'MOSFETS ON PORTB.4 & 7
HIGH PORTB.7
IF PORTA.5 = 0 AND PORTA.4 = 0 AND PORTA.3 = 0 Then REWARD 'ALL SWITCHES CLOSED STAY HERE
Pause 100
IF PORTA.5 = 0 AND PORTA.4 = 0 AND PORTA.3 = 0 Then REWARD 'ALL SWITCHES CLOSED STAY HERE
Low PORTB.7 '1 OR MORE SWITCHES OPEN OFF MOSFETS
Low PORTB.4
GoTo RUN
***************NEW ONE WORKS**********************
REWARD:
PORTB = 255 '*********HERE IS THE FIX************
IF PORTA.5 = 0 AND PORTA.4 = 0 AND PORTA.3 = 0 Then REWARD
Pause 100
IF PORTA.5 = 0 AND PORTA.4 = 0 AND PORTA.3 = 0 Then REWARD
Low PORTB.7
Low PORTB.4
GoTo RUN
START:
NAP 0
PORTB = 0 'OFF ALL LEDS & TRANSISTORS
IF PORTA.5 = 1 AND PORTA.4 = 1 AND PORTA.3 = 1 Then START 'WAIT HERE UNTIL A SWITCH IS CLOSED
RUN:
IF PORTA.5 = 0 Then High PORTB.3 'SWITCH CLOSED - LIGHT UP LED
IF PORTA.5 = 1 Then Low PORTB.3 'SWITCH OPEN - TURN OFF LED
IF PORTA.4 = 0 Then High PORTB.2 'SWITCH CLOSED - LIGHT UP LED
IF PORTA.4 = 1 Then Low PORTB.2 'SWITCH OPEN - TURN OFF LED
IF PORTA.3 = 0 Then High PORTB.5 'SWITCH CLOSED - LIGHT UP LED
IF PORTA.3 = 1 Then Low PORTB.5 'SWITCH OPEN - TURN OFF LED
IF PORTA.5 = 0 AND PORTA.4 = 0 AND PORTA.3 = 0 Then REWARD 'ALL SWITCHES CLOSED
IF PORTA.5 = 1 AND PORTA.4 = 1 AND PORTA.3 = 1 Then START 'ALL SWITCHES OPEN
GoTo RUN 'STAY HERE UNTIL ALL ON OR OFF
************OLD ONE DOESN'T WORK***************
REWARD:
HIGH PORTB.3 'MAKE SURE ALL 3 LED'S ON PORTB.3, 2 & 5 ARE ON (PORTB.3 DOES NOT!!)
HIGH PORTB.2
HIGH PORTB.5
HIGH PORTB.4 TURN ON 'MOSFETS ON PORTB.4 & 7
HIGH PORTB.7
IF PORTA.5 = 0 AND PORTA.4 = 0 AND PORTA.3 = 0 Then REWARD 'ALL SWITCHES CLOSED STAY HERE
Pause 100
IF PORTA.5 = 0 AND PORTA.4 = 0 AND PORTA.3 = 0 Then REWARD 'ALL SWITCHES CLOSED STAY HERE
Low PORTB.7 '1 OR MORE SWITCHES OPEN OFF MOSFETS
Low PORTB.4
GoTo RUN
***************NEW ONE WORKS**********************
REWARD:
PORTB = 255 '*********HERE IS THE FIX************
IF PORTA.5 = 0 AND PORTA.4 = 0 AND PORTA.3 = 0 Then REWARD
Pause 100
IF PORTA.5 = 0 AND PORTA.4 = 0 AND PORTA.3 = 0 Then REWARD
Low PORTB.7
Low PORTB.4
GoTo RUN