0% found this document useful (0 votes)
93 views8 pages

Downloading Hex Files To Pic16F87X Picmicro Microcontrollers

Uploaded by

www.dokolov94
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
93 views8 pages

Downloading Hex Files To Pic16F87X Picmicro Microcontrollers

Uploaded by

www.dokolov94
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

M

Downloading HEX Files to PIC16F87X PICmicro® Microcontrollers


TB025

ACCESSING MEMORY
Author: Rodger Richey
Microchip Technology Inc. The read and write operations are controlled by a set of
Special Function Registers (SFRs). There are six
SFRs required to access the FLASH program memory:

INTRODUCTION • EECON1
• EECON2
The release of the PIC16F87X devices introduces the • EEDATA
first mid-range family of devices from Microchip Tech-
• EEDATH
nology that has the capability to read and write to inter-
nal program memory. This family has FLASH-based • EEADR
program memory, SRAM data memory and EEPROM • EEADRH
data memory. The FLASH program memory allows for The registers EEADRH:EEADR holds the 12-bit address
a truly reprogrammable system. Table 1 shows the fea- required to access a location in the 8K words of pro-
tures of the PIC16F87X family of devices. gram memory. The registers EEDATH:EEDATA are used
to hold the data values. When reading program mem-
ory, the EEPGD bit (EECON1<7>) must be set to indicate
to the microcontroller that the operation is going to be
on program memory. If the bit is cleared, the operation
will be performed on data memory at the address
pointed to by EEADR. The EEDATA register will hold the
data. The EECON1 register also has bits for write enable
and to initiate the read or write operation. There is also
a bit to indicate a write error has occurred, possibly due
to a reset condition happening while a write operation
is in progress. Figure 1 shows the register map for
EECON1.
The EECON2 register is not a physical register. Reading
it will result in all '0's. This register is used exclusively
in the EEPROM and FLASH write sequences. Listing 1
shows the code snippet to initiate a write operation on
the PIC16F87X devices.
TABLE 1 PIC16F87X FAMILY FEATURES

Key Features PIC16F873 PIC16F874 PIC16F876 PIC16F877


Operating Frequency DC - 20 MHz DC - 20 MHz DC - 20 MHz DC - 20 MHz
Resets POR, BOR POR, BOR POR, BOR POR, BOR
Flash Prog Memory (14-bit words) 4K 4K 8K 8K
Data Memory (bytes) 192 192 368 368
EEPROM Data Memory 128 128 256 256
Interrupts 13 14 13 14
I/O Ports Ports A,B,C Ports A,B,C,D,E Ports A,B,C Ports A,B,C,D,E
Timers 3 3 3 3
Capture/Compare/PWM modules 2 2 2 2
Serial Communications MSSP, USART MSSP, USART MSSP, USART MSSP, USART
Parallel Communications — PSP — PSP
10-bit Analog-to-Digital Module 5 input channels 8 input channels 5 input channels 8 input channels

 1998 Microchip Technology Inc. DS91025A-page 1


TB025
FIGURE 1: EECON1 REGISTER

R/W-x U-0 U-0 U-0 R/W-x R/W-0 R/S-0 R/S-0


EEPGD — — — WRERR WREN WR RD R= Readable bit
bit7 bit0 W= Writable bit
S= Settable bit
U= Unimplemented bit,
read as ‘0’
- n= Value at POR reset
bit 7: EEPGD: Program / Data EEPROM Select bit
1 = Accesses Program memory
0 = Accesses data memory
Note: This bit cannot be changed while a write operation is in progress.
bit 6:4: Unimplemented: Read as '0'
bit 3: WRERR: EEPROM Error Flag bit
1 = A write operation is prematurely terminated
(any MCLR reset or any WDT reset during normal operation)
0 = The write operation completed
bit 2: WREN: EEPROM Write Enable bit
1 = Allows write cycles
0 = Inhibits write to the EEPROM
bit 1: WR: Write Control bit
1 = initiates a write cycle.
The bit is cleared by hardware once write is complete.
The WR bit can only be set (not cleared) in software.
0 = Write cycle to the EEPROM is complete
bit 0: RD: Read Control bit
1 = Initiates an EEPROM read (read takes one cycle)
RD is cleared in hardware. The RD bit can only be set (not cleared) in software.
0 = Does not initiate an EEPROM read

