The most recent chip in the PIC range for experimenters is the PIC16F628. It is an
upgraded version of the PIC16F84 and has all the features of the PIC16F84, plus
Here are the pinouts of the two chips:
In a nutshell, the PIC16F628 has twice the memory, more than twice the number of files,
more than twice the speed of operation, an extra 3 lines, an inbuilt
oscillator (two different frequencies - 32kHz and 4MHz), a voltage comparator, and other features. All with a price tag lower than the PIC16F84!
Obviously the pressure of competition has created the features and lowered the
price to keep the PIC name on the market, and this is the power of free-enterprise.
The computer industry is proving the power of mass-production, with yearly
increases in capability and reduction in prices.
The same could apply to almost every other facet of manufacture (clothing,
medicine, cars, electricity production) if it were not for the power of cartels
and secret deals keeping prices artificially high.
At least we can be proud to be in an expansive
industry, that consistently comes up with amazing devices.
Now we have a dream of a chip to work with.
Some of the slight limitations of the PIC16F84 have been removed and we have a
chip with more memory and more registers than we need.
The built-in 4MHz/32kHz oscillator allows a project to be created without any
external components and the block diagram looks like this:
The chip simplifies to two FULL ports (Port A and Port B) with
RA5 an input-only line.
If you program the chip via the "low voltage" mode (LVP), RB4 is not available
as an in-out line.
If you are familiar with the PIC16F84, only two slight differences need to be
remembered and you will be able to migrate any of your programs to the new
During the "burn" operation, the PIC16F628 needs to be set up so that
the comparator is disabled, the MCLR
line is converted to an input for port A, the LVP bit is set to the desired
value and the internal clock is set to 4MHz.
Once you have done this, the block diagram above represents the chip.
The diagram below compares the PIC16F84 with a PIC16F628:
The diagram below is a virtual picture of the files
(Registers) and memory locations in a
Consider the "cells" or "files" or "locations" as one long
This is how they would appear:
There are three separate sections in a PIC chip - associated
with writing a program.
The top section on the diagram above shows files (or Registers) that hold information that is
mainly generated by the micro, and needs to be stored for its own use. They hold the in/out nature of the pins, the
timer, the actual PortA and PortB lines, the Program Counter, the result of a subtraction etc.
You can alter the bits of some of these files and read the bits of other files, but
overall only a small part of them is used by the programmer (you).
The centre section contains the files used in a program. These files are given
"names" or "numbers" such as: 0C, 0D, 0E, 0F, 10h, 11h etc.
They are 8 bits wide and can hold a value from 00 to FF. They are called
temporary storage. They store values such as from an input line and hold it
The lower section contains the instructions of a Program. The Program
is written by YOU. The first location in memory is called address
000 and for a PIC16F628, there are 2048 locations. The program uses the
files in the centre section.
The only other thing to remember is the location of the files. The location of
a file is the same as the "name" or "number" of the file. In other words file
0C is located at address 0C in the Files section of the micro. The PIC16F628
has 224 files, located in three different places. We will only be needing one
group of files, located at 20h to 7Fh. These 333444 files are in bank xxx and
this is the same bank as the program. This makes them easily accessible.
96 files in the PIC16F628 are located at 20h to T
xxv files are located at
This chip has two programming modes:
Normal Mode: 12-14v on Pin 4
Low Voltage Mode: (LVP) 5v on pin 10.
When burning a chip for the first time,
either the low voltage or high voltage mode can be used.
An instruction in your program sets LVP to "0" or "1." If it is set to "1"
you can use either re-programming method, but you lose RB4 as an in-out pin.
The PIC16F628 has a Low Voltage Programming-mode (LVP) for in-circuit
programming. In this mode, the chip can be programmed with 5v on the
programming pin (pin 10) instead of 12-14v on Pin 4.
Before deciding on the way you will program the chip, you need to know some
of the differences and limitations.
The PIC16F628 chip is supplied with the LVP bit as "1."
When the LVP bit is "1," RB4/PGM (pin 10) is dedicated to the programming
function and is not available as in-out pin RB4.
The chip will enter programming mode when a HIGH (5v) is placed on RB4/PGM
(pin 10). This is called the "low voltage" or "in-circuit" mode.
This makes the chip "in-circuit" programmable and re-programmable
If you don't want the "in-circuit programmable" feature, LVP bit must be
"0." To make LVP bit "0," the chip must be programmed via "Normal Mode,"
using 12-14v on Pin 4. The LVP bit cannot be changed when programming
"Normal Mode," an instruction is available to change the value of LVP.
If you program via the "Normal Mode" (12 - 14v to "activate" the chip
- to put it into "program mode"), you can use all
the features of the chip. (Remember RA5 is input-only, so "Port A" is not a
If you program via "Low Voltage Mode," output line RB4 (pin 10) is not available as you are
reserving the pin for re-programming via LVP.
This is very inconvenient as "Port B" is normally used as a complete 8-line
output to drive displays etc. To have one line missing from the port is like
buying a book with 15 pages missing! Port A is already an incomplete Port,
with RA5 as input-only. It would have been much more convenient to put LVP
pin on port A and leave Port B complete! Such are the limitations of life!
If you program a chip for the first time: "normally," you can
re-program it "in-circuit" (via the 5v feature) or re-program it via the
If you program a chip for the first time: "in circuit," you can regain the
RB4 as an in-out line by re-programming it "normally." You cannot regain RB4
as an in-out line by re-programming it "in-circuit."
When a PIC16F628 is programmed in the "high voltage" mode, the chip can be
re-programmed in the high-voltage mode or you can set the LVP bit to "0" so
that the chip can be re-programmed "in-circuit" via the LVP mode. The Low
Voltage Programming-mode allows the chip to be re-programmed by applying 5v
on pin 10 (instead of 12-14v on pin 4).
The Multi Chip Programmer "burns" a PIC16F628 in the "high voltage" mode
ONLY. You can re-burn the chip "in-circuit" or in the Multi Chip
Programmer, depending on the setting of LVP. The chip comes with LVP set to
cover all possibilities.
SETTING THE LVP BIT
PROGRAM FROM A PIC16F84 TO A PIC16F628
Any program written for a PIC16F84 can be converted to suit a PIC16F628.
In fact any program written for a small PIC microcontroller can be converted
for a larger version.
The only thing you have to change are the "file-numbers" or "file-names." All the code
remains the same.
The diagram below shows the number of files in each microprocessor and how they
align with each other.
Some files in one micro align with those in
another and this is why we have suggested writing programs using only those
files that are common to both processors. This has been the case for the
PIC12C508A. To write program for this chip we have suggested only using files
that are common to the PIC12C508A and PIC16F84. The program is created in the
PIC16F84 and when it is operating perfectly, a PIC12C508A is burnt.
This feature is not possible with the PIC16F628/PIC12C508A as none of the files
Thus our programming technique only works with a PIC16F84/PIC508A combination.
This chapter involves the process of migrating a program from a PIC16F84 to a PIC16F628.
To convert a program you need to change all the "file-names" or
"file-numbers" by adding 20h to each file. For example, file 0C becomes 2C,
file 1E becomes 3E, file 2F becomes 4F etc. Increment EVERY file by 20h
and the conversion is complete.
This means files 0C to 4F in a PIC16F84 program are now converted to 2C to 6F. Save
program as a PIC16F628 program and the conversion is complete.
The diagram below shows how the files from a PIC12C508A and PIC16F84 are moved
to suit a program for a PIC16F628.
If you want a program to be
suitable for both a PIC16F84 and PIC16F628, the only files you should use in a
PIC16F628 are 20h to 4Fh. This allows the program be the "back-ward
It all sounds very confusing but this is due to the files in each micro being
in a different location.
In this section of the PIC Programming Course, we are creating a program for a PIC16F628 and using files: 20h to
There are three uses for files in a program. They can be used for
general-purpose, delays or short-term storage.
Examples of "general-purpose" use can be found in most sub-routines,
"Short-term" storage uses a set of files to hold display values.
Any file can be used for any purpose and the idea of setting aside a file for
a particular purpose is part of the concepts in the PIC Programming Course.
Using this allocation for a file will remind you of its purpose and help you
understand a program when you are reviewing it at a later date.
The following table is a guide to the uses for the files: