PDA

View Full Version : 10F222 ADRES as one more VAR?



JetPack Spartan
- 9th May 2010, 22:28
I was a bit surprised to find that I only have three bytes of RAM to work with in the 10F222. If I had read more carefully I would have caught the part about PICBasic Pro claiming most of the RAM. I've managed pretty well using just those three bytes but now I really need just one more.

Since I am not using the ADC's is there any harm in using ADRES as a variable? The code compiles just fine but I have not run it yet.

Rich

Melanie
- 10th May 2010, 00:10
As long as it doesn't adversely impact on the way the PIC is configured and run, you could use any Register as storage or as a variable.

I remember an old long retired IT Manager telling me when as a 'New Boy' starting as a junior, he spent a WEEK looking for a spare BIT that could be used in the company's IBM Mainframe Payroll Program which had filled all of the available 8K Memory! My, how times have changed!

JetPack Spartan
- 10th May 2010, 00:34
Thanks, I thought it might work.

Also, if I read the datasheet correctly, ADRES retains it's value when rebooted. That would be really useful, just so long as it can't get worn out from being used constantly.

Rich H

Archangel
- 10th May 2010, 05:39
Boy Howdy,
I LIKE it when people think "outside the box", cause when they share it the box just gets bigger.

Melanie
- 10th May 2010, 08:10
I don't think ADRES will work (should have checked yesterday)... pick a different register. Woke up this morning with something bugging me about your choice... according to the Datasheet ADRES is READ ONLY.

Jerson
- 10th May 2010, 08:52
I would look at the LST file to see which variables PBP is not using; just allocating. Let me explain

If you look at pause or maybe pauseus, you will see that PBP uses the R0 and R1 registers each WORD type to handle the delay function. Similarly, PBP uses variables T1 to T4 for Boolean arithmetic (I deduced this by looking at the lst file). You can salvage some RAM by breaking up logical ANDs to a nested if structure - something like this



' typical logical and
if testcondition1 and testcondition2 then
do something
endif

' typical logical or
if testcondition3 or testcondition4 then
do somethingelse
endif


can be changed to


' simplified logical and
if testcondition1 then
if testcondition2 then
do something
endif
endif

' simplified logical OR
if testcondition3 then dosomethingelse
if testcondition4 then dosomethingelse


the second structure does not involve the T1..T4 variables of PBP and is resource friendly.

Hopefully not using the logical operations of PBP will let PBP yeild the T1 to T4 registers???

A look into the Listing file will yeild some more. I haven't gone into the details yet.

JetPack Spartan
- 10th May 2010, 10:12
Okay, I guess that explains why I couldn't get my program working, would have been nice to use ADRES.

As far as the booleans, I cannot use them now without getting the "unable to fit variable" error.

I currently use one word sized and one byte sized variable.

When I look at the list file I see that R2 and R3 are not used. Does that mean I can do something like;
NewVariable VAR R2
New approach, I set OPTION_REG.5 = 1 so that TMR0 would not increment and I am using that for my missing byte. It is working so far... but if I can use R2 or R3 that would be better because I wanted to try to use TMR0.

Rich H

Jerson
- 10th May 2010, 11:15
Looks like you can get by doing that. Try it out!!!

Bruce
- 10th May 2010, 14:54
With Timer0 clock source set to external, and using TMR0 register as a variable, I would check to make sure TMR0 isn't incrementing when taking GP2 high/low.

Some internal counters, when configured for external clocks, will increment if you're using the pin as an output & toggling the pin.