When no bootloader is installed, all memory in the PIC can be utilized for user programs. That is 4 K for the 16F873 (0x000 to 0xFFF). Installing a bootloader means, that some part of the memory is occupied by the bootloader. The user can download his program into the remaining memory space. The bootloader in figure 1 occupy 256 words (0xF00 to 0xFFF), that is 6 % of the memory in a 16F873. The disadvantage of loosing 6 % memory is little compared to the advantage of fast program download and more friendly development routines.
Fig. 1. Memory map for 16F873
The first 4 words in the flash memory (0x000 to 0x003) contain a jump to the bootloader. The original 4 words are recognized during download and reallocated to the memory space of the bootloader. At boot time, the bootloader waits 200 ms for a download to begin. If no download is detected, the bootloader activates the user program, starting with the first 4 reallocated words and then jumping to the remaining user program.
Programming the bootloader
The bootloader package
at Shane Tolmie's website contains
all the software needed. I'll explain the procedure by giving an example
how to program the bootloader version 8.23 into a 16F873.
Choose the hex-file with the right crystal oscillator frequency and the desired download speed. I chose the file 30419-bootldr-v26-16F873-74-04Mhz-19200bps.hex for my 16F873 with 4 MHz oscillator and 19200 bps download.
Load the hex-file into the PIC-programmer and check the fuse settings before programming. I did not want the Low Voltage programming to be on (which it is in the hex-file). If the Low Voltage programming fuse is on, the PIC may become unstable during operation. My recommended fuse settings are shown in figure 2.
Fig. 2. Fuse settings for programming the bootloader
into a 16F873 with 4 MHz oscillator
The fuses selected when programming the bootloader can not be changed later by the downloaded user program. This is because the bootloader does not change the configuration word of the PIC.
Downloading a user program
A PIC downloader is contained in
the bootloader software package. The PIC downloader is used for transferring
the hex-file from your PC to the bootloader in the target chip. After having
programmed the bootloader into the PIC, the download procedure is tested
by downloading a suitable program into the PIC. An UART
test program for 16F873 and a description of a testboard
for 16F873 can be found elsewhere on this site. A test program is also
included in the bootloader software package.
Fig. 3. The PIC downloader writing to the target PIC
Load the hex-file into the PIC downloader (click Search or press F2), activate the downloader (click Write or press F4) and reset the PIC. The reset activates the bootloader and makes it listen for a new download on the serial port. The bootloader and PIC downloader shake hands and then the hex-file is downloaded. After a few seconds - viola - the new user program is running in the PIC.
If the downloaded program is going to use the serial port of the PIC, the PIC downloader must be closed and a terminal program (e.g. HyperTerminal) started. In my case, the PIC downloader and HyperTerminal both use COM2 - but never at the same time!
Memory reservation
Memory reservation is necessary to preserve the code space used by
the bootloader. For the 16F873, memory reservation is done like this in
CCS C (PCM 3.060):
#org 0x0F00,0x0FFF {} //16F873 bootloader resides here
Memory reservation in Microchip MPASM is done like this for a 16F873:
ORG 0x0000 ;User program starts here
...
ORG 0x0F00 ;Bootloader starts here
NOP
END
The last lines will generate a compiler error if the user program goes higher than 0x0EFF.
Hint #1
The bootloader reallocates the program
words between 0x000 and 0x003. This means, that the first 4 words in the
user program must contain a GOTO (long jump) pointing to the remaining
user program. This is usually the case when using a compiler, for example
the C-compiler PCM from CCS.
If you are using an assembler, for example MPASM from Microchip,
you must insert the GOTO manually as shown below:
ORG 0x000
GOTO Begin
ORG 0x004
Begin User
program starts here
Hint #2
If the PIC's serial port is used
by the downloaded program and you want to download a new program, the PIC
downloader might not be able to reach the PIC due to traffic on the port.
In that case, you must first press and hold the PIC's reset button while
clicking
Write (or press F4) on the PIC downloader.
The downloader will now start searching for the PIC. Releasing the PIC's
reset button will start the download.