Program Memory is the space available for your PROGRAM.
You really don't need to know very much about the amount of memory in a
microcontroller as it is generally larger than you require.
But for the technically minded, here are the details:
Memory consists of pages. A page has 256 locations and these are identified in
hexadecimal as 00 to FF.
The first page of memory is called Page 0. The next page is Page 1 etc.
A PIC12C508A has 2 pages of memory 00 to 1FF. This is 512 locations (actually
511 usable locations as the top location is reserved for oscillator
The PIC12C509, PIC16C84, PIC16F84 and PIC16F627 have 4 pages of memory, 00 to
This is 1024 locations or 1k of memory.
The PIC16F628 has 2k of memory.
CALL, GOTO and RETURN instructions operate across the full memory for each chip
except CALL for PIC12C508 and PIC12C509. CALL for PIC12C508 and PIC12C509
only allows a CALL to a location that is in the first 0FF (256 locations). This
is the only limiting feature of the PIC12C508A and PIC12C509.
1024 memory locations may seem very small but when you start writing a program,
you will be surprised how many routines can be fitted in.
Each line of code takes up one memory location. The PIC16F628 has 2k locations. This
represents nearly 30 pages if the program is printed on A4 sheets of paper.
Memory is also called MEMORY SPACE, PROGRAM SPACE, PROGRAM AREA,
The following diagram compares the memory of the PIC chips we are covering in
When the frequency of the oscillator of a PIC microcontroller is 4MHz, it takes 1uS to
carry out each instruction. If the instruction causes the micro to go to
another part of the program, the instruction takes 2uS.
A program can be placed anywhere is memory and to do this there is a pseudo
instruction called ORG.
ORG is called a pseudo instruction as it is not burnt into the chip but
tells the assembler where to burn the first instruction in a program.
ORG must have a value associated with it. For instance, ORG 000 will tell the assembler
to place the first real instruction in your program at address 000, when the
chip is burnt.
If you specify ORG 0CC, the following instruction will be placed at memory
location 0CC, when the chip is "burnt".
You can use ORG again in a program to force a particular sub-routine to reside
at a particular location. For example ORG 1AF will force the instruction
MOVLW 01 to be at location 1AF in memory:
When a microcontroller is operating in a circuit, an event on a input line can
trigger the micro to perform a particular operation.
This event is called an interrupt and causes the micro to go to location 004 in
memory. An instruction is placed at this location to make the micro go to a
sub-routine to handle the event.
Location 004 is called the Peripheral Interrupt Vector location and
since memory starts at 000, we need to start our program below 004 so that
location 004 can be used at a later time.
The first location in memory is called the RESET Vector. The microcontroller
goes to this location during turn-on and whenever a reset is created.
At memory location 000, an instruction is needed to take the micro to location
005, for the start of the program.
The following instructions show the code:
;Start of program in memory
;Next instruction will be placed at location 005
The program will be burnt into a chip as follows: (actually the binary code
will be burnt into the chip).