Searching \ for 'Calls and 16C84' in subject line. ()
Make payments with PayPal - it's fast, free and secure! Help us get a faster server
FAQ page: techref.massmind.org/techref/microchip/devices.htm?key=16C
Search entire site for: 'Calls and 16C84'.

Truncated match.
PICList Thread
'Calls and 16C84'
1997\08\28@034706 by David BALDWIN

flavicon
face
Hi,

       I have a problem that's always the same: I have a pgm in assembler,
with several routines that I am calling (PIC16C84). To test my LCD I am
sending a small text and I am calling the caracters with retlw.
Depending on the position of this routine, I sometimes have nothing on
the screen. I never understood "long calls", can somebody explain me
what's happening? Thanks

David

1997\08\28@043857 by Oyvind Kaurstad

flavicon
face
>        I have a problem that's always the same: I have a pgm in assembler,
>with several routines that I am calling (PIC16C84). To test my LCD I am
>sending a small text and I am calling the caracters with retlw.
>Depending on the position of this routine, I sometimes have nothing on
>the screen. I never understood "long calls", can somebody explain me
>what's happening? Thanks

There is no such thing as "long calls" in the '84.

When using the call instruction the entire 13 bit program counter (PC)
is pushed onto the stack, and since the '84 only has 1 k program
memory this is sufficient for the program to return correctly.

However, if you're using the retlw instruction and an offset
to create tables you'll have to be careful when manipulating
the PC. If your table looks like this...

table
addwf PCL,1
retlw '0'
retlw '1'
retlw ...
retlw...

..then you will get into trouble if the table crosses a 256 byte boundary in
the
program memory. For instance, if the addwf instruction is at memory location
0x0FF and your offset (in the W register) is 0x01 (ie you want the
ascii value of 1 returned) what will happen?

The PCL (8 bit) will roll over to 0x00 and the progam will continue executing
>from the beginning again. (If your call to the table originated from
within the first 256 bytes of the program memory.)

To correct this you'll either have to make sure that your table does not
cross any boundaries or do an extended computation of the offset including
the PCLATH...

This is explained in the Microchip application note AN556. Take a look at it.

Hope this helps.

If I've written anything wrong I hope some of the gurus on the list will
correct me.

And while I'm at it, writing tables using retlw's can be a tedious business,
especially if the tables grow large.

There is another method, but it looks a bit strange...

I'm using this syntax:

dw "4T4e4s4t"

this is equal to

retlw 'T'
retlw 'e'
retlw 's'
retlw 't'

Is there a better way?

-¯yvind

1997\08\28@050605 by David BALDWIN

flavicon
face
Oyvind Kaurstad wrote:
{Quote hidden}

--
       I am using DT "Test", assembling into   retlw `T`
                                               retlw 'e' ...

 _____________
 \           /               David BALDWIN
  \ ALCATEL /               Design engineer
   \TELECOM/
    \     /         SdM (Societe de Microelectronique)
     \   /
      \ /      B.P. 4205            Phone : +32 (0)71 442932
       V       B-6000 Charleroi     Fax   : +32 (0)71 442905
               (Belgium)            spam_OUTbaldwinTakeThisOuTspametca.alcatel.be

More... (looser matching)
- Last day of these posts
- In 1997 , 1998 only
- Today
- New search...