You need to insert the ELSE statement for each IF. For example, if the first IF is not true, the code never gets to the ELSE ...=0
You need to insert the ELSE statement for each IF. For example, if the first IF is not true, the code never gets to the ELSE ...=0
to execute this part...
ALL previous conditions have to be met.Code:if pump=0 then module_rel_out=1 else module_rel_out=0 endif
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Simply pre-load the ELSE condition into the variable before entering the IF loop...
Code:module_rel_out=0 if level<=high_level then if thermiko1=0 then if thermistor1=0 then if auto1=0 then if onboard_an2<=pres_limit then if pump=0 then module_rel_out=1 endif endif endif endif endif
Hi, Ioannis
Why not use an AND combination of your conditions.
Karnaugh would LOVE your example.
Try this little soft ... and ENJOY.
Karnaugh Minimizer 2.0
Copyright (c) 2002-2007 ShurikSoft.
http://www.shuriksoft.com
Alain
************************************************** ***********************
Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
************************************************** ***********************
IF there is the word "Problem" in your question ...
certainly the answer is " RTFM " or " RTFDataSheet " !!!
*****************************************
Hi all and thanks for the replies.
Alain: I tried with AND but got an error of too many variables. Indeed was long line!
Melanie: That was what I did just before reading your post. Yes this works but was not appealing to me as an elegant solution.
Steve & Tobias: Yes,I see now, after the morning cup of coffee that it never reached the ELSE statement.
Thanks again to all.
Ioannis
Hi Ioannis
I do not Understand you ...
As you see ... I played somewhat with my Personnal Testboard to verify everything was running fine ...Code:'Essai 16F84 Random DEFINE LCD_EBIT 1 ' Other LCD pins are same as Manual - Holy Manual - my sweet Manual ... ' DEFINE LCD_DREG PORTB ' I/O port where LCD is connected ' DEFINE LCD_DBIT 0 ' DEFINE LCD_RSREG PORTB ' DEFINE LCD_RSBIT 4 ' Register select pin ' DEFINE LCD_EREG PORTB ' DEFINE LCD_EBIT 5 ' Enable pin ' DEFINE LCD_BITS 4 ' 4-bit data bus ' DEFINE LCD_LINES 2 ' LCD has 2 character lines DEFINE OSC 4 @ __config _XT_OSC & _WDT_ON & _CP_OFF '***************************************************************************** 'Variables Level var Word High_Level var Word Onboard_an2 var Word PressLimit var Word Auto1 var Bit Thermikol var Bit Thermistor1 var Bit Pump var Bit LevelOk var Bit PressOk var Bit module_rel_out var Portb.7 '***************************************************************************** 'Constantes '***************************************************************************** 'Preset CLEAR PORTA = 0 PORTB = 0 TRISA = 0 TRISB = 0 High_Level = 40000 Level = 0 Thermikol = 1 Thermistor1 = 1 Onboard_an2 = 500 PressLimit = 35000 Auto1 = 1 Pump = 0 PAUSE 500 LCDOUT $FE,1 RANDOM Level RANDOM Onboard_An2 Loop: RANDOM Level RANDOM Onboard_An2 IF (level <= high_Level) THEN PORTB.5 = 1 ELSE PORTB.5 = 0 ENDIF IF ( onboard_an2 <= PressLimit ) THEN PORTB.6 = 1 ELSE PORTB.6 = 0 ENDIF Module_rel_out = (level <= high_Level) && Thermikol && Thermistor1 && Auto1 && ( onboard_an2 <= PressLimit ) && !Pump LCDOUT $FE,2,# Module_Rel_Out ," ",DEC5 Level ," ",DEC5 Onboard_an2 ," " LCDOUT $FE,$C0,"out", DEC5 High_Level, " ", DEC5 Presslimit PAUSE 300 IF Module_rel_out THEN PAUSE 500 GOTO Loop END
And it runs fine !!!
"your" line is here :
...Code:Module_rel_out = (level <= high_Level) && Thermikol && Thermistor1 && Auto1 && ( onboard_an2 <= PressLimit ) && !Pump
Value Comparisons or logic levels have equal behaviour here ...
Cheers ...
Alain
Last edited by Acetronics2; - 1st November 2008 at 15:33.
************************************************** ***********************
Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
************************************************** ***********************
IF there is the word "Problem" in your question ...
certainly the answer is " RTFM " or " RTFDataSheet " !!!
*****************************************
Hi Alain.
On the following if I try to put the second if-then inside the logic expression, I get an "Temp variables exceeding T4" error in MPASM assembler.
This compiles OK:
This produces the above error:Code:if pump=0 and (thermistor1=1 or thermiko1=1 or onboard_an2>(pres_limit+10)) then module_rel_out.0=0 endif if level>stop_level then if pump=0 then module_rel_out.0=0 endif endif
Thanks,Code:if pump=0 and (thermistor1=1 or thermiko1=1 or onboard_an2>(pres_limit+10) or level>stop_level) then module_rel_out.0=0 endif
Ioannis
Bookmarks