HEX FILE FORMAT on the line. Divide this number by two to get the
number of words per line.
The data to be programmed into program memory will
be read into the microcontroller using one of its stan- • AAAA - is a four digit hexadecimal address repre-
dard interface modules: SPI, I2C™, USART, or PSP. senting the starting address of the data record.
Probably the simplest format to send the data to the Format is high byte first followed by low byte. The
microcontroller is in the standard HEX format used by address is doubled because this format only sup-
the Microchip development tools. The formats sup- ports 8-bits (to find the real PICmicro address,
ported are the Intel HEX Format (INHX8M), Intel Split simply divide the value AAAA by 2).
HEX Format (INHX8S), and the Intel HEX 32 Format • TT - is a two digit record type that will be '00' for
(INHX32). The most commonly used formats are the data records, '01' for end of file records and '04'
INHX8M and INHX32 and therefore are the only for- for extended address record (INHX32 only).
mats discussed in this document. Please refer to • HHHH - is a four digit hexadecimal data word. For-
Appendix A in the MPASM User's Guide (DS33014) for mat is low byte followed by high byte. There will
more information about HEX file formats. The differ- be BB/2 data words following TT.
ence between INHX8M and INHX32 is that INHX32 • CC - is a two digit hexadecimal checksum that is
supports 32-bit addresses using a linear address the two's complement of the sum of all the pre-
record. The basic format of the hex file is the same ceding bytes in the line record.
between both formats as shown below:
Since the PIC16F87X devices only have a maximum of
:BBAAAATTHHHH...HHHHCC 8K words, the linear address record '04' is ignored by
Each data record begins with a 9 character prefix and the routine. The HEX file is composed of ASCII char-
always ends with a 2 character checksum. All records acters 0 thorough 9 and A to F and the end of each line
begin with a ':' regardless of the format. The individual has a carriage return and linefeed. The downloader
elements are described below. code in the PICmicro microcontrollers must convert the
ASCII characters to binary numbers to be used for pro-
• BB - is a two digit hexadecimal byte count repre-
gramming.
senting the number of data bytes that will appear

DS91025A-page 2  1998 Microchip Technology Inc.


TB025
PICmicro Code The routine ASCII2HEX converts the input character to
a binary number. The routine does not provide any out
The sample downloader code does not specifically use
of range error checking for incoming characters. Since
one of the interface modules on the PIC16F87X device.
the only valid characters in a HEX file are the colon (:),
Instead, a routine called GetByte retrieves a single
the numbers 0 through 9 and the letters A through F,
character from the HEX file over the desired interface.
the routine can be highly optimized. It first subtracts 48
It is up to the engineer to write this routine around the
from the character value. For the ASCII numbers 0
desired interface. Another routine GetHEX8 calls Get-
through 9, this results in a value from 0 to 9. If the char-
Byte twice to form a two digit hexadecimal number.
acter is A through F, the result is a number greater than
One issue that arises is how many times to reprogram 15. The routine checks to see if the upper nibble of the
a location that does not program correctly. The sample result is 0. If not 0, then the original value was A
code provided simply exits the downloader routine and through F and the routine now subtracts an additional
stores a value of 0xFF in the WREG if a program memory 43 from the character resulting in the binary values 10
location does not properly program on the first attempt. through 15. The colon is not accounted for in this rou-
The engineer may optionally add code to loop several tine because the main part of the downloader code
times if this event occurs. uses it as a line sync.
Still another issue that is not specifically addressed in
the sample code is to prevent the downloader from LISTING 1: FLASH WRITE SEQUENCE
overwriting its own program memory address locations. bsfSTATUS,RP1 ; Bank2
The designer must add an address check to prevent bcfSTATUS,RP0
this situation from happening. movfAddrH,W ; Load address into
movwfEEADRH ; EEADRH:EEADR
Finally, the designer must account for situations where movfAddrL,W
the download of new code into the microcontroller is movwfEEADR
interrupted by an external event such as power failure bsfSTATUS,RP0 ; Bank3
or reset. The system must be able to recover from such bsfEECON1,EEPGD ; Set for Prog Mem
an event. This is not a trivial task, is very system bsfEECON1,RD ; read operation
dependent, and is therefore left up to the designer to bcfSTATUS,RP0 ; Bank2
provide the safeguards and recovery mechanisms. nop
movfEEDATA,W ; Data is read
Another error that could happen is a line checksum … ; user can now
error. If the calculated line checksum does not match movfEEDATH,W ; access memory
the line checksum from the HEX file, a value of 1 is …
returned in WREG. The part of the routine that calls the
downloader should check for the errors 0xFF (could not
program a memory location) and 1. If program memory
is programmed correctly and no errors have been
encountered, the downloader routine returns a 0 in
WREG to indicate success to the calling routine. Figure
2 shows the flowchart for the downloader routines.
Listing 2 shows the complete listing for the downloader
code.

 1998 Microchip Technology Inc. DS91025A-page 3


