Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Looking for simple look out table for PIC18F452

Status
Not open for further replies.

yantheman

Newbie level 6
Joined
May 2, 2006
Messages
13
Helped
1
Reputation
2
Reaction score
1
Trophy points
1,283
Activity points
1,399
need help in programming

Hey people, need help here. Can someone provide me with a simple look up table for PIC18F452.
 

Re: need help in programming

wah..what a help you are.. if the datasheet can answer my question you think I will be in here ?
 

Re: need help in programming

Exactly what kind of look up table are you looking for? Machine code relating to your ic? what do you mean by simple table?

If you are talking about assembly code you may have to create a shortened table yourself of the functions you will be constantly using for quick referal while programming. It is frustrating flicking through a code book.

I don't know if this is what you meant - if it is i might be able to help
 

Re: need help in programming

You can implement a simple look up table in assembler like this.

Code:
            movlw   HIGH Table         ;get msb of table address
            movwf   PCLATH             ;load table address msb into pc
            movfw   offSet                ;get lsb's of table address
            
            call        Table              ;get value from table
            movwf   result                ;save value
            return

;---  look up table 

            ORG     0x200

Table:   addwf   PCL,f           ;add offset to program counter
            retlw   .0
            retlw   .1
            retlw   .3
            retlw   .4
            retlw   .6
            retlw   .8
            retlw   .9
            retlw   .11
            retlw   .13
            retlw   .14
            retlw   .16
            retlw   .17
            retlw   .19
            retlw   .21
            retlw   .22
            retlw   .24
            retlw   .26
            retlw   .27
            retlw   .29
            retlw   .30

If you are using c, just declare a large array. You have to modify the linker file if you want to do this.
 

need help in programming

Hello,
I am also want to know how to write Look Up Table in C. Please post some sample code. It will help me a lot.
 

Re: need help in programming

A simple table can be implemented using a large array. If its bigger than 256 bytes you have to modify the linker file to define a block of memory.
Using Microchips MCC18 compiler, here is a sample modified linker file that defines a block of 0x7ff bytes of ram named HEAP and names the Section 'localHeap'.

You allocate your array in this section with a #pragma idata or #pragma udata directive.

Code:
#pragma udata localHeap

static char Table[0x7ff];

/* Then you access the array with a pointer */

#pragma udata

char *table_ptr = &Table[0];

/* examples of use */

Result = table_ptr[5];

table_ptr[x] = byteValue;

Sample linker File
Code:
// $Id: 18f2680.lkr,v 1.2 2004/04/26 17:56:58 curtiss Exp $
// File: 18f2680.lkr
// Linker script for the PIC18F2680 processor
// Allocate heap of 0x7ff bytes.

LIBPATH .

FILES c018i.o
FILES clib.lib
FILES p18f2680.lib

CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
CODEPAGE   NAME=page       START=0x2A           END=0xFFFF
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000       END=0xF003FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x5F
DATABANK   NAME=gpr0       START=0x60           END=0xFF
DATABANK   NAME=gpr1       START=0x100          END=0x1FF
DATABANK   NAME=gpr2       START=0x200          END=0x2FF
DATABANK   NAME=gpr3       START=0x300          END=0x3FF

//define the heap

DATABANK   NAME=HEAP       START=0x400          END=0xBFF          PROTECTED

//comment out

//DATABANK   NAME=gpr4       START=0x400          END=0x4FF
//DATABANK   NAME=gpr5       START=0x500          END=0x5FF
//DATABANK   NAME=gpr6       START=0x600          END=0x6FF
//DATABANK   NAME=gpr7       START=0x700          END=0x7FF
//DATABANK   NAME=gpr8       START=0x800          END=0x8FF
//DATABANK   NAME=gpr9       START=0x900          END=0x9FF
//DATABANK   NAME=gpr10      START=0xA00          END=0xAFF
//DATABANK   NAME=gpr11      START=0xB00          END=0xBFF

DATABANK   NAME=gpr12      START=0xC00          END=0xCFF
DATABANK   NAME=sfr13      START=0xD00          END=0xDFF          PROTECTED
DATABANK   NAME=sfr14      START=0xE00          END=0xEFF          PROTECTED
DATABANK   NAME=sfr15      START=0xF00          END=0xF5F          PROTECTED
ACCESSBANK NAME=accesssfr  START=0xF60          END=0xFFF          PROTECTED

SECTION    NAME=CONFIG     ROM=config
SECTION    NAME=localHeap  RAM=HEAP      //name the section
STACK      SIZE=0x100      RAM=gpr12
 

need help in programming

Thanks btbass for your help and sample code. I am also want to know how to write code for multiplexing 7 segment display. For example multiplexing two common cathode display. Please provide me sample code in C.
 

need help in programming

Just use a 4511 7 segment driver chip. They only cost about 50p
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top