PDA

View Full Version : 12F510 CALL subroutine problem ...



LakisFM1
- 15th November 2011, 00:09
Hello to all,
i am having a headache using CALL in 12F510...see that...

The PIC gets a continuous CLK in pins GPIO.3 and .4
(This is only a testing part of the full program , in order to understand what caused the full program to WDT endlessly)


So...THIS TEST CODE IS NOT WORKING...it watchdogs endlessly....

CODE/
-------------------------------------------------------------------------------

@ DEVICE pic12F510, INTRC_OSC
@ DEVICE pic12F510, WDT_ON
@ DEVICE pic12F510, MCLR_OFF
@ DEVICE pic12F510, PROTECT_OFF

DEFINE OSC 4

IN_A VAR GPIO.4
IN_B VAR GPIO.3
OUT_A VAR GPIO.5
OUT_B VAR GPIO.1
LED VAR GPIO.5

ADCON0.6 = 0 ' A/D OFF
ADCON0.7 = 0 'A/D OFF
CM1CON0.3 = 0 'COMPARATOR OFF
OPTION_REG.5 = 0 ' TOCKI OFF

TRISIO = 00011100

MAIN_LOOP:
CLEARWDT

CALL WAIT_HI_IN_A

OUT_A = 1
OUT_B = 1

pauseus 100
OUT_A = 0
OUT_B = 0

GOTO MAIN_LOOP


WAIT_HI_IN_A:
CLEARWDT
IF IN_A = 0 THEN GOTO WAIT_HI_IN_A
return

-----------------------------------------------------------------------
/CODE


But... if i move the WAIT_HI_IN_A routine inside the mainloop ... it works! .... no WDT timeout , and pulses going out of the GPIO outputs .... what is happening?

-----------------------------------------------------------------------
CODE/

@ DEVICE pic12F510, INTRC_OSC
@ DEVICE pic12F510, WDT_ON
@ DEVICE pic12F510, MCLR_OFF
@ DEVICE pic12F510, PROTECT_OFF

DEFINE OSC 4

IN_A VAR GPIO.4
IN_B VAR GPIO.3
OUT_A VAR GPIO.5
OUT_B VAR GPIO.1
LED VAR GPIO.5

ADCON0.6 = 0 ' A/D OFF
ADCON0.7 = 0 'A/D OFF
CM1CON0.3 = 0 'COMPARATOR OFF
OPTION_REG.5 = 0 ' TOCKI OFF

TRISIO = 00011100

MAIN_LOOP:
CLEARWDT

WAIT_HI_IN_A:
CLEARWDT
IF IN_A = 0 THEN GOTO WAIT_HI_IN_A

OUT_A = 1
OUT_B = 1

pauseus 100
OUT_A = 0
OUT_B = 0

GOTO MAIN_LOOP

-------------------------------------------------------------------------------------------------
/CODE




I also have a second problem with the above code...
The original plan was ... "OUT_A VAR GPIO.0" , but GPIO.0 does really strange things...
i get unstable triangle voltages , so for now i use GPIO.5 instead which works fine (but pcb's have already manufactured , due to hurry :( )...

HenrikOlsson
- 15th November 2011, 07:14
Hi,
CALL is used to execute an assembly subroutine (preceeded with an underscore) but it looks to me like your subroutine is written in PBP.
Try using GOSUB instead of CALL.

/Henrik.

LakisFM1
- 15th November 2011, 09:21
:angel: T H A N K S !!!! ..... THAT WAS IT! :angel:

(and solved all the problems ... including the strange behaviour of GPIO.0....)