TB025
LISTING 2: HEX DOWNLOAD CODE WRITTEN FOR MPASM
list p=16f877
#include "c:\progra~1\mplab\p16f877.inc"

DownloadCode ;Uses USART to receive data from PC


banksel RCREG
DCStart
call GetByte
movlw ':' ;Wait for colon
subwf RCREG,W
btfss STATUS,Z
goto DCStart

call GetHex8 ;Read byte count


movwf ByteCount ;Store in register
movwf LineChecksum ;Store in line checksum
bcf STATUS,C
rrf ByteCount,F ;Divide byte counter by 2 to get words

call GetHex8 ;Read high byte of 16-bit address


movwf AddrH
addwf LineChecksum,F ;Add high byte to line checksum
call GetHex8 ;Read low byte of 16-bit address
movwf AddrL
addwf LineChecksum,F ;Add low byte to line checksum

call GetHex8 ;Read record type


movwf RecType
addwf LineChecksum,F ;Add to line checksum

DataRec ;Data reception


movf RecType,F ;Check for data record (0h)
btfss STATUS,Z
goto EndOfFileRec ;Otherwise check for EOF
DRLoop
movf ByteCount,F ;Check for bytecount = 0
btfsc STATUS,Z
goto DRCkChecksum ;If zero, goto checksum validation
call GetHex8 ;Read lower byte of data (2 characters)
movwf HexDataL ;Add received data to checksum
addwf LineChecksum,F
call GetHex8 ;Read upper byte of data (2 characters)
movwf HexDataH ;Add received data to checksum
addwf LineChecksum,F

WriteDataSequence ;Write sequence to internal prog. mem FLASH


banksel EEADRH
movf AddrH,W ;Write address to EEADRH:EEADR registers
movwf EEADRH
movf AddrL,W
movwf EEADR
movf HexDataH,W ;Write data to EEDATH:EEDATA registers
movwf EEDATH
movf HexDataL,W
movwf EEDATA
banksel EECON1 ;Write sequence
bsf EECON1,EEPGD ;Set EEPGD to indicate program memory
bsf EECON1,WREN ;Enable writes to memory
bcf INTCON,GIE ;Make sure interrupts are disabled
movlw 0x55 ;Required write sequence
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1,WR ;Start internal write cycle
nop

DS91025A-page 4  1998 Microchip Technology Inc.


TB025
nop
bcf EECON1,WREN ;Disable writes

banksel EECON1 ;Read sequence


bsf EECON1,EEPGD ;Set EEPGD to indicate program memory
bsf EECON1,RD ;Enable reads from memory
bcf STATUS,RP0
nop
movf EEDATH,W ;Compare memory value to HexDataH:HexDataL
subwf HexDataH,W
btfss STATUS,Z
retlw 0xff ;If upper byte not equal, return FFh
movf EEDATA,W ; to indicate programming failure
subwf HexDataL,W
btfss STATUS,Z
retlw 0xff ;If lower byte not equal, return FFh
; to indicate programming failure
incf AddrL,F ;Increment address for next iteration
btfsc STATUS,Z
incf AddrH,F
decf ByteCount,F ;Decrement byte count
goto DRLoop ;Go back to check for ByteCount = 0

DRCkChecksum ;Checksum verification


call GetHex8 ;Read in checksum
addwf LineChecksum,W ;Add to calculated checksum
btfss STATUS,Z ;Result should be 0
retlw 1 ; If not return 1 to indicate checksum fail
goto DCStart ;Do it again

EndOfFileRec ;End of File record (01h)


decf RecType,W ;If EOF record, decrement should = 0
btfss STATUS,Z
goto DCStart ;Not valid record type, wait for next :
call GetHex8 ;Read in checksum
addwf LineChecksum,W ;Add to calculated checksum
btfss STATUS,Z ;Result should be 0
retlw 1 ; If not return 1 to indicate checksum fail
retlw 0 ;Otherwise return 0 to indicate success

GetByte
; Insert your code here to retrieve a byte of data from
; the desired interface. In this case it is the USART on F877.
;clear CTS
; banksel PIR1
;GH4Waitbtfss PIR1,RCIF
; goto GH4Wait
;set CTS
nop
banksel RCREG
movf RCREG,W
return

GetHex8 ;This function uses the USART


call GetByte ;Read a character from the USART
call ASCII2Hex ;Convert the character to binary
movwf Temp ;Store result in high nibble
swapf Temp,F

call GetByte ;Read a character from the USART


call ASCII2Hex ;Convert the character to binary
iorwf Temp,F ;Store result in low nibble
movf Temp,W ;Move result into WREG
return

 1998 Microchip Technology Inc. DS91025A-page 5


TB025
ASCII2Hex ;Convert value to binary
movwf Temp1 ;Subtract ASCII 0 from number
movlw '0'
subwf Temp1,F
movlw 0xf0 ;If number is 0-9 result, upper nibble
andwf Temp1,W ; should be zero
btfsc STATUS,Z
goto ASCIIOut
movlw 'A'-'0'-0x0a ;Otherwise, number is A - F, so
subwf Temp1,F ;subtract off additional amount
ASCIIOut
movf Temp1,W ;Value should be 0 - 15
return

end

DS91025A-page 6  1998 Microchip Technology Inc.


TB025
FIGURE 2: FLOWCHART

Download Code
2 3

1 No Move AddrH:AddrL
RecType = 1? 1 into EEADRH:EEADR

Get a single byte Yes


GetByte Move HexDataH:HexDataL
Read Checksum and into EEDATH:EEDATA
add to LineChecksum
No
Character = :?
Set EEPGD and WREN bits

Yes Result = 0?
Yes No
Read ByteCount and Write 55h to EECON2
store in LineChecksum
Return with W = 0 Return with W = 1
Write AAh to EECON2
Divide by 2 to
get # of words

Set WR bit
Read AddrH and
add to LineChecksum
Wait for EE Write complete

Read AddrL and


add to LineChecksum
Set RD bit

Read RecType and


add to LineChecksum
No
Return with W = FFh EEDATH = HexDataH?

No Yes
Record type==0?
RecType 0? 2
No
Yes Return with W = FFh EEDATA = HexDataL?

Yes Yes
ByteCount = 0?

Continue with program


No

Read DataH and Read Checksum and


add to LineChecksum add to LineChecksum

Read DataL and


Yes
add to LineChecksum Result = 0? 1
No

3
Return with W = 1

Decrement ByteCount

 1998 Microchip Technology Inc. DS91025A-page 7


M
WORLDWIDE SALES AND SERVICE
AMERICAS AMERICAS (continued) ASIA/PACIFIC (continued)
Corporate Office Toronto Singapore
Microchip Technology Inc. Microchip Technology Inc. Microchip Technology Singapore Pte Ltd.
2355 West Chandler Blvd. 5925 Airport Road, Suite 200 200 Middle Road
Chandler, AZ 85224-6199 Mississauga, Ontario L4V 1W1, Canada #07-02 Prime Centre
Tel: 602-786-7200 Fax: 602-786-7277 Tel: 905-405-6279 Fax: 905-405-6253 Singapore 188980
Technical Support: 602 786-7627 Tel: 65-334-8870 Fax: 65-334-8850
Web: http://www.microchip.com ASIA/PACIFIC Taiwan, R.O.C
Atlanta Hong Kong Microchip Technology Taiwan
Microchip Technology Inc. Microchip Asia Pacific 10F-1C 207
500 Sugar Mill Road, Suite 200B RM 3801B, Tower Two Tung Hua North Road
Atlanta, GA 30350 Metroplaza Taipei, Taiwan, ROC
Tel: 770-640-0034 Fax: 770-640-0307 223 Hing Fong Road Tel: 886-2-2717-7175 Fax: 886-2-2545-0139
Boston Kwai Fong, N.T., Hong Kong
Microchip Technology Inc.
Tel: 852-2-401-1200 Fax: 852-2-401-3431 EUROPE
5 Mount Royal Avenue India United Kingdom
Marlborough, MA 01752 Microchip Technology Inc. Arizona Microchip Technology Ltd.
Tel: 508-480-9990 Fax: 508-480-8575 India Liaison Office 505 Eskdale Road
Chicago No. 6, Legacy, Convent Road Winnersh Triangle
Bangalore 560 025, India Wokingham
Microchip Technology Inc.
Tel: 91-80-229-0061 Fax: 91-80-229-0062 Berkshire, England RG41 5TU
333 Pierce Road, Suite 180
Japan Tel: 44-1189-21-5858 Fax: 44-1189-21-5835
Itasca, IL 60143
Tel: 630-285-0071 Fax: 630-285-0075 Microchip Technology Intl. Inc. France
Dallas Benex S-1 6F Arizona Microchip Technology SARL
3-18-20, Shinyokohama Zone Industrielle de la Bonde
Microchip Technology Inc.
Kohoku-Ku, Yokohama-shi 2 Rue du Buisson aux Fraises
14651 Dallas Parkway, Suite 816
Kanagawa 222-0033 Japan 91300 Massy, France
Dallas, TX 75240-8809
Tel: 81-45-471- 6166 Fax: 81-45-471-6122 Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79
Tel: 972-991-7177 Fax: 972-991-8588
Dayton Korea Germany
Microchip Technology Korea Arizona Microchip Technology GmbH
Microchip Technology Inc.
168-1, Youngbo Bldg. 3 Floor Gustav-Heinemann-Ring 125
Two Prestige Place, Suite 150
Samsung-Dong, Kangnam-Ku D-81739 Müchen, Germany
Miamisburg, OH 45342
Seoul, Korea Tel: 49-89-627-144 0 Fax: 49-89-627-144-44
Tel: 937-291-1654 Fax: 937-291-9175
Tel: 82-2-554-7200 Fax: 82-2-558-5934 Italy
Detroit
Shanghai Arizona Microchip Technology SRL
Microchip Technology Inc.
42705 Grand River, Suite 201 Microchip Technology Centro Direzionale Colleoni
Novi, MI 48375-1727 RM 406 Shanghai Golden Bridge Bldg. Palazzo Taurus 1 V. Le Colleoni 1
Tel: 248-374-1888 Fax: 248-374-2874 2077 Yan’an Road West, Hong Qiao District 20041 Agrate Brianza
Shanghai, PRC 200335 Milan, Italy
Los Angeles Tel: 86-21-6275-5700 Fax: 86 21-6275-5060 Tel: 39-39-6899939 Fax: 39-39-6899883
Microchip Technology Inc.
18201 Von Karman, Suite 1090 9/29/98
Irvine, CA 92612
Tel: 714-263-1888 Fax: 714-263-1338
Microchip received ISO 9001 Quality
New York
System certification for its worldwide
Microchip Technology Inc.
headquarters, design, and wafer
150 Motor Parkway, Suite 202
Hauppauge, NY 11788 fabrication facilities in January, 1997.
Tel: 516-273-5305 Fax: 516-273-5335 Our field-programmable PICmicro®
8-bit MCUs, Serial EEPROMs,
San Jose
related specialty memory products
Microchip Technology Inc.
2107 North First Street, Suite 590
and development systems conform
San Jose, CA 95131 to the stringent quality standards of
Tel: 408-436-7950 Fax: 408-436-7955 the International Standard
Organization (ISO).

All rights reserved. © 1998 Microchip Technology Incorporated. Printed in the USA. 10/98 Printed on recycled paper.

Information contained in this publication regarding device applications and the like is intended for suggestion only and may be superseded by updates. No representation or warranty is given and no
liability is assumed by Microchip Technology Incorporated with respect to the accuracy or use of such information, or infringement of patents or other intellectual property rights arising from such use
or otherwise. Use of Microchip’s products as critical components in life support systems is not authorized except with express written approval by Microchip. No licenses are conveyed, implicitly or
otherwise, under any intellectual property rights. The Microchip logo and name are registered trademarks of Microchip Technology Inc. in the U.S.A. and other countries. All rights reserved. All other
trademarks mentioned herein are the property of their respective companies.

DS91025A-page 8  1998 Microchip Technology Inc.

You might also like