Home
Assembler/Linker/Librarian User's Guide
Contents
1. character Description Value a Bell alert character 07 b Backspace character 08 Form feed character oc n New line character OA Vr Carriage return character 0D t Horizontal tab character 09 v Vertical tab character OB Backslash 5C Question mark character 3F Single quote apostrophe 27 Nr Double quote character 22 000 Octal number zero Octal digit Octal digit xHH Hexadecimal number 3 2 2 Code Examples See the examples below for the object code generated by different statements involving strings 7465 7374 696E dw testing output string one n 6720 6F75 7470 7574 2073 7472 696E 6720 6F6E 650A define str testing output string two B061 movlw a 7465 7374 696E data testing first output string 6720 6669 7273 7420 6F75 7470 7574 2073 7472 696E 6700 DS33014K page 38 2009 Microchip Technology Inc Expression Syntax and Operation 3 3 RESERVED WORDS AND SECTION NAMES You may not use the following words for label constant or variable names e Directives see Chapter 4 Directives e Instructions see Appendix A Instruction Sets e The word main when using the assembler with MPLAB IDE Do not use a main label that cannot be reached by a simple reset and run for example a data label named main or a routine named main that will only be accessed under certain conditions as
2. 13 MPASM Assembler Overview 23 MPASMCXC ir E 167 MPASMWIN EXE 9 23 33 MPLAB C18 C Compiler 12 15 MPLAB IDE Build Options Dialog MPASM Assembler Tab 13 MPASM C17 C18 Suite Tab assaannaeneenaneean 16 MPLAB C17 Tab 14 MPLAB C18 Tab 15 MPLINK Uinkerf ab 16 MPLIB Librarian COvervlew 235 MPLIB Object Librarian s sesssnessneeeeeeeeeneeeeeee 12 16 ll 9 MPLINK Linker Overview 171 MPLINK Object Linker 12 16 ul lt 9 N noexpand iii 98 lee 98 NOT lOgical s e ee hs 40 O Object Files tement 32 174 237 Object File Directives oooooooncccnionncicocccnocnnccinnccnnnns 45 ACCESS OVI asthe Sa aie ete SS 46 A EE 48 banksel oia mnt ne 50 orale E 54 code A A AN 55 A aia a 78 ODA css rene amet ni fs 82 data retiens nun an ant traque 82 A LR A dues 84 Pagasarri 102 DS33014K page 286 O 2009 Microchip Technology Inc PAGES Wii elles ie ae 103 Ud WEE 110 data acusan arca eames 111 Udala Oia tc 113 Ale EE EE 115 Object Files Precompiled ooooococccnnccnncnnconnccccnnos 12 Object Module Generating cooooncccnnccnncinnncnncncnnn 148 Operands wines Sain ieee 28 Operators Arith matic 40 OR logica eege ier VE 41 gl DEE 99 P le Henri ten oraa a ea MA eeta Ee As ite Sete 101
3. 13 6 1 2 C COMPILER LINKER SCRIPT The sections of modified PIC18F8722 C compiler generic linker script file shown below demonstrates suggested modifications for external memory applications First the CODEPAGE statement is added CODEPAGE NAME xsram START 0x020000 END 0x1FFFFF PROTECTED 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 Then the external memory section is added IFDEF _CRUNTIME SECTION NAME CONFIG ROM config SECTION NAME SRAM BASE ROM xsram IFDEF _DEBUGDATASTART STACK SIZE 0x100 RAM gpr13 HELSE STACK SIZE 0x100 RAM gpr14 FI FI 13 6 1 3 C COMPILER SOURCE CODE This is a simple code example showing the use of pragma romdata for declaration of external memory and the use of C pointers for accessing this memory region If you are using MPLAB IDE to run this example remember to enable external memory Configure gt External Memory to see this extra memory in the Program Memory window include lt p18F8722 h gt Microprocessor mode a memory mode that supports external memory pragma config MODE MP pragma romdata SRAM BASE Assigns this romdata space at 0x20000 rom far char sram Declare an array at starting address pragma code void main void rom far char dataPtr Create a
4. MICROCHIP MPASM Assembler MPLINK Object Linker MPLIB Object Librarian User s Guide 2009 Microchip Technology Inc DS33014K Note the following details of the code protection feature on Microchip devices Microchip products meet the specification contained in their particular Microchip Data Sheet Microchip believes that its family of products is one of the most secure families of its kind on the market today when used in the intended manner and under normal conditions There are dishonest and possibly illegal methods used to breach the code protection feature All of these methods to our knowledge require using the Microchip products in a manner outside the operating specifications contained in Microchip s Data Sheets Most likely the person doing so is engaged in theft of intellectual property Microchip is willing to work with the customer who is concerned about the integrity of their code Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code Code protection does not mean that we are guaranteeing the product as unbreakable Code protection is constantly evolving We at Microchip are committed to continuously improving the code protection features of our products Attempts to break Microchip s code protection feature may be a violation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your software or other copyri
5. Delay 1 Routine Timer0 delay loop PRR RRR kkk k kkk kkk k kkk kkk k k k kk k k k k k k k k kkk k k k k Delay1 movlw OxFO Set Timer0 value movw TMRO Ox00 longest delay OxFF shortest delay clrf DFLAG bsf DFLAG DFLO Set flag bit banksel OPTION_REG Select Option Reg Bank 1 bc OPTION REG TOCS Start Timer0 banksel DFLAG Select DFLAG Bank 0 TLoop Wait for overflow OxFF gt 0x00 btfsc DFLAG DFLO After interrupt DFLO O goto TLoop return Use Timer 0 to create Delay 1 First give the timer an initial value Then enable the timer and wait for it to overflow from OxFF to 0x00 This will generate an interrupt which will end the delay See Section 5 3 7 Interrupts for more information 2009 Microchip Technology Inc DS33014K page 125 Assembler Linker Librarian User s Guide p RRR RRR RR RK RRR K KEK KK KEK KEK KKK KKK EK KKK KKK KKK KKK Delay 2 Routine Decrement delay loop PRR RRR RRR RRR KERR kkk kkk kkk KEK kkk kkk kk kkk k kk k decdly code 0x1000 Page 2 Place Delay2 routine at program memory location 0x1000 on page 2 See Section 5 3 5 Program Memory CODE Sections and Paging for more on code This code was placed on a page other than 0 to demonstrate how a program functions across pages Delay2 movlw OxFF Set DTEMP value movwt DTEMP Ox00 shortest delay OxFF longest delay DLoop Use a simple countdown to decfsz DTEMP F Create delay goto D
6. Assuming default bit value for s O 2009 Microchip Technology Inc DS33014K page 263 Assembler Linker Librarian User s Guide TABLE A 19 PIC18 LITERAL OPERATIONS Hex Mnemonic Description Function OFkk ADDLW kk Add literal to WREG WREG kk gt WREG OBkk ANDLW kk AND literal with WREG WREG AND kk gt WREG 09kk IORLW kk Inclusive OR literal with WREG WREG OR kk gt WREG EErk LFSR r kk Move literal 12 bit 2nd word kk FSRr FOkk to FSRr 1st word 010k MOVLB k Move literal to BSR lt 3 0 gt kk BSR OEkk MOVLW kk Move literal to WREG kk gt WREG ODkk MULLW kk Multiply literal with WREG WREG kk PRODH PRODL OCkk RETLW kk Return with literal in WREG kk gt WREG 08kk SUBLW kk Subtract WREG from literal kk WREG gt WREG OAkk XORLW kk Exclusive OR literal with WREG WREG XOR kk gt WREG TABLE A 20 PIC18 MEMORY OPERATIONS Hex Mnemonic Description Function 0008 TBLRD Table Read Prog Mem TBLPTR gt TABLAT 0009 TBLRD Table Read with post increment Prog Mem TBLPTR gt TABLAT TBLPTR 1 gt TBLPTR 000A TBLRD Table Read with post decrement Prog Mem TBLPTR gt TABLAT TBLPTR 1 gt TBLPTR 000B TBLRD Table Read with pre increment TBLPTR 1 gt TBLPTR Prog Mem TBLPTR gt TABLAT 000 TBLWT Table Write TABLAT gt Prog Mem TBLPTR 000D TBLWT Table Write with post increment TABLAT
7. stitle sub_text subtitl sub text 4 60 2 Description and Usage sub text is an ASCII string enclosed in double quotes 60 characters or less in length This directive establishes a second program header line for use as a subtitle in the listing output This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation 4 60 3 See Also list title 4 60 4 Simple Example subtitle diagnostic section 2009 Microchip Technology Inc DS33014K page 109 Assembler Linker Librarian User s Guide 4 61 title SPECIFY PROGRAM TITLE 4 61 1 Syntax title title text 4 61 2 Description and Usage title text is a printable ASCII string enclosed in double quotes It must be 60 characters or less This directive establishes the text to be used in the top line of each page in the listing file This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation 4 61 3 See Also list subtitle 4 61 4 Simple Example title operational code rev 5 0 4 62 udata BEGIN AN OBJECT FILE UNINITIALIZED DATA SECTION 4 62 1 Syntax label udata RAM address 4 62 2 Description This directive declares the beginning of a section of uninitialized data If 1abe1 is not specified the section is named udata The starting address is initialized to the sp
8. where cmdfile is the name of the linker command file to include EXAMPLE 11 4 INCLUDE EXAMPLE To include the linker command file named mylink 1kr the following line should be added to the linker command file INCLUDE mylink 1lkr 11 4 LINKER SCRIPT CAVEATS Some linker script caveats e You may need to modify the linker script files included with MPLINK linker before using them e You may wish to reconfigure stack size to use MPLAB C18 with MPLINK linker e You will need to split up memory pages if your code contains goto or call instructions without pagesel pseudo instructions directives e You must not combine data memory regions when using MPLINK linker with MPLAB C18 C compiler MPLAB C18 requires that any section be located within a single bank See MPLAB C18 documentation for directions on creating variables larger then a single bank 11 5 MEMORY REGION DEFINITION The linker script describes the memory architecture of the PIC1X MCU This allows the linker to place code in available ROM space and variables in available RAM space Regions that are marked PROTECTED will not be used for general allocation of program or data Code or data will only be allocated into these regions if an absolute address is specified for the section or if the section is assigned to the region using a SECTION directive in the linker script file 11 5 1 Defining RAM Memory Regions The DATABANK SHAREBANK and ACCESSBANK directives are used
9. DS33014K page 201 Assembler Linker Librarian User s Guide Loop goto Loop PRR RRR RRR KKK KEK KKK KK RR KERR KR KKK KR KKK KK KERR KEK KKK RRR KHER KK kkk kk kkk kkk RR RR k kkk kkk k End of program END 13 3 3 Building the Application To build the application see Section 13 2 How to Build the Sample Applications Then to continue development with MPLAB IDE you could place the element variables in a Watch window to see their values remembering to change element5 to a 16 bit value Properties dialog Watch Properties tab _ __ _ _ _ _ _ __ _ __ _ _ _ _ _ __ _ _ _ _ _ _ __ _ _ _ _ _ _ COCO DS33014K page 202 O 2009 Microchip Technology Inc Sample Applications 13 4 SAMPLE APPLICATION 2 PLACING CODE AND SETTING CONFIG BITS This example is for the PIC18F8720 in extended microcontroller mode The file eeprom2 asm places interrupt handling code at 0x20000 external memory The assembly code directive INTHAND CODE places the code that follows into the INTHAND section The modified linker script file eeprom 1kr maps the INTHAND section to the CODE region that begins at 0x20000 The file eeprom1 c has a 0x1000 element data table in program memory in the same code page with the interrupt handlers The data table is defined in C using the pragma romdata directive to place the table in a section called DATTBL The modified linker script file maps the DATTBL section to the CODE region that
10. Help OK Cancel Apply 2 Inthe dialog under Registered Tools select Microchip MPASM Toolsuite Click the to expand 3 Select Executables Click the to expand 4 Select MPASM Assembler mpasmwin exe Under Location a path to the executable file should be displayed If no path is displayed enter one or browse to the location of this file The default location is listed in MPLAB IDE and Tools Installation 5 Select MPLINK Object Linker mplink exe Under Location a path to the executable file should be displayed If no path is displayed enter one or browse to the location of this file The default location is listed in MPLAB IDE and Tools Installation 6 Select MPLIB Object Librarian mplib exe Under Location a path to the executable file should be displayed If no path is displayed enter one or browse to the location of this file The default location is listed in MPLAB IDE and Tools Installation 7 Click OK DS33014K page 10 O 2009 Microchip Technology Inc PIC1X MCU Language Tools and MPLAB IDE MPLAB IDE PROJECTS A project in MPLAB IDE is a group of files needed to build an application along with their associations to various build tools Below is a generic MPLAB IDE project FIGURE 2 PROJECT RELATIONSHIPS MPLAB IDE Project fee MPASM ASSEMBLER List and object files MPLIB libraria
11. Options MICROCHIP Radix r Warning Level pHex Output gt Generated Files Default Default Default MERO FO C Hexadecimal C All Messages C INHX8M F List File C Decimal C Warnings and Errors C INHX8S IT Cross Reference File C Octal C Errors Only C INHX32 T Object File Macro Expansion E M Case Sensitive Default Default y 7 On Tab Size g 2 cor IT Extended Mode Extra Options X Exit M Save Settings on Exit Help Select a source file by typing in the name or using the Browse button Set the various options as described below Default options are read from the source file Then click Assemble to assemble the source file Note When MPASM assembler for Windows is invoked through MPLAB IDE this options screen is not available Use the MPASM Assembler tab of the Build Options dialog in MPLAB IDE Project gt Build Options gt Project to set options Option Description Radix Override any source file radix settings Reference Section 4 43 list Listing Options Section 4 56 radix Specify Default Radix Section 3 4 Numeric Constants and Radix Warning Level Override any source file message level settings Reference Section 4 48 messg Create User Defined Message Hex Output Override any source file hex file format settings Reference Section 1 7 5 Hex File Formats hex hxl hxh Generated Files Enable disable various o
12. define EMULATED Comment out with if actual part INIT ifdef EMULATED If emulator used add lines of movlw 0xb0 initialization code to work around movwf Oxf9c table read limitation Hendif 4 41 ifndef EXECUTE IF SYMBOL HAS NOT BEEN DEFINED 4 41 1 Syntax Preferred ifndef label Supported ifndef label 4 41 2 Description If label has not been previously defined or has been undefined by issuing an undefine directive then the code following the directive will be assembled Assembly will be enabled or disabled until the next matching else or endif directive is encountered 4 41 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is not an instruction but used to control how code is assembled not how it behaves at run time Use this directive for removing or adding code during debugging without the need to comment out large blocks of code 4 41 4 See Also define undefine else endif ifdef 4 41 5 Simple Example define testingl set testing on undefine testingl set testing off ifndef testing if not in testing mode execute this path endif end end of source 2009 Microchip Technology Inc DS33014K page 89 Assembler Linker Librarian User s Guide 4 41 6 Application Example ifndef include p16f877a inc define UsePORTB Comment out with to use PO
13. FI FI IFDEF DEBUGCODESTART CODEPAGE NAME page CODEPAGE NAME debug ELSE CODEPAGE NAME page FI CODEPAGE NAME idlocs CODEPAGE NAME config CODEPAGE NAME devid CODEPAGE NAME eedata IFDEF _EXTENDEDMODE DATABANK NAME gpre ELSE START 0x0 START _DEBUGCODESTART START 0x0 START 0x200000 START 0x300000 START 0x3FFFFE START 0xF00000 START 0x0 ACCESSBANK NAME accessram START 0x0 FI DATABANK NAME gpr0 START 0x60 END _CODEEND END _CEND END 0x1FFFF END 0x200007 END 0x30000D END 0x3FFFFF END 0xF003FF END 0x5F END 0x5F END 0xFF PROTECTE PROTECTE PROTECTE PROTECTE 2009 Microchip Technology Inc DS33014K page 189 Assembler Linker Librarian User s Guide DATABANK NAME gpr1 DATABANK NAME gpr2 DATABANK NAME gpr3 DATABANK NAME gpr4 DATABANK NAME gpr5 DATABANK NAME gpr6 DATABANK NAME gpr7 DATABANK NAME gpr8 DATABANK NAME gpr9 DATABANK NAME gpr10 DATABANK NAME gpr11 DATABANK NAME gpr12 DATABANK NAME gpr13 IFDEF _DEBUGDATASTART DATABANK NAME gpr14 DATABANK NAME dbgspr ELSE no debug DATABANK NAME gpr14 FI DATABANK NAME gpr15 ACCESSBANK NAME accesssfr IFDEF _CRUNTIME SECTION NAME CONFIG IFDEF DEBUGDATASTART START 0x100 END 0x1FF START 0x200 END 0x2FF START 0x300 END 0x3FF START 0x400 END 0x4FF START 0x500 END 0x5FF START 0x600 END 0x6FF START 0x700 END
14. Off Enable Disable quiet mode suppress screen output rradix Hex Defines default radix where radix is one of HEX DEC OCT See Section 4 43 list Listing Options or Section 4 56 radix Specify Default Radix for more information t 8 Set the size of tabs in the list file See Section 1 7 3 Listing File Ist for more information wvalue 0 Set message level where value is one of 0 1 2 0 all messages 1 errors and warnings 2 errors only See Section 4 48 messg Create User Defined Message for more information x path Off Enable Disable Set Path for cross reference file x Enable x Enable x Disable x path Enable specify path See Section 1 7 6 Cross Reference File xrf for more information yl Disabled Enable Disable extended instruction set y Enable y Enable y Disable Can only be enabled for processors which support the extended instruction set and for the generic processor PIC18CXXX y overrides LIST PE type directive see Section 4 43 list Listing Options Default is dependent on processor selected DS33014K page 36 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 3 Expression Syntax and Operation 3 1 INTRODUCTION Various expression formats syntax and operations used by MPASM assembler are described here Topics covered in this chapter e
15. Part 1 MPASM Assembler Chapter 1 MPASM Assembler Overview mm ssssnnennennnnnees 23 Chapter 2 Assembler Interfaces innnnreennnes 33 Chapter 3 Expression Syntax and Operation 37 Chapter 4 DIFC CHIVES andara lib 43 Chapter 5 Assembler Examples Tips and Tricks ooooccccncccccccccnnnnananannnnnnnnnnnannnns 121 Chapter 6 Relocatable Objects ccccccssseeeceeeeseseeeeeeeeeeeeeeeeeeceeeeeeeeeeseeeeeeeeeeeeneees 141 Chapter 7 Macro Language ss nnnennnnneeennnnnne 151 Chapter 8 Errors Warnings Messages and Limitations s s1nnsssunnnnnnnnnnnnnnne 155 O 2009 Microchip Technology Inc DS33014K page 21 Assembler Linker Librarian User s Guide NOTES DS33014K page 22 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 1 MPASM Assembler Overview 1 1 INTRODUCTION An overview of the MPASM assembler and its capabilities is presented Topics covered in this chapter e MPASM Assembler Defined e How MPASM Assembler Helps You e Assembler Migration Path e Assembler Compatibility Issues e Assembler Operation e Assembler Input Output Files 1 2 MPASM ASSEMBLER DEFINED The MPASM assembler the assembler is a command line or Windows based PC application that provides a platform for developing assembly language code for Microchip s PIC1X microcontroller MCU families The executable version of the assembler is mpasmwin exe Use th
16. goto start Jump to an address whose label is start add MACRO numl num2 add is a macro The values of numl and num2 must be passed to this macro DS33014K page 94 O 2009 Microchip Technology Inc Directives movlw numi Load W register with a literal value assigned to the label numl movwf result Load W register to an address location assigned to the label result movlw num2 Load W register with a literal value assigned to the label num2 addwf result Add W register with the memory location addressed by result and load the result back to result endm end of add MACRO ORG 0x0010 Main program starts at 10H start The label start is assigned an address 10H add 100 90 Call add MACRO with decimal numbers 100 and 90 assigned to numl and num2 labels respectively 100 and 90 will be added and the result will be in result end 446 maxram DEFINE MAXIMUM RAM LOCATION Note maxram is preceded by two underline characters 4 46 1 Syntax __maxram expr 4 46 2 Description The maxramand _badram directives together flag accesses to unimplemented registers _ maxram defines the absolute maximum valid RAM address and initializes the map of valid RAM addresses to all addresses valid at and below expr expr must be greater than or equal to the maximum page 0 RAM address and less than 1000H This directive is designed for use with
17. how to write 0x55CC to first word location in external SRAM memory movlw upper SRAM BASE ADDRS movwf TBLPTRU movlw high SRAM BASE ADDRS movwf TBLPTRH movlw low SRAM BASE ADDRS movwf BLPTRL movlw OxCC movwf TABLAT tblwt Writes 0xCC to byte location 0x020000 Increments table pointer to next location movlw 0x55 movwft TABLAT tblwt Write 0x55 to byte location 0x020001 END 2009 Microchip Technology Inc DS33014K page 221 Assembler Linker Librarian User s Guide NOTES DS33014K page 222 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 14 Errors Warnings and Common Problems 14 1 INTRODUCTION Error messages and warning messages are produced by the MPLINK linker These messages always appear in the listing file directly above each line in which the error occurred Common problems and limitations of the linker tool are also listed here Topics covered in this chapter e Linker Parse Errors e Linker Errors e Linker Warnings e COFF File Errors e Other Errors Warnings and Messages e Common Problems 14 2 LINKER PARSE ERRORS MPLINK linker parse errors are listed alphabetically below Could not open cmdfile A linker command file could not be opened Check that the file exists is in the current search path and is readable Illegal lt filename gt for FILES in cmdfile line An object or lib
18. 0 E EE 59 e EE 60 OD ito ee eee ese eee 62 A An 64 buin ad e 67 A 67 Mi e A lab spam ne 68 lee EEN 69 Pill ei cee toe tin ne Rives E At oct ee bet 80 EE gege be eege elen 106 Data Section Access Uninitialized 111 uf UE neia Mist intl 82 Initialized Access 84 Overlayed Uninitialized A 113 Shared Uninitialized 115 Uninitialized 110 Data Initalzed e rea ai 194 DATABANK ue 183 186 AD Paste et rent cent o tdo 62 0 ee ee 64 Debug Command Une 189 MPLAB IDES sis dut nu ae 181 Decre diia coved 41 el 65 Delete a Substitution Label n000nnnnnnnnennneennnne 116 RI 27 Directives Aesembler 43 Directives Linker 182 Documentation Conventions a 4 Ee EE 1 o EE 67 e ru EE 67 Co EE EE 37 68 E EEPROM ce 203 EEPROM Data Byte cocos comicas 64 Eight by Eight Muftphy AAA 153 CIS iii e occ ee ses tn us 68 21010 E 69 TRS EP da arab 69 GG EE 70 Illu RE 70 21010 UE 71 Environment Variables 198 199 EU res iaa eae 71 EH 72 Error Fleur danna 30 155 GEO eelere eege le RE 73 Errors Assembler 155 COPE ane nt er Lin te te umo 230 COFF to COD Converter 247 Librarian bDaree 241 Ek e ra o 225 Linker Paraiso 223 Escape Sequences ccccoccconccconcnonncoonnnonanonnna
19. A macro is a sequence of instructions that can be inserted in the assembly source code by using a single macro call The macro must first be defined then it can be referred to in subsequent source code Arguments are read in from the source line stored in a linked list and then counted The maximum number of arguments would be the number of arguments that would fit on the source line after the label and macro terms Therefore the maximum source line length is 200 characters A macro can call another macro or may call itself recursively The maximum number of nested macro calls is 16 Please refer to Chapter 7 Macro Language for more information 4 45 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation 4 45 4 See Also endm exitm local 4 45 5 Simple Example Define macro Read Read macro device buffer count movlw device movwf ram_20 movlw buffer buffer address movwf ram_21 movlw count byte count call sys 21 subroutine call endm Use macro Read Read 0x0 0x55 0x05 4 45 6 Application Example macro endm This code demonstrates the utility of macro directive which is used to define a macro include p16f877a inc Include standard header file for the selected device result equ 0x20 Assign value 20H to label jresult ORG 0x0000 The following code will be placed jin reset address 0
20. Bits b Bit address within an 8 bit file register 0 to 7 d Destination select bit d 0 store result in WREG d 1 store result in file register f default i Table pointer control i 0 do not change i 1 increment after instruction execution s Destination select bit s 0 store result in file register f and WREG s 1 store result in file register f default t Table byte select t 0 perform operation on lower byte t 1 perform operation on upper byte d Bit values as opposed to Hex value Named Registers BSR Bank Select Register Used to select the current RAM bank OPTION OPTION Register PCL Program Counter Low Byte PCH Program Counter High Byte PCLATH Program Counter High Byte Latch PCLATU Program Counter Upper Byte Latch PRODH Product of Multiply High Byte PRODL Product of Multiply Low Byte TBLATH Table Latch TBLAT High Byte TBLATL Table Latch TBLAT Low Byte TBLPTR 16 bit Table Pointer TBLPTRH TBLPTRL Points to a Program Memory location WREG Working register accumulator Named Bits C DC Z OV N ALU Status bits Carry Digit Carry Zero Overflow Negative TO Time out bit PD Power down bit GIE Global Interrupt Enable bit s Named Device Features PC Program Counter TOS Top of Stack WDT Watchdog Timer Misc Descriptors Contents gt Assigned to lt gt Register bit field A _ _ a_y _ ____ _ _ _ _ _ _ _ _ _ __ _ _ __ __ _ _ OO DS33014K page 252 O 2009 Mic
21. TT A two digit record type that will always be 00 except for the end of file record which will be 01 HH A two digit hexadecimal data byte presented in low byte high byte combinations cc A two digit hexadecimal checksum that is the two s complement of the sum of all preceding bytes in the record DS33014K page 30 2009 Microchip Technology Inc MPASM Assembler Overview EXAMPLE 1 3 INHX8M file name hex 1000000000000000000000000000000000000000F0 0400100000000000EC 100032000000280040006800A800E800C80028016D 100042006801A9018901EA01280208026A02BF02C5 10005200E002E80228036803BF03E803C8030804B8 1000620008040804030443050306E807E807FF0839 06007200FFO8FF08190A57 00000001FF 1 7 5 2 INTEL SPLIT HEX FORMAT The split 8 bit file format produces two output files hx1 and hxh The format is the same as the normal 8 bit format except that the low bytes of the data word are stored inthe hx1 file and the high bytes of the data word are stored in the hxh file and the addresses are divided by two This is used to program 16 bit words into pairs of 8 bit EPROMs one file for low byte one file for high byte EXAMPLE 1 4 INHX8S file name hxl 0A0000000000000000000000000000F6 1000190000284068A8E8C82868A989EA28086ABFAA 10002900E0E82868BFE8C8080808034303E8E8FFDO 03003900FFFF19AD 00000001FF file name hxh 0A0000000000000000000000000000F6 1000190000000000000000010101010102020202CA 10002900020203030303030404
22. a relocatable code section since no absolute address is given along with directive CODE PRR RRR RRR KERR KERR KKK RARA RARE RARA kkk k kkk kkk k kkk kkk k kk k sub asm PRR RRR RRR RR RR RARA REA kkk kkk kk kkk kkk kkk k kkk kkk k kk k include p16f877a inc GLOBAL delay EXTERN delay_value PGM CODE delay decfsz goto return delay_value 1 delay end Include standard header file for the selected device The variable delay declared GLOBAL in this module is included in an EXTERN directive in the module main asm The variable delay value declared EXTERN in this module is declared GLOBAL in the module main asm O 2009 Microchip Technology Inc DS33014K page 79 Assembler Linker Librarian User s Guide 4 34 fill SPECIFY PROGRAM MEMORY FILL VALUE 4 34 1 Syntax label fill expr count 4 34 2 Description Generates count occurrences of the program word or byte PIC18 devices expr If bounded by parentheses expr can be an assembler instruction 4 343 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation Note For relocatable code do not use a symbol in another section in the expression expr This directive is often used to force known data into unused program memory This helps ensure that if code ever branches to an unused area at run time a fail safe
23. endw endm start test mac 5 end 4 68 6 Application Example while endw This example shows the usefulness of directive while to perform a loop while a certain condition is true This directive is used with the endw directive include p16f877a inc Include standard header file for the selected device variable i Define the symbol i asa Variable mydata udata 0x20 Allocate RAM for labels reg hi res 1 reg_hi and reg_lo reg_lo res 1 RST CODE 0x0 The code section named RST is placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start start shift right macro by n Beginning of a macro which shifts register data n times Code length generated after assembly varies depending upon the value of parameter by n 2009 Microchip Technology Inc DS33014K page 119 Assembler Linker Librarian User s Guide 1 0 initialize variable i while i lt by n Following 3 lines of assembly code are repeated as long as i lt by n Up to 100 lines of codes are allowed inside a while loop bcf STATUS C Clear carry bit rrf reg hi F reg hi and reg lo contains rrf reg_lo F 16 bit data which is rotated right through carry i 1 Increment loop counter i i cannot increment to more than 255 decimal endw End while loop The loop will break here after i by_n endm End of shift right
24. expr 4 5 2 Description The maxromand _badromdirectives together flag accesses to unimplemented registers badrom defines the locations of invalid ROM addresses This directive is designed for use with the maxrom directive A maxrom directive must precede any __badrom directive Each expr must be less than or equal to the value specified by maxrom Once the __maxrom directive is used strict ROM address checking is enabled using the ROM map specified by badrom To specify a range of invalid locations use the syntax minloc maxloc Specifically a warning will be raised in the following circumstances e the target of a GOTO or CALL instruction is evaluated by the assembler to a constant and falls in a bad ROM region e the target of an LGOTO or LCALL pseudo op is evaluated by the assembler to a constant and falls in a bad ROM region a hexfile is being generated and part of an instruction falls in a bad ROM region O 2009 Microchip Technology Inc DS33014K page 47 Assembler Linker Librarian User s Guide 4 5 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation __badromis not commonly used as RAM and ROM details are handled by the include files inc or linker script files 1kr 4 5 4 See Also maxrom 4 5 5 Simple Example include p12c508 inc _ maxrom 0x1FF __badrom 0x2 0x4 OxA o
25. far pointer dataPtr sram Assign this pointer to the memory array dataPtr OxCC Write low byte of 16 bit word to SRAM dataPtr 0x55 Write high byte of 16 bit word to SRAM DS33014K page 218 2009 Microchip Technology Inc Sample Applications 13 6 2 Assembler Usage This section discusses how to use the MPASM assembler the assembler when developing external memory application code In an assembler application s source file using a simple define or equ directive provides an easy way to define the SRAM starting address which can be used to set up the table pointers prior to a table read or table write operation define SRAM BASE ADDRS 0x20000 Base addrs for external memory device define SRAM END ADDRS Ox1FFFFF End addrs not required Accessing the external program memory through table reads and table writes requires the table pointer register be set up with the appropriate address as shown by the following example movlw upper SRAM BASE ADDRS movwf TBLPTRU movlw high SRAM BASE ADDRS movwf TBLPTRH movlw low SRAM BASE ADDRS movwf TBLPTRL To build the assembler sample application refer to Section 13 2 How to Build the Sample Applications 13 6 2 1 ASSEMBLER MEMORY MAP The figure below shows the memory mapping for the PIC18F8722 when used with the 1 Mbyte external SRAM device Notice that the first 128K bytes of the external memory region is overlapped with the
26. gt Prog Mem TBLPTR TBLPTR 1 gt TBLPTR 000E TBLWT Table Write with post decrement TABLAT gt Prog Mem TBLPTR TBLPTR 1 gt TBLPTR 000F TBLWT Table Write with pre increment TBLPTR 1 gt TBLPTR TABLAT gt Prog Mem TBLPTR DS33014K page 264 O 2009 Microchip Technology Inc Instruction Sets A9 PIC18 DEVICE EXTENDED INSTRUCTION SET Some PIC18 devices have an extended mode of operation for use with the MPLAB C18 compiler This mode will change the operation of some instructions listed in Section A 8 PIC18 Device Instruction Set and add the instructions listed in this section In general you should not need to use the extended instruction set However if needed the extended mode is set using a special device configuration bit For more on extended mode see the MPLAB C18 C Compiler User s Guide DS51288 and your device data sheet Instruction opcode is shown in hex by making certain assumptions either listed in the key or as a footnote For more information on the opcode bit values for each instruction as well as the number of cycles per instruction status bits affected and complete instruction details see the relevant device data sheet TABLE A 21 PIC18 EXTENDED INSTRUCTIONS Hex Mnemonic Description Function E8fk ADDFSR k Add literal to FSR FSR f k gt FSR f E8Ck ADDULNK k Add literal to FSR2 and return FSR2 k gt FSR2 TOS gt PC 0014 CALLW Ca
27. if num2 gt 0xff If num2 gt 255 decimal exitm force immediate return from macro during assembly else movlw numi Load W register with a literal value assigned to the label numl movwf result Load W register to an address location assigned to the label result movlw num2 Load W register with a literal value assigned to the label num2 addwf result Add W register with the memory location addressed by result and load the result back to result endif endif DS33014K page 76 2009 Microchip Technology Inc Directives endm End of add MACRO org 0010 My main program starts at 10H start The label start is assigned an address 10H add 100 256 Call add MACRO with decimal numbers 100 and 256 assigned to numl and num2 labels respectively EXTIM directive in macro will force return Remember means decimal not floating point end 4 32 expand EXPAND MACRO LISTING 4 32 1 Syntax expand 4 32 2 Description Expand all macros in the listing file This is the default behavior This directive is roughly equivalent to the m MPASM assembler command line option but may be disabled by the occurrence of a subsequent noexpand 4 32 3 Usage This directive is used in the following types of code absolute For information on types of code see Section 1 6 Assembler Operation This directive may be useful when exploring a small range of code with
28. 11 of pagel_pgm are copied to PCLATH 4 amp 3 respectively goto pagel pgm PGM1 CODE 0x900 The code section named PGM1 is placed at 0x900 Label pagel_pgm is located in this pagel_pgm code section goto Go to current line loop here end 4 54 pageselw GENERATE PAGE SELECTING CODE USING WREG COMMANDS PIC10 12 16 MCUs 4 54 1 Syntax pageselw label 4 54 2 Description An instruction to the linker to generate page selecting code to set the page bits to the page containing the designated 1abe1 Only one 1abe1 should be specified No operations can be performed on label 1abe1 must have been previously defined The linker will generate the appropriate page selecting code For 12 bit instruction width PIC10F some PIC12 PIC16 devices the appropriate bit set clear instructions on the STATUS register will be generated For 14 bit instruction width most PIC12 PIC16 devices MOVLW and MOVWF instructions will be generated to modify the PCLATH If the device contains only one page of program memory no code will be generated For PIC18 devices this command will do nothing as these devices do not use paging 4 54 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive saves you from having to manually code page bit changes Also since it automatically generates code the code is much more port
29. 128K bytes of internal program memory space and therefore cannot be accessed using the external memory bus Without any additional external memory address decoding the first 128K bytes of the SRAM are not accessible and therefore the first addressable location of SRAM is 20000h as used in this example SA4 TABLE 13 8 PROGRAM MEMORY MAP PIC18F8722 AND 1 MB SRAM Program SRAM SA4 Memory Linker Script Section Source Code Section Address Address 0x000000 vectors Reset Interrupts vectors 0x000029 0x000000 0x00002A 0x01FFFF page On chip Memory prog Main Program 0x01FFFF gt 0x020000 0x020000 xsram External Memory SRAM_BASE_ADDRS OxOFFFFF OxOFFFFF SRAM_END_ADDRS 0x100000 0x1FFFFF A _ A oO _ _ __ _ _ _ _ _ _ _ _ _ __ _ _ __ __ _ __ _ __ __________ au EeEeeeeeMheeeee O 2009 Microchip Technology Inc DS33014K page 219 Assembler Linker Librarian User s Guide CODEPAGE 13 6 2 2 ASSEMBLER LINKER SCRIPT The modified PIC18F8722 assembler linker script file shown below demonstrates suggested modifications for external memory applications First the CODEPAGE statements are added NAME vectors IFDEF _DEBUGCODESTART CODEPAGE CODEPAGE ELSE CODEPAGE FI CODEPAGE CODEPAGE CODEPAGE CODEPAGE CODEPAGE NAME page NAME debug NAME page NAME xsram NAME idlocs NAME config NAME devid NAME eedata START 0x0 START 0x2A START _DEB
30. 181 A NAO 91 Listing DireCtives ooooconiocccnncccnnnnonnnencnnncnnnnnrnnnnnnos 45 ER 72 errorlevel ee 73 Eben ee let E E eg EN UL WEE 96 A teat de de dora de cadet 98 PAR E 101 EISE eege eee ee ee eres 109 SUD iia 109 AA 110 Listing File tin 28 45 174 LKRPATH ES SEL hear e Ur su Sent 182 eet ES PRE otic E State aa ae ve en eme te 92 Logical Sections 186 Wa as 40 143 M Macro Code Examples 153 En WEE 70 Pe Sees tt oS e Be Nd Be us 75 Expand ti A nied ei Sine Lead 77 No EXPANSI N ceci tadas 98 Text Substitution ooooococcnncocccnccnononancnnnnnnnos 152 Us iio 152 MA EE 94 Macro Direchhves 45 Deli DEE 152 eu EE 70 AM to ia d tate 75 expa d RE 77 eer EE 92 MACTO EE 94 Wel e BEE 98 Macro Language eccccncocccononcnnnancnonancnonanonnnnnanarnnn noo 151 Macro Syntax Seege Sit deene 151 Macros iia in Ane 27 Macros in Linker Scripts 187 MAIN re Ween awe eee men en 39 Map EE 176 196 197 Maximum RAM Location 95 Maximum ROM Location 96 Maxam chi die ah idl Sed Sk le 95 EK te NET 96 MCC INCLUDE oraa e aena enaa aie 198 199 Memory P dier desse E is 80 ROS Oui 106 Memory Regions coooccccocccconcnccononcnnoncnonnnnnnnnnrn corno nos 183 Message coin 96 Messages ASSOMDIGR ici iii cee 165 MOSS tirano 96 MN MONICS coccion cen aie 27 mp2cod M re 246 mp2hex Utiliser ita 246 MPASM Assembler
31. 2009 Microchip Technology Inc DS33014K page 233 Assembler Linker Librarian User s Guide NOTES DS33014K page 234 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 15 MPLIB Librarian Overview 15 1 INTRODUCTION An overview of the MPLIB object librarian and its capabilities is presented Topics covered in this chapter What is MPLIB Librarian How MPLIB Librarian Works How MPLIB Librarian Helps You Librarian Operation Librarian Input Output Files 15 2 WHAT IS MPLIB LIBRARIAN MPLIB object librarian the librarian combines object modules generated by the MPASM assembler or the MPLAB C18 C compiler into a single library file This file may then be inputted into the MPLINK object linker 15 3 HOW MPLIB LIBRARIAN WORKS A librarian manages the creation and modification of library files A library file is simply a collection of object modules that are stored in a single file There are several reasons for creating library files Libraries make linking easier Since library files can contain many object files the name of a library file can be used instead of the names of many separate object files when linking Libraries help keep code small Since a linker only uses the required object files contained in a library not all object files which are contained in the library necessarily wind up in the linker s output module Libraries make projects more maintainable If a l
32. 247 O 2009 Microchip Technology Inc DS33014K page 243 Assembler Linker Librarian User s Guide NOTES DS33014K page 244 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 18 Utilities Overview and Usage 18 1 INTRODUCTION An overview of the 8 bit utilities and their capabilities are presented Topics covered in this chapter e What are Utilities e Utilities Operation e mp2hex exe Utility mp2cod exe Utility 18 2 WHAT ARE UTILITIES Utilities are tools available for use with the assembler and or linker The MPLIB object librarian is a utility that was discussed in the previous sections TABLE 18 1 AVAILABLE UTILITIES Utility Description mplib exe Creates modifies and extracts files from libraries See Part 3 MPLIB Object Librarian for more information mp2hex exe Generates a Hex file from a COF file mp2cod exe Generates a COD and list file from a COF file 18 3 UTILITIES OPERATION The utilities MP2HEX and MP2COD work with the MPLINK object linker to generate executable code hex or a linker listing file 1st from the linker COF file The Hex file is used by simulators emulators debuggers and programmers FIGURE 18 1 UTILITIES OPERATION SE output file Utility output files 2009 Microchip Technology Inc DS33014K page 245 Assembler Linker Librarian User s Guide 18 4 MP2HEX EXE
33. 36 4 See Also extern global udata udata_acs udata_ovr udata_shr 4 36 5 Simple Example idata LimitL dw 0 LimitH dw D 300 Gain dw Dip Flags db 0 String db Hi there 4 36 6 Application Example idata This directive reserves RAM locations for variables and directs the linker to generate a lookup table that may be used to initialize the variables specified in this section The Starting Address of the lookup table can be obtained from the Map map file If you don t specify a value in the idata section the variables will be initialized with 0 Hinclude p16f877a inc Include standard header file for the selected device group1 IDATA 0x20 Initialized data at location 20h groupl_varl res 1 groupl_varl located at 0x20 initialized with 0 groupl var2 res 1 groupl var2 located at 0x21 initialized with 0 O 2009 Microchip Technology Inc DS33014K page 83 Assembler Linker Librarian User s Guide group2 IDATA Declaration of group2 data The addresses for variables under this data section are allocated automatically by the linker group2 varl db 1 2 3 4 4 bytes in RAM are reserved group2 var2 dw 0x1234 1 word in RAM is reserved RST CODE 0x0 The code section named RST jis placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start start PGM CODE This is the beginning of the
34. 7 banksel Generate Bank Selecting Code ooocccccoccccnonccccccnonccccncncnnnncnnnnnns 50 4 8 cblock Define a Block of Constants ccccccconnooooccncnononononnnnnnononnncnnnnannnos 52 4 9 code Begin an Object File Code Section oooooooccccccccccnnnnoooncnnnnnnnnnnnnnnnnnos 54 4 10 code pack Begin an Object File Packed Code Section PICTS MEUS cta cote oh ove rare einen tete SUR 55 2009 Microchip Technology Inc DS33014K page iii Assembler Linker Librarian User s Guide 4 11 config Set Processor Configuration Bits 55 4 12 config Set Processor Configuration Bits PIC18 MCUS ee 57 4 13 constant Declare Symbol Constant ooccccinniccccnnnccccccnnnonccnnnnancncnannncnnnns 58 4 14 da Store Strings in Program Memory PIC12 16 MCUS sses 59 4 15 data Create Numeric and Text Data ooooococcinncccccnonoccccccnoncncnccnnnnncnnnnancnnns 60 4 16 db Declare Data of One Byte AE 62 4 17 de Declare EEPROM Data Byte EEN 64 4 18 define Define a Text Substitution Label 65 4 19 dt Define Table PIC12 16 MCUS 67 4 20 dtm Define Table Extended PIC16 MCUs Only conocccccconcoccccccnancccnanancnon 67 4 21 dw Declare Data of One Word EE 68 4 22 else Begin Alternative Assembly Block to if Conditional 68 4 23 end End Program eer 69 4 24 endc End an Automatic Constant Block oooooccccccnnocccccccanaccnnanancnonanancnnn
35. 86 592 2388138 Fax 86 592 2388130 China Xian Tel 86 29 8833 7252 Fax 86 29 8833 7256 China Zhuhai Tel 86 756 3210040 Fax 86 756 3210049 ASIA PACIFIC India Bangalore Tel 91 80 3090 4444 Fax 91 80 3090 4080 India New Delhi Tel 91 11 4160 8631 Fax 91 11 4160 8632 India Pune Tel 91 20 2566 1512 Fax 91 20 2566 1513 Japan Yokohama Tel 81 45 471 6166 Fax 81 45 471 6122 Korea Daegu Tel 82 53 744 4301 Fax 82 53 744 4302 Korea Seoul Tel 82 2 554 7200 Fax 82 2 558 5932 or 82 2 558 5934 Malaysia Kuala Lumpur Tel 60 3 6201 9857 Fax 60 3 6201 9859 Malaysia Penang Tel 60 4 227 8870 Fax 60 4 227 4068 Philippines Manila Tel 63 2 634 9065 Fax 63 2 634 9069 Singapore Tel 65 6334 8870 Fax 65 6334 8850 Taiwan Hsin Chu Tel 886 3 6578 300 Fax 886 3 6578 370 Taiwan Kaohsiung Tel 886 7 536 4818 Fax 886 7 536 4803 Taiwan Taipei Tel 886 2 2500 6610 Fax 886 2 2508 0102 Thailand Bangkok Tel 66 2 694 1351 Fax 66 2 694 1350 EUROPE Austria Wels Tel 43 7242 2244 39 Fax 43 7242 2244 393 Denmark Copenhagen Tel 45 4450 2828 Fax 45 4485 2829 France Paris Tel 33 1 69 53 63 20 Fax 33 1 69 30 90 79 Germany Munich Tel 49 89 627 144 0 Fax 49 89 627 144 44 Italy Milan Tel 39 0331 742611 Fax 39 0331 466781 Netherlands Drunen Tel 31 416 690399 Fax 31 416 690340 Spain Madrid Tel 34 91 708 08 90 Fax 34 91 708 08 91 UK Wo
36. C clrw 0 in W iorwf Dly0 W inclusive OR all variables iorwf Dly1 W together to see if we have reached iorwf Dly2 W 0 on all of them iorwf Dly3 W btfss STATUS Z Test if result of Inclusive OR s is 0 goto DoD1y32 It was NOT zero so continue counting retlw 0 It WAS zero so exit this subroutine END 2009 Microchip Technology Inc DS33014K page 133 Assembler Linker Librarian User s Guide 5 6 EXAMPLE OF SPI EMULATED IN FIRMWARE Directives highlighted in this example are s list e define udata res e global 5 6 1 Program Functional Description This program is used to emulate SPI function in firmware The application is written as relocatable code i e you must use both the assembler and linker to generate the executable The list directive is used to define the processor and set listing file formatting The standard header file for the processor selected is included using include SPI variables are declared using define Program registers are assigned using the udata and res directives Sections of code are created using the code statement External code is accessed using global 5 6 2 Commented Code Listing RRR RRR RRR KERR KR KK KERR KERR KERR kk kk kkk kkk kkk kkk kkk kkk kkk k kkk kk kkk kkk kk k kkk Emulates SPI in firmware Place byte in Buffer call SPI_Out sends MSB first PRR RRR RRR KERR KERR KKK KK KKK RRR RK kkk kkk kkk kkk kkk kkk kkk kkk kk kkk kkk kkk kkk k k k L
37. CODE EXECUTABLES AND PATHS Executables Default Paths to Executables mpasmwin exe C Program Files Microchip MPASM Suite mplink exe C Program Files Microchip MPASM Suite 2009 Microchip Technology Inc DS33014K page 195 Assembler Linker Librarian User s Guide TABLE 13 2 C CODE EXECUTABLES AND PATHS Executables Default Paths to Executables mcc18 exe C mec18 bin mpasmwin exe C mcc18 mpasm mplink exe C mcc18 bin Note Future C compiler versions may be located at C Program Files Microchip MPLAB C18 Note Use mplink exe and not_mplink exe The executable file _mplink exe is not a stand alone program 13 21 Using MPLAB IDE MPLAB IDE provides a GUI method of developing your code 13 2 1 1 BUILDING APPLICATIONS To build an application with MPLAB IDE 1 Use the Project Wizard under the Project menu to create a project Select the device specified in the sample application For assembly applications select the Microchip MPASM Toolsuite as the active toolsuite For C code applications or combined C code and assembly applications select the Microchip C18 Toolsuite as the active toolsuite Make sure the executable paths are correct as per Table 13 1 or Table 13 2 respectively Name the project and place it in its own folder Add the sample files to your project e g sourcel c source2 asm and if customized script lkr 2 O
38. Conditional 2 HIFDEF HELSE FI 11 8 11 IFDEF Only one macro is allowed after this directive If the macro is defined before the if clause will be parsed by the linker Complex conditions must be constructed using nested if else clauses 11 8 1 2 ELSE No macro is allowed after this directive The else clause will be parsed only in case that the if clause is not 11 8 1 3 DE No macro is allowed after this directive It identifies the end of if or else clause 11 8 2 Macros Depending on what you want to do macros may be set and used with conditional statements to determine how the linker script will be interpreted by the linker If you are using MPLAB IDE all macros listed in Table 11 1 will automatically be set for you The only exception is Debug vs Release which must be selected under the Build Configuration See MPLAB IDE documentation for more on how to set the Build Configuration 2009 Microchip Technology Inc DS33014K page 187 Assembler Linker Librarian User s Guide If you are using the command line you must set the macros yourself The macros that are available for you to set are listed below On the command line precede the macro with u See Section 11 8 4 Examples of Use for some examples TABLE 11 1 LINKER SCRIPT MACROS Macro Use _CRUNTIME To link C code or mixed C code and assembly _EXTENDEDMODE To use PIC18 extended microcontroller mode _DEBUG To specify debug
39. Consiants p 52 e da Store Strings in Program Memory PIC12 16 MCUs eeeeee p 59 e data Create Numeric and Text Data p 60 db Declare Data of One Bytes p 62 e de Declare EEPROM Data Bytes p 64 e dt Define Table PIC12 16 MCUS cocooonocccccoccccnnocanonaccnononannnnnccnnnnnnnnnncnnnns p 67 DS33014K page 44 2009 Microchip Technology Inc Directives e dtm Define Table Extended PIC16 MCUs Only p 67 e dw Declare Data of One Word p 68 e endc End an Automatic Constant Block p 69 e fill Specify Program Memory Fill Value sseseseseeeeseeeseeeesresee seses p 80 tes R serve Memor teren enen EA p 106 4 2 4 Listing Directives Listing directives control the MPASM assembler listing file format These directives allow the specification of titles pagination and other listing control Some listing directives also control how code is assembled e error Issue an Error Message p 72 e errorlevel Set Message Level ssessssessesrressrrersreesresrrnssrresrreesre p 73 s Tista listing le e EE EE p 91 e messg Create User Defined Message neseseresriresrresrrrsrrrnrrreerres p 96 e nolist Turn off Listing Output p 98 e page Insert Listing Page Eject eesessssseressssrresssrrsssrirnsssrinnnssrinnnnnrennn p 101 e space Insert Blank Listing Lines p 109 e subtitle Specify Program Subtitle p 109 e title Specify Program Te p 110
40. DS33014K page 42 O 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 4 Directives 4 1 INTRODUCTION Directives are assembler commands that appear in the source code but are not usually translated directly into opcodes They are used to control the assembler its input output and data allocation Note Directives are not instructions movlw btfss goto etc For instruction set information consult your device data sheet Many of the assembler directives have alternate names and formats These may exist to provide backward compatibility with previous assemblers from Microchip and to be compatible with individual programming practices If portable code is desired it is recommended that programs be written using the specifications contained here Note Although MPASM assembler is often used with MPLINK object linker MPASM assembler directives are not supported in MPLINK linker scripts See MPLINK object linker documentation for more information on linker options to control listing and hex file output Information on individual directives includes syntax description usage and related directives as well as simple and in some cases expanded examples of use In most cases simple examples may be assembled and run by adding an end statement Expanded examples may be assembled and run as is to give an demonstration of an application using the directive s Individual direc
41. EE eege de EE Ee 69 ONG DEE 69 QUIN BE 70 UE 72 error arth its ord ote hoot tt Us es Mics hh 72 errorlevel 2 teste anto ei NE Leet man Ie a 74 EXILIM RA 76 H RE 78 Mills o eeh ee 80 global sii hee aa iaa 82 A A 83 85 LEE 87 A eS 88 Md too cavas 89 IS dada 92 HOGA etc e EE E Meee ch cates 92 Macro a cd Sa 77 94 98 2009 Microchip Technology Inc MOSSO ete eI eles 97 01 1o EE 99 pagesel ss unten 102 104 Processor dite te een NUE nn ne 104 FAUX EEN 105 POS scien Aas eatin eee A Mass 106 O Se E 108 SPA 46 109 let a cos US 109 O de 110 Be o a da de dei a O 110 udala ACS 2 e EMI echt Die 112 UCata OVE EEE D 113 Je EE tada 115 Val lable iia aiii 117 WAIE ele tania en de ete ss oes 119 Executable Files neo000onennnnnnnosessnnnnnrnnrrressnennnne 12 Execute If Symbol Defined 88 Execute If Symbol Not Defined 89 Mia rt a tt 75 expand iei ee RE mr AMAR an 77 Exporta Label mico eee eet 82 Extended Microcontroller Mode 203 IER 78 146 External Labels hiciera 78 External Memory 140 F Moa dt td 70 File EMO at e ict hee co tbe iter teed 155 LISTING tlie eth ede Nah a dae 45 EEES tota del be Nats Oh at ood caren 182 UE 80 Final Frontier 109 G Generic Linker Script Example 189 Generic Linker Scripts 200 Olalla sci iiss ironia 82 H Header File Sinsir etnei 9
42. Librarian User s Guide The following table presents the various radix specifications TABLE 4 RADIX SPECIFICATIONS MPASM ASSEMBLER MPLINK LINKER Note Type Syntax Example 1 Binary B binary digits B 00111001 2 Octal O octal digits 0777 3 Decimal D digits D 100 digits 100 4 Hexadecimal H hex digits H 9f Oxhex digits Ox9f 5 ASCII A character A C character CE 1 A binary integer is b or B followed by one or more of the binary digits 01 in single quotes An octal integer is o or O followed by one or more of the octal digits 01234567 in sin gle quotes A decimal integer is d or D followed by one or more decimal digits 0123456789 in sin gle quotes Or a decimal integer is followed by one or more decimal digits 0123456789 A hexadecimal integer is h or H followed by one or more hexadecimal digits 0123456789abcdefABCDEF in single quotes Or a hexadecimal integer is Ox or OX followed by one or more hexadecimal digits 0123456789abcdefABCDEF An ASCII character is a or A followed by one character see Section B 2 ASCII Char acter Set in single quotes Or an ASCII character is one character in single quotes D Gei A a 3 5 ARITHMETIC OPERATORS AND PRECEDENCE Arithmetic operators may be used with directives and their variables as specifi
43. Minimize Maximize and Close Target Refers to user hardware Target Application Software residing on the target board Target Board The circuitry and programmable device that makes up the target application Target Processor The microcontroller device on the target application board Template Lines of text that you build for inserting into your files at a later time The MPLAB Editor stores templates in template files Tool Bar A row or column of icons that you can click on to execute MPLAB IDE functions Trace An emulator or simulator function that logs program execution The emulator logs program execution into its trace buffer which is uploaded to MPLAB IDE s trace window Trace Memory Trace memory contained within the emulator Trace memory is sometimes called the trace buffer Trigger Output Trigger output refers to an emulator output signal that can be generated at any address or address range and is independent of the trace and breakpoint settings Any number of trigger output points can be set Uninitialized Data Data which is defined without an initial value In C int myVar defines a variable which will reside in an uninitialized data section Upload The Upload function transfers data from a tool such as an emulator or programmer to the host PC or from the target board to the emulator Warning An alert that is provided to warn you of a situation that would cause physical dama
44. OV 1 PC 2 2 n gt PC else PC 2 gt PC D O n BRA n Branch Unconditionally PC 2 2 n gt PC EOn BZ n Branch if Zero if Z 1 PC 2 2 n gt PC else PC 2 gt PC ECkk CALL n s Call Subroutine 1st word PC 4 gt TOS n gt PC lt 20 1 gt Fkkk 2nd word if s 1 WREG gt WREGs STATUS gt STATUSs BSR gt BSRs 0004 CLRWDT Clear Watchdog Timer 0 gt WDT 0 gt WDT postscaler 1 gt TO 1 PD 0007 DAW Decimal Adjust WREG if WREG lt 3 0 gt gt 9 or DC 1 WREG lt 3 0 gt 6 gt WREG lt 3 0 gt else WREG lt 3 0 gt gt WREG lt 3 0 gt if WREG lt 7 4 gt gt 9 or C 1 WREG lt 7 4 gt 6 gt WREG lt 7 4 gt else WREG lt 7 4 gt gt WREG lt 7 4 gt EFkk GOTO n Go to address 1st word n gt PC lt 20 1 gt Fkkk 2nd word 0000 NOP No Operation No Operation Fxxx NOP No Operation No Operation 2 word instructions 0006 POP Pop top of return stack TOS TOS 1 gt TOS 0005 PUSH Push top of return stack TOS PC 2 gt TOS D 1 n RCALL n Relative Call PC 2 gt TOS PC 2 2 n gt PC OOFF RESET Software device reset Same as MCLR reset 0010 RETFIE s Return from interrupt TOS gt PC 1 gt GIE GIEH or PEIE GIEL and enable interrupts if s 1 WREGs gt WREG STATUSs gt STATUS BSRs gt BSR PCLATU PCLATH unchngd 0012 RETURN s Return from subroutine TOS gt PC if s 1 WREGs gt WREG STATUSs gt STATUS BSRs gt BSR PCLATU PCLATH are unchanged 0003 SLEEP Enter SLEEP Mode 0 gt WDT 0 gt WDT postscaler 1 gt 3TO 0 gt PD
45. Page Election ilies 101 Page Select cimil 102 Page Selection WREG oooccicccnnccnnccconnconnccanccnnnaos 103 pagese icon sessstserecchtsdudcesageseapadsaterasnaede 102 147 PAYO Ol Wenicionia mairena 103 PAGING EE 127 147 PATH e ee e e let a 198 199 Processing Linker ssseeeeesssenneseoerreneeeeenreesereenne 191 PrOCeSS Oise 104 Processor et ee Ee EEN 91 104 123 Program Memory coccccnoccccnnnncnnoncnononononnonnnrannn non nano 142 Ggs 11 PROTECTED command 183 R O 39 A O O ON 105 Radix pt rame gester ide 91 105 123 RAM Allocation AA 145 RAM Memory Regions Defining 183 Reading Recommended 5 Register Assignments 127 relocatable i 5 Aes aa 32 Relocatable Code Generating 25 Relocatable Objects 141 EA 106 Reserved Section Names Assembler 39 Reserved Words Assembler 39 ROM Memory Regions Defining 185 S Sample Applications Linker 195 Scripts Linker riene eisereen ieee tki iR 181 Search Order Include Files A 90 SECTION E oi acti 183 186 O a 108 Set Program Origin 99 SHAREBANKiscricisiicaua nabos 183 186 Simple cito ate ett o te ner TETE 47 48 SOUC CO ee io anes 12 Source Code File Assembly 26 ee EE aie ee 109 Stack EE 186 STACK SIZE snc lati ae oe 186 Standard Linker Scripts s eese
46. Project gt Build Options gt Project to open a dialog to set check project build options Note MPASM assembler does not recognize include path information spec ified in MPLAB IDE 2 Click on the tool tab to modify tool settings Build Options Dialog MPASM Assembler Tab Build Options Dialog MPLAB C17 Tab If Installed Build Options Dialog MPLAB C18 Tab If Installed Build Options Dialog MPLINK Linker Tab Build Options Dialog MPASM C17 C18 Suite Tab Build Options Dialog MPASM Assembler Tab Select a category and then set up assembler options For additional options see MPASM assembler documentation Chapter 2 Assembler Interfaces General Category Generate Command Line Disable case sensitivity The assembler will not distinguish between upper and lower case letters Note Disabling case sensitivity will make all labels uppercase Extended mode Enable PIC18F extended instruction support Default Radix Set the default radix either Hexadecimal Decimal or Octal Macro Definitions Add macro directive definitions Restore Defaults Restore tab default settings Use Alternate Settings Text Box Enter options in a command line non GUI format Output Category Generate Command Line Diagnostics level Select to display errors only errors and warnings or errors warnings and messages These will be shown in the Output window Gen
47. Started DS51295 FAQ 10 Modified 18F8722TMPO ASM In the template add the following udata section S Oscillator Selection CONFIG OSC LP Array variables array UDATA Ox2FE element1 RES 1 element2 RES 1 element 3 RES 1 element 4 RES 1 element5 RES 2 LP p RRR RRR RR KK RR KK RK RK KK KK KK RK KK KK KK KK KK KK KK KKK KK KK KK k k KK k k k k k k k k KK k k k k k k KEK k k k k k KE Variable definitions Then in the main code portion add the following program code FERRER RRE KR KKK RK RK RK RK KK KKK KKK KK KR KK KK KK KK RK KK RK KEK KEK KK KERR KR KEKE KEKE KE KKK KKK KEK Start of main program The main program code is placed here Main main code goes here banksel element1 movlw 0x55 movwf element1 1 movff element1 element2 rrcf element2 1 1 movff element2 WREG banksel element3 movwf element3 rrcf element3 1 1 movff element3 element4 rrcf element4 1 1 movff element4 element5 rrcf element4 1 1 movff element4 element5 1 Select element1 bank Move literal to element1 Move element1 to element2 right shift element2 move to WREG Since regular RAM was used instead of Access RAM change physical banks Select element3 bank Move WREG to element3 right shift and move to element4 Right shift element4 and move to element5 low byte Right shift element4 again and move to elements high byte O 2009 Microchip Technology Inc
48. UTILITY Use this utility to take the MPLINK linker output COF file and create a Hex file A Hex file contains no debug information but may be programmed directly into a device The MPLINK linker x option will result in the linker not using this utility 18 5 MP2COD EXE UTILITY Use this utility to take the MPLINK linker output COF file and create a COD file and a list file A COD file is a legacy debug file that is no longer used see Section 8 5 3 MPASM Assembler Versions before v3 30 A list file generated by this utility is specific to the linker see Section 9 7 6 Listing File Ist The MPLINK linker w option will result in the linker not using this utility E ___ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _ __ _ __ _ _ _ _ _ _ a DS33014K page 246 O 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 19 Errors and Warnings INTRODUCTION Error messages and warning messages are produced by the 8 bit utilities These messages always appear in the listing file directly above each line in which the error occurred Hex File Errors e COFF To COD Conversion Errors e COFF To COD Converter Warnings e COD File Errors 19 2 HEX FILE ERRORS Selected hex format does not support byte addresses above 64kb use INHX32 format Your code addresses more than 64 Kbytes of program memory but your selected hex format cannot support this Switch to INHX32 format
49. W MOVF 0 NEGF f d Negate File COMF Epl INCF f d SETC Set Carry BSF 3 0 SETDC Set Digit Carry BSF 37 1 SETZ Set Zero BSF 3 2 SKPC Skip on Carry BTFSS 3 0 SKPDC Skip on Digit Carry BTFSS 31 SKPNC Skip on No Carry BTFSC 3 0 SKPNDC Skip on No Digit Carry BTFSC 3541 SKPNZ Skip on Non Zero BTFSC 372 SKPZ Skip on Zero BTFSS 3 2 SUBCF f d Subtract Carry from File BTFSC 3 0 Z DECF f d 2009 Microchip Technology Inc DS33014K page 259 Assembler Linker Librarian User s Guide TABLE A 15 12 BIT 14 BIT SPECIAL INSTRUCTION MNEMONICS CONTINUED eas Equivalent Mnemonic Description Operation s Status SUBDCF f d Subtract Digit Carry from File BTFSC 3 1 Z DECF f d TSTF f Test File MOVF fot Z A 7 KEY TO PIC18 DEVICE INSTRUCTION SET Field Description Register Files dest Destination either the WREG register or the specified register file location See d f Register file address f 8 bit 0x00 to OxFF 12 bit 0x000 to OxFFF This is the source address 12 bit 0x000 to OxFFF This is the destination address a 0 1 or 2 for FSR number x Don t care 0 or 1 The assembler will generate code with x 0 It is the recommended form of use for compatibility with all Microchip software tools Zz Indirect addressing offset z 7 bit offset value for indirect addressing of register files source z 7 bit offset va
50. _idlocs can be read by a programmer PIC18 devices can read this value at run time but PIC12 16 devices cannot 4 38 4 See Also _ config config list processor 4 38 5 Simple Example Example 1 PIC16 Devices include p16f877a inc Include standard header file for the selected device __idlocs 0x1234 Sets device ID to 1234 Example 2 PIC18 Devices Note The most significant nibble of idlocs is always 0x0 according to the programming specification include p18f452 inc Include standard header file for the selected device 2009 Microchip Technology Inc DS33014K page 85 Assembler Linker Librarian User s Guide __idlocs _IDLOCO 0x1 IDLOC register 0 will be programmed to 1 __idlocs _IDLOC1 0x2 IDLOC register 1 will be programmed to 2 __idlocs _IDLOC2 0x3 IDLOC register 2 will be programmed to 3 __idlocs _IDLOC3 0x4 IDLOC register 3 will be programmed to 4 __idlocs _IDLOC4 0x5 IDLOC register 4 will be programmed to 5 __idlocs _IDLOC5 0x6 IDLOC register 5 will be programmed to 6 __idlocs _IDLOC6 0x7 IDLOC register 6 will be programmed to 7 _ idlocs _IDLOC7 0x8 IDLOC register 7 will be programmed to 8 4 39 if BEGIN CONDITIONALLY ASSEMBLED CODE BLOCK 4 39 1 Syntax Preferred if expr Supported if expr if expr 4 39 2 Description Begin execution of a conditional assembly block If expr evaluates to true the code immediately followi
51. a dw 0 a 1 endw endm When invoked would generate entry0 dw 0 entryl dw entry2 dw entry3 dw ooo 7 6 MACRO CODE EXAMPLES The following are examples of macros e Literal to RAM Conversion e Constant Compare 7 6 1 Literal to RAM Conversion This code converts any literal of 32 bits to 4 separate RAM data values In this example the literal 0x12345678 is put in the desired 8 bit registers as 0x12 0x34 0x56 and 0x78 Any literal can be unpacked this way using this macro include p16F877A inc udata 0x20 Out 0 res il LSB Outl res T A S Out2 res 1 7 S Out3 res il MSB Unpack32 MACRO Var Address BANKSEL Address movlw Address movwf FSR movlw Var H FF movwf INDF movlw Var gt gt D 08 amp H FF incf FSR F movwf INDF movlw Var gt gt D 16 amp H FF incf FSR F movwf INDF movlw Var gt gt D 24 H FF incf FSR F movwf INDF ENDM ORG 0 Start Unpack32 0x12345678 Out0 goto END D H y H D H D D 1 Var 32 bit literal to be unpacked Address specifies the LSB start Use FSR and INDF for indirect access to desired address Mask to get LSB Put in first location Mask to get next byte of literal Point to next byte Write data to next byte Mask to get next byte of literal Point to next byte rite data to next byte Mask to get last byte of literal Point to last byte rite data to last byte End of
52. an Executable Produces a hex file that can be programmed into a PIC1X MCU or loaded into an emulator or simulator to be executed Configures Stack Size and Location Allows MPLAB C18 to set aside RAM space for dynamic stack usage Identifies Address Conflicts Checks to ensure that program data do not get assigned to space that has already been assigned or reserved Provides Symbolic Debug Information Outputs a file that MPLAB IDE uses to track address labels variable locations and line file information for source level debugging 2009 Microchip Technology Inc DS33014K page 171 Assembler Linker Librarian User s Guide 9 4 HOW MPLINK LINKER HELPS YOU MPLINK linker allows you to produce modular reusable code Control over the linking process is accomplished through a linker script file and with command line options The linker ensures that all symbolic references are resolved and that code and data fit into the available PIC1X MCU device MPLINK linker can help you with Reusable Source Code You can build up your application in small reusable modules Libraries You can make libraries of related functions which can be used in creating efficient readily compilable applications MPLAB C18 The Microchip compiler for PIC18 devices requires the use of MPLINK linker and can be used with precompiled libraries and MPASM assembler Centralized Memory Allocation By using application specific linker scripts precompiled object
53. and memory operations Additionally extended mode instructions are shown in Section A 9 PIC18 Device Extended Instruction Set Instruction opcode is show in hex by making certain assumptions either listed in the key or as a footnote For more information on the opcode bit values for each instruction as well as the number of cycles per instruction status bits affected and complete instruction details see the relevant device data sheet TABLE A 16 PIC18 BYTE ORIENTED REGISTER OPERATIONS Hex Mnemonic Description Function 27 ADDWF f d a ADD WREG tof WREG f gt dest 23f ADDWFC f d a ADD WREG and Carry bit to f WREG f C gt dest 17 ANDWF d a AND WREG with f WREG AND f gt dest 6B CLRF f a Clear f 0 gt f O 2009 Microchip Technology Inc DS33014K page 261 Assembler Linker Librarian User s Guide TABLE A 16 PIC18 BYTE ORIENTED REGISTER OPERATIONS CONTINUED Hex Mnemonic Description Function 1F COMF d a Complement f NOT f gt dest 63 CPFSEQ fa Compare f with WREG skip if f WREG iff WREG PC 4 gt PC f WREG else PC 2 gt PC 65 CPFSGT f a Compare f with WREG skip if f gt HWREG if f gt WREG PC 4 gt PC WREG else PC 2 PC 61f CPFSLT f a Compare f with W
54. array at starting address To build the C compiler sample application refer to Section 13 2 How to Build the Sample Applications The large memory model must be used in this project e For MPLAB IDE at the end of Step 2 click the MPLAB C18 tab and chose the Category of Memory Model from the drop down list Under Code Model click Large code mode gt 64k e For the command line use the m1 option when compiling 13 6 1 1 C COMPILER MEMORY MAP The table below shows the memory mapping for the PIC18F8722 when used with the 1Mbyte external SRAM device Notice that the first 128K bytes of the external memory region is overlapped with the 128K bytes of internal program memory space and therefore cannot be accessed using the external memory bus Without any additional external memory address decoding the first 128K bytes of the SRAM are not accessible and therefore the first addressable location of SRAM is 20000h as used in this example SA4 2009 Microchip Technology Inc DS33014K page 217 Assembler Linker Librarian User s Guide TABLE 13 7 PROGRAM MEMORY MAP PIC18F8722 AND 1 MB SRAM Program SRAM SA4 Memory Linker Script Section Source Code Section Address Address 0x000000 page Reset Interrupt 0x000000 0x01FFFF 0x01 FEFF vectors and On chip Memory gt 0x020000 0x020000 xsram External Memory SRAM_BASE romdata OxOFFFFF OxOFFFFF space 0x100000 0x1 FFFFF
55. assembler list file Set the size of tabs in the list file using the t option EXAMPLE 1 2 ABSOLUTE MPASM ASSEMBLER LISTING FILE The product name and version the assembly date and time and the page number appear at the top of every page The first column contains the base address in memory where the code will be placed The second column displays the 32 bit value of any symbols created with the set equ variable constant or cblock directives The third column is reserved for the machine instruction This is the code that will be executed by the PIC1X MCU The fourth column lists the associated source file line number for this line The remainder of the line is reserved for the source code line that generated the machine code DS33014K page 28 2009 Microchip Technology Inc MPASM Assembler Overview Errors warnings and messages are embedded between the source lines and pertain to the following source line Also there is a summary at the end of the listing The symbol table lists all symbols defined in the program The memory usage map gives a graphical representation of memory usage X marks a used location and marks memory that is not used by this object The map also displays program memory usage The memory map is not printed if an object file is generated Note Due to page width restrictions some comments have been shortened indi cated by Also some symbol table listings have been removed i
56. begins at 0x20000 Additionally configuration bits are set in C using the pragma config directive The main function in the C file is placed in the default CODE section because there is no section directive explicitly assigned For additional information you may wish to reference e PIC18F8720 Device Data Sheet DS39609 e MPLAB C18 C Compiler User s Guide DS51288 e External Memory Interfacing Techniques for the PIC18F8XXX AN869 Program memory sections specified by the code and linker script are compared below Specific sections highlighted in this sample application SA2 are noted TABLE 13 4 PROGRAM MEMORY MAP PIC18F8720 Program Linker Script Section SA2 Memory Address Not debug or extended sobre Code Section 0x000000 page On chip Memory STARTUP 0x01FFFF PROG Main Application Code gt 0x020000 eeprom External Memory INTHAND Interrupt Handler 0x1 FFFFF DATTBL Data Table 0x200000 idlocs ID Locations 0x200007 gt 0x300000 config Configuration Bits CONFIG Configuration Settings 0x30000D Ox3FFFFE devid Device ID Ox3FFFFF OxF00000 eedata EE Data OxF003FF eee 2009 Microchip Technology Inc DS33014K page 203 Assembler Linker Librarian User s Guide 13 4 1 C Source Code eeprom1 c eepromi c include lt p18f 8720 h gt define DATA SIZE 0x1000 T Data Table Setup pragma romdata DATTBL Put following romdata into sec
57. bsf STATUS PAO Program memory page 1 call Subroutine Subroutine clrw On Page 1 retlw 0 BANKSEL for Banking and PAGESEL for Paging Use banksel and pagesel for banking and paging respectively include p12f509 inc extern Varl Var2 Declare variables code movlw InitialValue banksel Varl Select data memory Varl bank movw Varl banksel Var2 Select data memory Var2 bank movw Var2 pagesel Subroutine Select program memory page call Subroutine Subroutine clrw Page unknown at assembly time retlw 0 A _ A ___________ _ __ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ TG O 2009 Microchip Technology Inc DS33014K page 147 Assembler Linker Librarian User s Guide 6 9 GENERATING THE OBJECT MODULE Once the code conversion is complete the object module is generated automatically in MPLAB IDE or by requesting an object file on the command line or in the shell interface When using MPASM assembler for Windows check the checkbox labeled Object File When using the command line interface specify the o option The output file will have a o extension 6 10 CODE EXAMPLE Since an eight by eight bit multiply is a useful generic routine it would be handy to break this off into a separate object file that can be linked in when required The absolute code file can be broken into two relocatable code files a calling file representing an application and a generic routine that could be incorporated in a library Thi
58. chapter Standard Linker Scripts Linker Script Command Line Information Linker Script Caveats Memory Region Definition Logical Section Definition STACK Definition Conditional Linker Statements 11 2 STANDARD LINKER SCRIPTS Standard linker script files are provided for each device and are located by default in the directory C Program Files Microchip MPASM Suite LKR Standard linker scripts are named with the following convention partnumber g lkr For example the standard linker script for PIC16F872 is 16F872_g 1kr The standard linker scripts contain conditional linker statements and MPLAB IDE uses the ucommand line flag to utilize these statements for different builds such as debug or no debug You can modify a local copy of the standard linker script and use it in your project 2009 Microchip Technology Inc DS33014K page 181 Assembler Linker Librarian User s Guide 11 3 LINKER SCRIPT COMMAND LINE INFORMATION The MPLAB IDE Project Manager can set this information directly You probably only need to use these if you are linking from the command line e LIBPATH e LKRPATH e FILES e INCLUDE 1131 LIBPATH Library and object files which do not have a path are searched using the library object search path The following directive appends additional search directories to the Library object search path LIBPATH libpath where 1libpath is a semicolon delimited list of directories EXAMPLE 11 1 LIBPATH EXAMPLE To
59. coding The generic linker scripts are used automatically by the linker to simplify application development Or you may modify a linker script and then manually add it on the linker command line or to the project This first general example will discuss templates and linker scripts 13 3 1 Locating Templates and Linker Script Files For MPLAB IDE installed in the default location source code templates may be found at C Program Files Microchip MPASM Suite Template in the following subdirectories Code Contains absolute assembly code examples by device Object Contains relocatable assembly code examples by device The relocatable source code template 18F8722TMPO ASM for the PIC18F8722 may be found in the Object directory This template provides oscillator setup example variable and EEPROM setup reset and interrupt handling routines and a section main for application code For MPLAB IDE installed in the default location the generic linker script files may be found at C Program Files Microchip MPASM Suite LKR The generic linker script file for the PIC18F8722 would be 18 8722 g 1kr This file defines initialization files program code sections GPR sections and access memory sections These definitions are grouped based on debugger or programmer usage and regular or extended memory usage Program memory sections specified by the template code and linker script are compared below TABLE 13 3 PROGRAM MEMORY MAP PIC1
60. coeffs CODE 11 7 STACK DEFINITION Only MPLAB C18 requires a software stack be set up The following statement specifies the stack size and an optional DATABANK where the stack is to be allocated STACK SIZE allocSize RAM memName where allocSize is the size in bytes of the stack and memName is the name of a memory previously declared using a ACCESSBANK DATABANK or SHAREBANK statement EXAMPLE 11 9 STACK EXAMPLE To set the stack size to be 0x20 in the RAM area previously defined by gpro the following line should be added to the linker command file STACK SIZE 0x20 RAM gpr0 nN __________ ___ __ _ _ DS33014K page 186 2009 Microchip Technology Inc Linker Scripts 11 8 CONDITIONAL LINKER STATEMENTS Generic linker scripts contain conditional statements and macros to accommodate several different methods for linking code e Debug vs Release e g for the MPLAB REAL ICE in circuit emulator e C code vs Assembly e PIC18 Extended Microcontroller mode vs Traditional mode Being able to use one linker script instead of several simplifies application development MPLINK linker accepts IF ELSE type conditional statements in the linker scripts as discussed below Several macros are used in support of the conditional statements Also certain directives are useful with these conditional statements 11 81 IFDEF ELSE FI Two syntaxes are accepted for these conditional statements Conditional 1 HIFDEF FI
61. condition occurs For example it is not uncommon to see this used with the watchdog timer WDT on a PIC16 device Unused program memory would be filled with goto or branch instructions to prevent execution of the clrwdt instruction in code which would cause the device to reset See the device data sheet for more information on the WDT 4 34 4 See Also data dw org 4 34 5 Simple Examples Example 1 PIC10 12 16 MCU s fill 0x1009 5 fill with a constant fill GOTO RESET VECTOR NEXT _BLOCK Example 2 PIC18 Devices include p18f252 inc org 0x12 failsafe goto org 0x100 fill goto failsafe 0x8000 2 Divide by 2 for 2 word instructions end 4 34 6 PIC16 Application Example fill The i11 directive is used to specify successive program memory locations with a constant or an assembly instruction include p16f877a inc Include standard header file for the selected device RST CODE 0x0000 The code section named RST is placed at program memory location 0x0 The next two instructions are placed in code section RST DS33014K page 80 2009 Microchip Technology Inc Directives pagesel start goto start fill 0 INTRPT INTRPT CODE 0x0004 pagesel ISR goto ISR fill goto start CODE 0x0010 start fill nop 5 goto ISR retfie end 4 34 7 Jumps to the location labelled i Start Fill with 0 up to address 3 INTRPT addr minus current addr The code sect
62. containing embedded spaces with double quotes For example 1 c mylib c program files microchip mpasm suite m switch requires lt filename gt A map filename must be specified For example m main map Multiple inclusion of library file filename A library file has been included multiple times either on the command line or with a FILES directive in a linker command file Remove the multiple references Multiple inclusion of linker command file cmdfile A linker command file can only be included once Remove multiple INCLUDE directives to the referenced linker command file Multiple inclusion of object file filename An object file has been included multiple times either on the command line or with a FILES directive in a linker command file Remove the multiple references n switch requires lt length gt The number of source lines per listing file page must be specified A length of zero will suppress pagination of the listing file o switch requires lt filename gt A COFF output filename must be specified For example o main out Unknown switch cmdline token An unrecognized command line switch was supplied Refer to the Usage documentation for the list of supported switches Unrecognized input in cmdfile line All statements in a linker command file must begin with a directive keyword or the comment Delimiter DS33014K page 224 O 2009 Microchip Technology Inc Errors Wa
63. curren the code addresses oupl vari amp indirectly t line loop here DS33014K page 49 Assembler Linker Librarian User s Guide 4 6 7 Application Example 2 bankisel include p16f877a inc Include standard header file for the selected device bankisel EEADR This register is at location 100h in banks 2 or 3 so the IRP bit must be set bankisel will set it but only where it is used movlw EEADR W Put the address of the register to be accessed indirectly into W movwt FSR Copy address from W to FSR to set Up pointer to EEADR clrf INDF Clear EEADR through indirect accessing of EEADR through FSR INDF It would have cleared PIR2 00Dh 1f backisel had not been used to set the IRP bit goto Ss Prevents fall off end of code end All code must have an end statement 4 7 banksel GENERATE BANK SELECTING CODE 4 7 1 Syntax banksel label 4 7 2 Description This directive is an instruction to the assembler and linker to generate bank selecting code to set the bank to the bank containing the designated label Only one label should be specified No operations can be performed on 1abe1 This label must have been previously defined The linker will generate the appropriate bank selecting code For 12 bit instruction width PIC10F some PIC12 PIC16 devices the appropriate bit set clear instructions on the FSR will be generated For 14 bit instruction width most PIC12 PI
64. devices and MPLAB C18 is the C compiler for PIC18 devices MPLAB C30 Microchip s C compiler for dsPIC30F digital signal controller devices MPLAB ICD 2 Microchip s in circuit debugger that works with MPLAB IDE The ICD supports Flash devices with built in debug circuitry The main component of each ICD is the module Acomplete system consists of a module header demo board cables and MPLAB IDE Software MPLAB ICE 2000 4000 Microchip s in circuit emulators that works with MPLAB IDE MPLAB ICE 2000 supports PIC1X MCUs MPLAB ICE 4000 supports PIC18F MCUs and dsPIC30F DSCs The main component of each ICE is the pod A complete system consists of a pod processor module cables and MPLAB IDE Software MPLAB IDE Microchip s Integrated Development Environment MPLAB LIB30 MPLAB LIB30 archiver librarian is an object librarian for use with COFF object modules created using either MPLAB ASM30 or MPLAB C30 C compiler MPLAB LINK30 MPLAB LINK30 is an object linker for the Microchip MPLAB ASM30 assembler and the Microchip MPLAB C30 C compiler MPLAB PM3 A device programmer from Microchip Programs PIC18 microcontrollers and dsPIC digital signal controllers Can be used with MPLAB IDE or stand alone Will obsolete PRO MATE Il MPLAB SIM Microchip s simulator that works with MPLAB IDE in support of PIC MCU and dsPIC DSC devices MPLIB Object Librarian MPLIB librarian is an object librarian for use with COFF object mod
65. directive declares the beginning of a section of initialized data If 1abe1 is not specified the section is named idata The starting address is initialized to the specified address or will be assigned at link time if no address is specified No code can be placed by the user in this segment The linker will generate a look up table entry for each byte specified in an idata section You must then link or include the appropriate initialization code Examples of initialization code that may be used and modified as needed may be found with MPLINK linker sample application examples Note This directive is not available for 12 bit instruction width PIC10 some PIC12 PIC16 devices The res db and dw directives may be used to reserve space for variables res will generate an initial value of zero db will initialize successive bytes of RAM dw will initialize successive bytes of RAM one word at a time in low byte high byte order 4 36 3 Usage This directive is used in the following types of code relocatable For information on types of code see Section 1 6 Assembler Operation Use this directive to initialize your variables or use a udata directive and then initialize your variables with values in code It is recommended that you always initialize your variables Relying on RAM initialization can cause problems especially when using an emulator as behavioral differences between the emulator and the actual part may occur 4
66. error file is typelnumber file line description For example Error 113 C PROG ASM 7 Symbol not previously defined start The error file may contain any number of MPASM assembler errors warnings and messages For more on these see Chapter 8 Errors Warnings Messages and Limitations To prevent error file generation use the e option 1 7 5 Hex File Formats hex hxl hxh The MPASM assembler and MPLINK linker are capable of producing ASCII text hex files in different formats Format Name Format Type File Extension Use Intel Hex Format INHX8M hex 8 bit core device programmers Intel Split Hex Format INHX8S hxl hxh odd even programmers Intel Hex 32 Format INHX32 hex 16 bit core device programmers This file format is useful for transferring PIC1X MCU series code to Microchip programmers and third party PIC1X MCU programmers 1 7 5 1 INTEL HEX FORMAT This format produces one 8 bit hex file with a low byte high byte combination Since each address can only contain 8 bits in this format all addresses are doubled Each data record begins with a 9 character prefix and ends with a 2 character checksum Each record has the following format BBAAAATTHHHH HHHCC where BB A two digit hexadecimal byte count representing the number of data bytes that will appear on the line AAAA A four digit hexadecimal address representing the starting address of the data record
67. errors in the source code If you find any double click on the error to go to the source code line that contains that error Correct the error and then try to build again DS33014K page 18 O 2009 Microchip Technology Inc PIC1X MCU Language Tools and MPLAB IDE Output Files View the project output files by opening the files in MPLAB IDE 1 Select File gt Open In the Open dialog find the project directory 2 Under Files of type select All files to see all project files 3 Select Example xrf Click Open to view the assembler cross reference file for Example asm in an MPLAB IDE editor window For more on this file see the MPASM assembler documentation Section 1 7 6 Cross Reference File xrf 4 Repeat steps 1 and 2 Select Example map Click Open to view the linker map file in an MPLAB IDE editor window For more on this file see the MPLINK linker documentation Section 9 7 7 Map File map 5 Repeat steps 1 and 2 Select Example lst Click Open to view the linker listing file in an MPLAB IDE editor window When MPASM assembler is used with MPLINK linker the listing file is generated by the linker For more on this file see the MPLINK linker documentation Section 9 7 6 Listing File Ist 6 Repeat steps 1 and 2 Notice that there is only one hex file Example hex This is the primary output file used by various debug tools You do not view this file for debu
68. for variable data in internal RAM The formats for these directives are as follows Banked Registers DATABANK NAME memName START addr END addr PROTECTED Unbanked Registers SHAREBANK NAME memName START addr END addr PROTECTED Access Registers PIC18 devices only ACCESSBANK NAME memName START addr END addr PROTECTED where memName is any ASCII string used to identify an area in RAM addr is a decimal e g 30 or hexadecimal e g OXFF number specifying an address The optional keyword PROTECTED indicates a region of memory that only can be used when specifically identified in the source code The linker will not use the protected area 2009 Microchip Technology Inc DS33014K page 183 Assembler Linker Librarian User s Guide EXAMPLE 11 5 RAM EXAMPLE Based on the RAM memory layout shown in PIC16F877A Register File Map the DATABANK and SHAREBANK entries in the linker script file would appear as shown in the examples below the map PIC16F877A Register File Map Address Bank 0 Bank 1 Bank 2 Bank 3 00h INDFO INDFO INDFO INDFO 01h TMRO OPTION_REG TMRO OPTION_REG 02h PCL PCL PCL PCL 03h STATUS STATUS STATUS STATUS 04h FSR FSR FSR FSR 05h PORTA TRISA OFh TMR1H EEADRH 10h TICON Gen 1Fh ADCONO ADCON1 General Purpose General Purpose 20h RAM Banked RAM Banked General Purpose General Purpose RAM Ba
69. if two NOP s were used but since the GOTO instruction uses two instruction cycles to execute a two cycle delay was created This created a two cycle delay using only one location of program memory To create a four cycle delay add a label to an existing RETURN instruction in the code In this example the label Rt rn was added to the RETURN of subroutine that already existed somewhere in the code When executing CALL Rtrn the MCU delays two instruction cycles to execute the CALL and two more to execute the RETURN Instead of using four NOP instructions to create a four cycle delay the same result was achieved by adding a single CALL instruction 5 9 2 TIP 2 Optimizing Destinations e Destination bit determines w or F for result e Look at data movement and restructure Example A B gt A MOVF A WMOVF B W ADDWF B WADDWF A F MOVWF A 3 instructions2 instructions Careful use of the destination bits in instructions can save program memory Here register A and register B are summed and the result is put into the A register A destination option is available for logic and arithmetic operations In the first example the result of the ADDWF instruction is placed in the working register A MOVWF instruction is used to move the result from the working register to register A In the second example the ADDWF instruction uses the destination bit to place the result into the A register saving an instruction 5 9 3 TIP 3 Conditional Bit Set
70. instruction had symName as its target but a 2 s compliment encoding of the offset to symName wouldn t fit in the limited number of instruction bits used for the target of a branch instruction DS33014K page 228 2009 Microchip Technology Inc Errors Warnings and Common Problems The _CONFIG_DECL macro can only be specified in one module Found in foo o previously found in bar o This error is issued when MPLAB C18 s CONFIG DECL macro is specified in two separate c files e g foo c and bar c Set configuration bits by using the _CONFIG_DECL macro in only one c file The _CONFIG_DECL macro found in foo o cannot be used with MPASM s __ CONFIG directive found in bar o This error is issued when MPLAB C18 s CONFIG DECL macro is used in a c file e g foo c and MPASM assembler s CONFIG directive is used in a asm file e g bar asm Set configuration bits using either the CONFIG DECL macro from MPLAB C18 orthe CONFIG directive in MPASM assembler The _CONFIG_DECL macro found in foo o cannot be used with either MPLAB C18 s pragma config directive or MPASM s CONFIG directive found in bar o This error is issued when MPLAB C18 s CONFIG DECL macro is used in a c file e g foo c with either MPLAB C18 s pragma config directive in a second c file e g bar c or MPASM assembler s CONFIG directive in a asm file e g bar asm Set configuration bits by using only one of CONFIG DECL pragma
71. is what it does and how it works with other tools Also gives an overview of operation and discusses input output files Chapter 16 Librarian Interfaces reviews how to use the MPLIB librarian with MPLAB IDE and describes how to use the librarian on the command line Chapter 17 Errors contains a descriptive list of the errors generated by the MPLIB librarian Part 4 Utilities e Chapter 18 Utilities Overview and Usage lists the available utilities and describes their usage e Chapter 19 Errors and Warnings contains a descriptive list of the errors generated by the utilities Part 5 Appendices e Appendix A Instruction Sets lists PIC MCU device instruction sets e Appendix B Useful Tables provides some useful tables for code development ASCII Character Set lists the ASCII Character Set Hexadecimal to Decimal Conversions shows how to convert from hexadecimal to decimal numbers O 2009 Microchip Technology Inc DS33014K page 3 CONVENTIONS USED Assembler Linker Librarian User s Guide The following conventions may appear in this documentation DOCUMENTATION CONVENTIONS Description Represents Examples Arial font Italic characters Referenced books MPLAB IDE User s Guide Emphasized text is the only compiler Initial caps A window the Output window A dialog the Settings dialo
72. is to assign address offsets to many labels The list of names end when an endc directive is encountered expr indicates the starting value for the first name in the block If no expression is found the first name will receive a value one higher than the final name in the previous cblock If the first cblock in the source file has no expr assigned values start with zero If increment is specified then the next label is assigned the value of increment higher than the previous label Multiple names may be given on a line separated by commas cblock is useful for defining constants in program and data memory for absolute code generation 4 8 3 Usage This directive is used in the following types of code absolute For information on types of code see Section 1 6 Assembler Operation Use this directive in place of or in addition to the equ directive When creating non relocatable absolute code cblock is often used to define variable address location names Do not use cblock or equ to define variable location names for relocatable code 4 8 4 See Also endc equ DS33014K page 52 2009 Microchip Technology Inc Directives 4 8 5 Simple Example cblock 0x20 name_1 will be assigned 20 name_1 name_2 name_2 21 and so on name_3 name 4 name 4 is assigned 23 endc cblock 0x30 TwoByteVar 0 TwoByteHigh TwoByteLow TwoByteVar 0x30 TwoByteHigh 0x30 TwoByteLow 0x31 Queue QUEUE SIZE QueueHead Queue
73. local Declare Local Macro Variable oooococccccccccccconcoccccnoconananannccnnnnnnnns 92 4 45 macro Declare Macro Definition 94 4 46 maxram Define Maximum RAM Location 95 4 47 maxrom Define Maximum ROM Location 96 4 48 messg Create User Defined Message oocccconccccccccnocccccononnccncnanonccnnanancnnns 96 4 49 noexpand Turn off Macro Expansion occoooccccccccccnnnonconncnnncnnnnnnnnncncnnnnnnns 98 4 50 nolist Turn off Listing OblPUli scosrc to Seige Ee 98 4 51 org Set Program Origin WEE 99 4 52 page Insert Listing Page Eject uso ion 101 4 53 pagesel Generate Page Selecting Code PIC10 12 16 MCUs 102 2009 Microchip Technology Inc Table of Contents 4 54 pageselw Generate Page Selecting Code Using WREG Commands PIC10 12 16 MCUS ondcccccconoccnononaccnonanancncnonannco conan ncnnnnnnnnos 103 4 55 processor Set Processor Type cooocccccnnnccccccooocccnnonanccnnnannnncnnnnnnnnnnnnnns 104 4 56 radix Specify Default Radix AAR 105 4 57 res Reserve Memory Gi iii 106 4 58 set Define an Assembler Variable ooononionnnncnnnnnnnccconencrnncconnnnannnos 108 4 59 space Insert Blank Lennenger deer deed 109 4 60 subtitle Specify Program Subtitle oooccnnnnccnnnncccccnnnnccccccnnnccnncnnnns 109 4 61 title Specify Program Title usina 110 4 62 ud
74. macro PGM CODE This is the beginning of the code section named PGM It is a relocatable code section since no absolute address is given along with directive CODE start movlw 0x88 Initialize reg hi and movwf reg hi reg lo for observation movlw 0x44 movwf reg_lo shift right 3 Shift right 3 times the 16 bit data in reg hi and reg lo This is an example A value 8 will shift data 8 times goto Go to current line loop here end DS33014K page 120 O 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 5 Assembler Examples Tips and Tricks 5 1 INTRODUCTION The usage of multiple MPASM assembler directives is shown through examples Directives are assembler commands that appear in the source code but are not opcodes They are used to control the assembler its input output and data allocation Many of the assembler directives have alternate names and formats These may exist to provide backward compatibility with previous assemblers from Microchip and to be compatible with individual programming practices If portable code is desired it is recommended that programs be written using the specifications contained within this document For a reference listing of all directives discussed in examples here please see Chapter 4 Directives Note Although MPASM assembler is often used with MPLINK object linker MPASM assembler directives are not
75. must also tell the MPLINK linker about the ROM and RAM memory regions available in the target PIC1X MCU device Then it can analyze all the input files and try to fit the application s routines into ROM and assign its data variables into available RAM If there is too much code or too many variables to fit the linker will give an error message The MPLINK linker also provides flexibility for specifying that certain blocks of data memory are reusable so that different routines which never call each other and which don t depend upon this data to be retained between execution can share limited RAM space When using a C compiler libraries are available for most PIC MCU peripheral functions as well as for many standard C functions The linker will only extract and link individual object files that are needed for the current application from the included libraries This means that relatively large libraries can be used in a highly efficient manner The MPLINK linker combines all input files and ensure that all addresses are resolved Any function in the various input modules that attempts to access data or call a routine that has not been allocated or created will cause the linker to generate an error Finally the linker calls the MP2HEX utility to generate the executable output The MPLINK linker also generates symbolic information for debugging your application with MPLAB IDE cof and map files A list file 1st can also be generated by call
76. must specify unique memory ranges which do not overlap Similarly DATABANK and SHAREBANK blocks may not overlap Mixing extended and non extended mode modules not allowed The linker cannot link a mixture of extended mode modules and non extended mode modules Extended and non extended memory modes apply to PIC18 devices When using MPASM to create object file modules extended memory mode is enabled disabled on the command line using the y option In MPLAB IDE select Project gt Build Options MPASM Assembly tab and check uncheck the option Extended Mode When using MPLAB C18 to create object file modules extended memory mode is enabled disabled on the command line using the extended option In MPLAB IDE select Project gt Build Options MPLAB C18 tab and check uncheck the option Extended Mode When using linker scripts those with the suffix e apply to extended mode use MPASM s _ CONFIG directive found in bar o cannot be used with either MPLAB C18 s pragma config directive or MPASM s CONFIG directive found in foo o This error message is issued when MPASM assembler s CONFIG directive is specified ina asm file e g bar asm and MPLAB C18 s pragma config directive is specified in a c file e g foo c Set configuration bits using either MPASM assembler s CONFIG directive or MPLAB C18 s pragma config directive Multiple map files declared filename filename 2 The m lt mapfile gt switch
77. or the EEPROM data memory use with de of a PIC18 device 4 10 4 See Also extern code global idata udata udata_acs udata_ovr udata_shr 4 10 5 Simple Example 00001 LIST P 18Cxx 00002 00003 packed code pack 0x1F0 0001F0 01 02 03 00004 DB I7 20 3 0001F3 04 05 00005 DB 4 5 00006 00007 padded code 000000 0201 0003 00008 DB E 2 3 000004 0504 00009 DB 4 5 00010 00011 END 4 11 config SET PROCESSOR CONFIGURATION BITS Note config is preceded by two underline characters 4 11 1 Syntax Preferred _ config expr _ config addr expr Note PIC18FXXJ devices do not support this directive Use config directive no underline characters Supported fuses expr O 2009 Microchip Technology Inc DS33014K page 55 Assembler Linker Librarian User s Guide 4 11 2 Description Sets the processor s configuration bits Before this directive is used the processor must be declared through the command line the list directive the processor directive or Configure gt Select Device if using MPLAB IDE Refer to individual PIC1X microcontroller data sheets for a description of the configuration bits MCUs with a single configuration register Sets the processor s configuration bits to the value described by expr MCUs with multiple configuration registers For the address of a valid configuration byte specified by addr sets the configuration bits to the value described by expr Note Configuration bits mus
78. processor type to processor type 4 55 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is not generally used as the processor is set in MPLAB IDE Configure gt Device If it must be set in code use processor or the list directive option p to set the processor 4 55 4 See Also list 4 55 5 Simple Example processor 16f877a Sets processor to PIC16F877A DS33014K page 104 O 2009 Microchip Technology Inc Directives 4 56 radix SPECIFY DEFAULT RADIX 4 56 1 Syntax radix default_radix 4 56 2 Description Sets the default radix for data expressions The default radix is hex Valid radix values are e hex hexadecimal base 16 e dec decimal base 10 e oct octal base 8 You may also specify a radix using the list directive For specifying the radix of constants see Section 3 4 Numeric Constants and Radix 4 56 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation For many programs the default radix hex is used and there is no need to set the radix However if you need to change the radix in your program you should exercise care as all numeric values following the radix declaration will use that radix value See the radix example for more on the implication
79. program memory regions can only be populated if the CODE directive used in the source files specifies placement of code within these protected memory regions This linker script file is designed to accommodate all three boot loader design considerations demonstrated in this chapter boot Ikr The linker script file for boot loader and application code example projects CODEPAGE NAME vectors START 0x0 END 0x29 PROTECTED CODEPAGE NAME boot START 0x2A END 0x1FF PROTECTED IFDEF DEBUGCODESTART CODEPAGE NAME page START 0x200 END _CODEEND CODEPAGE NAME debug START _DEBUGCODESTART END _CEND PROTECTED ELSE CODEPAGE NAME page START 0x200 END 0x1FFFF FI 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 DS33014K page 212 O 2009 Microchip Technology Inc Sample Applications 13 5 2 3 EXAMPLE 1 ASSEMBLER BOOT LOADER SOURCE CODE In this example the boot loader is a single source file that will not be linked with any other source code at build time The CODE directives used in the boot loader source code instructs the linker to place the reset and interrupt vectors at their appropriate program memory locations for the PIC microcontroller and to place the starting location of the boot loader executable code just above this region starting at location 002Ah
80. start of data memory at 0xF00000 For other PIC1X MCU devices make sure to specify the start of data memory at 0x2100 Always check your device programming specification for the correct address 4 17 4 See Also data db dt dtm dw code pack 4 17 5 Simple Example Initialize EEPROM data on a PIC16 device org 0x2100 de My Program v1 0 0 DS33014K page 64 2009 Microchip Technology Inc Directives 4 18 define 4 17 6 PIC16 Application Example de include p16f877a inc Include standard header file for the selected device org 0x2100 The absolute address 2100h is mapped to the 0000 location of EE data memory You can create a data or character table starting from any address in EE data memory ch tbl2 de PICmicro 8 EE data memory locations starting from 0 will be filled with 8 ASCIT characters end 4 17 7 PIC18 Application Example de include p18f452 inc Include standard header file for the selected device org 0xF00000 The absolute address F00000h is mapped to the 0000 location of EE data memory for PIC18 devices You can create a data or character table starting from any address in EE data memory ch _tb12 de PICmicro 8 EE data memory locations starting from 0 will be filled with 8 ASCII characters end DEFINE A TEXT SUBSTITUTION LABEL 4 18 1 Syntax define name string 4 18 2 Description This directive defines a text
81. substitution string Wherever name is encountered in the assembly code string will be substituted Using the directive with no string causes a definition of name to be noted internally and may be tested for using the ifdef directive This directive emulates the ANSI C standard for define Symbols defined with this method are not available for viewing using MPLAB IDE 4 18 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation 2009 Microchip Technology Inc DS33014K page 65 Assembler Linker Librarian User s Guide define is useful for defining values for constants in your program Note A processor specific include file exists with predefined SFR names It is recommended that you use this file instead of defining the variables your self See include for how to include a file in your program This directive is also useful with the ifdef and ifndef directives which look for the presence of an item in the symbol table 4 18 4 See Also undefine include ifdef ifndef 4 18 5 Simple Example define length 20 define control 0x19 7 define position X Y Z Y 2 Z X test_label dw position 1 length 512 bsf control set bit 7 in 19 4 18 6 Application Example define undefine This example shows the usage of define and undefine directives A symbol name previously defined with the de
82. the Macro Definition TEST CODE for Unpack32 MACRO Put Unpack Macro here Do nothing loop forever O 2009 Microchip Technology Inc DS33014K page 153 Assembler Linker Librarian User s Guide 7 6 2 Constant Compare As another example if the following macro were written include picl6f877a inc compare file to constant and jump if file gt constant cfl_jge macro file con jump to movlw con amp Oxff subwf file w btfsc status carry goto jump to endm and invoked by cfl jge switch val max switch switch on it would produce movlw max switch amp Oxff subwf switch val w btfsc status carry goto switch on DS33014K page 154 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 8 Errors Warnings Messages and Limitations 8 1 INTRODUCTION Error messages warning messages and general messages produced by the MPASM assembler are listed and detailed here These messages always appear in the listing file directly above each line in which the error occurred Limitations of the assembler tool are also listed The messages are stored in the error file err if no MPASM assembler options are specified If the e option is used turns error file off then the messages will appear on the screen If the q quiet mode option is used with the e then the messages will not display on the screen or in an error file The messages will still a
83. the memory selection option for the PIC17 or PIC18 device where memory may reside on the target board or where all program memory may be supplied by the Emulator Opcodes Operational Codes See Mnemonics Operators Symbols like the plus sign and the minus sign that are used when forming well defined expressions Each operator has an assigned precedence that is used to determine order of evaluation OTP One Time Programmable EPROM devices that are not in windowed packages Since EPROM needs ultraviolet light to erase its memory only windowed devices are erasable Pass Counter A counter that decrements each time an event such as the execution of an instruction at a particular address occurs When the pass count value reaches zero the event is satisfied You can assign the Pass Counter to break and trace logic and to any sequential event in the complex trigger dialog DS33014K page 276 2009 Microchip Technology Inc Glossary PC Personal Computer or Program Counter PC Host Any IBM or compatible personal computer running a supported Windows operating system PIC MCUs PIC microcontrollers MCUs refer to all Microchip microcontroller families PIC1X MCUs refer to 8 bit PIC10 12 16 18 devices excluding 16 bit PIC24 devices PICSTART Plus A developmental device programmer from Microchip Programs 8 14 28 and 40 pin PIC1X microcontrollers Must be used with MPLAB IDE Software Pod E
84. the timing for the alternating output If LEDs were attached to Port B they would flash 1 0n O off The type of PIC1X MCU is set in MPLAB IDE and so does not need to be set in code However if you wish to specify the MCU as well as radix in code you may do so using the processor and radix directives or list command i e list p 16f877a r hex The application is written as relocatable code e you must use both the assembler and linker to generate the executable See PIC1X MCU Language Tools and MPLAB IDE for information on how to set up a project using assembler files and a linker script The standard header file for the processor selected is included using include Registers are assigned using the udata res and equ directives Sections of code are created using the code statement Data memory banking and program memory paging is accomplished as needed using banksel and pagesel directives Finally the program is finished with an end 5 3 2 Commented Code Listing ekxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk MPASM Assembler Control Directives Example Program 1 Alternate output on Port B between 1 s and O s PRR RR KR RK KERR kk kkk kkk kkk kk kkk kkk kkk k kkk k include p16f877a inc Include header file MPLAB IDE has many header files inc available for supported devices These can be found in the installation directory See Section 5 3 3 Header Files for more on headers 2009 Mi
85. to control how code is assembled not how it behaves at run time Use this directive for removing or adding code during debugging without the need to comment out large blocks of code 4 40 4 See Also define undefine else endif ifndef 4 40 5 Simple Example define testing 1 set testing on ifdef testing lt execute test code gt this path would be executed endif 4 40 6 Application Example ifdef include p16f877a inc define AlternateASM Comment out with if extra features not desired ifdef AlternateASM MyPort equ PORTC Use Port C if AlternateASM defined MyTris equ TRISC TRISC must be used to set data direction for PORTC else MyPort equ PORTB Use Port B if AlternateASM not defined MyTris equ TRISB TRISB must be used to set data direction for PORTB endif banksel MyTris clrf MyTris Set port to all outputs banksel MyPort Return to bank used for port movlw 55h Move arbitrary value to W reg movwf MyPort Load port selected with 55h end DS33014K page 88 O 2009 Microchip Technology Inc Directives 4 40 7 Application Example 2 ifdef This program uses the control directive define along with the ifdef else and endif directives to selectively assemble code for use with either an emulator or an actual part The control directive define is used to create a flag to indicate how to assemble the code for the emulator or for the actual device include p18f452 inc
86. was specified more than once Multiple output files declared filename filename2 The o lt outfile gt switch was specified more than once Multiple STACK definitions A STACK directive occurs more than once in the linker command file or included linker command files Remove the multiple STACK directives No input object files specified No input object or library file was specified to the linker Enter files to link Overlapping definitions of SHAREBANK memName A SHAREBANK directive specifies a range of addresses that overlap a previous definition Overlaps are not permitted DS33014K page 226 2009 Microchip Technology Inc Errors Warnings and Common Problems PCL TOSH TOSU TOSL cannot be used as the destination of a MOVFF or MOVSF instruction The MOVFF instruction has unpredictable results when its destination is the PCL TOSH TOSU or TOSL registers MPLINK will not allow the destination of a MOVFF instruction to be replaced with any of these addresses Processor types do not agree across all input files Each object module and library file specifies a processor type or a processor family All input modules processor types or families must match Section absolute access overlay share types for secName do not match across input files A section with the name secName occurs in more than one input file However in some files it is marked as either an absolute access overlay or shared se
87. 0 126 141 Hex Files coccion eine ee 12 30 174 Hexadecimal to Decimal Conversion 268 Mig EE 40 143 l ID Locations cccccccccccnccoonnnccnnnnnnncnonononaninonennnnns 85 146 Matar 82 145 data dui 84 OT 85 A Rio a A ee 86 O 68 le WEE 70 ie EE 88 IFDEF ELSE FI in Linker Scripts seeeeeeeneeeeae 187 Late ege rece da de sl en ad e MEE eee 89 INGLUDE es iaa ott ot Mr 183 BTE LU 10 EEN 90 Include Additional Source File 90 DS33014K page 285 Assembler Linker Librarian User s Guide WMG MSc FS esis abies e eas ae 28 Increment oocccnnnnnnnncncnnnccnnnnnnonnnononononnnronnnnnnnnnonnnnnnanaos 41 Initialized Data 194 Input Output Files Assembler rate strate maine 26 A EE 237 DAKO ists ice ae 173 Instruction Operands A 142 Instruction Sets 251 MEN dere TEE 253 259 12 Bit 14 Bit Cores 259 Tt te E A 254 PIC18 Device ere 260 Internet Address Microchip 6 Interrupt Handling PIC16 Example c oooooccccnoccccn 75 81 99 124 129 PIC18 Example 81 101 L Labels E 27 EBPA TE units ce mae a GR ee ITA mt 182 Library File ocios 12 174 237 Library Pati int 196 197 Limitations Assemble eran ee de everecbouedssevessavadacta tue 167 Linker Processinmg noo 191 Linker Scripts isinna 12 174 181 Debug Tolima aa 181 Standard WEE
88. 009 Microchip Technology Inc DS33014K page 191 Assembler Linker Librarian User s Guide 12 3 LINKER ALLOCATION ALGORITHM The linker allocates memory areas to allow maximum control over the location of code and data called sections in target memory There are four kinds of sections that the linker handles 1 Absolute Assigned 2 Absolute Unassigned 3 Relocatable Assigned 4 Relocatable Unassigned An absolute section is a section with a fixed absolute address that cannot be changed by the linker A relocatable section is a section that will be placed in memory based on the linker allocation algorithm An assigned section is a section that has been assigned a target memory block in the linker command file An unassigned section is a section that has been left unassigned in this file The linker performs allocation of absolute assigned and unassigned sections first relocatable assigned sections next and relocatable unassigned sections last The linker also handles stack allocation 12 3 1 Absolute Allocation Absolute sections may be assigned to target memory blocks in the linker command file But since the absolute section s address is fixed the linker can only verify that if there is an assigned target memory block for an absolute section the target memory block has enough space and the absolute section does not overlap other sections If no target memory block is assigned to an absolute section the linker tri
89. 014K page 185 Assembler Linker Librarian User s Guide 11 6 LOGICAL SECTION DEFINITION Logical sections are used to specify which of the defined memory regions should be used for a portion of source code To use logical sections define the section in the linker script file with the SECTION directive and then reference that name in the source file using that language s built in mechanism e g pragma section for MPLAB C18 The section directive defines a section by specifying its name and either the block of program memory in ROM or the block of data memory in RAM which contains the section SECTION NAME secName ROM memName RAM memName where secName is an ASCII string used to identify a section memName is a previously defined ACCESSBANK SHAREBANK DATABANK or CODEPAGE The ROM attribute must always refer to program memory previously defined using a CODEPAGE directive The RAM attribute must always refer to data memory previously defined with a ACCESSBANK DATABANK Or SHAREBANK directive EXAMPLE 11 7 LOGICAL SECTION DEFINITION To specify that a section whose name is filter coeffs be loaded into the region of program memory named constants the following line should be added to the linker command file SECTION NAME filter coeffs ROM constants EXAMPLE 11 8 LOGICAL SECTION USAGE To place MPASM source code into a section named filter _coeffs use the following line prior to the desired source code filter
90. 0404050607070883 0300390008080AAA 00000001FF 1 7 5 8 INTEL HEX 32 FORMAT The extended 32 bit address hex format is similar to the hex 8 format except that the extended linear address record is output also to establish the upper 16 bits of the data address This is mainly used for 16 bit core devices since their addressable program memory exceeds 64 kbytes Each data record begins with a 9 character prefix and ends with a 2 character checksum Each record has the following format BBAAAATTHHHH HHHCC where BB A two digit hexadecimal byte count representing the number of data bytes that will appear on the line AAAA A four digit hexadecimal address representing the starting address of the data record TE A two digit record type 00 Data record 01 End of File record 02 Segment address record 04 Linear address record HH A two digit hexadecimal data byte presented in low byte high byte combinations CC A two digit hexadecimal checksum that is the two s complement of the sum of all preceding bytes in the record 2009 Microchip Technology Inc DS33014K page 31 Assembler Linker Librarian User s Guide 1 7 6 Cross Reference File xrf A cross reference file contains a listing of all symbols used in the assembly code The file has the following format The symbols are listed in the Label column sorted by name The Type column defines the type of symbol A list of Label Types i
91. 0x7FF START 0x800 END 0x8FF START 0x900 END 0x9FF START 0xA00 END 0xAFF START 0xB00 END 0xBFF START 0xC00 END 0xCFF START 0xD00 END 0xDFF START 0xE00 END _DATAEND START _DEBUGDATASTART END _DEND PROTECTED START 0xE00 END 0xEFF START 0xF00 END 0xF5F START 0xF60 END 0xFFF PROTECTED ROM config STACK SIZE 0x100 RAM gpr13 HELSE STACK SIZE 0x100 RAM gpr14 HFI FI DS33014K page 190 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 12 Linker Processing INTRODUCTION Understanding how MPLINK linker processes files and information can be useful to keep in mind when writing and structuring your application code Topics covered in this chapter e Linker Processing Overview e Linker Allocation Algorithm e Relocation Example e Initialized Data e Reserved Section Names 12 2 LINKER PROCESSING OVERVIEW A linker combines multiple input object modules into a single executable output module The input object modules may contain relocatable or absolute sections of code or data which the linker will allocate into target memory The target memory architecture is described in a linker command file This linker command file provides a flexible mechanism for specifying blocks of target memory and for mapping sections to the specified memory blocks If the linker cannot find a block of target memory in which to allocate a section an error is generated The linker combine
92. 188 code BA 142 146 _ DEBUGDATASTART oa innsnnnneennenannnnnnnnnnennnne 188 Code Section Vg AR Ms AS AE i 54 127 EXTENDEDMODE 188 eat EE SCENE mplink Ge 196 Code Section Packed 55 vu SERPENT ees EMM NA 12 code pack sisi ee n eh nine nn 55 EE i Codo AB REESEN 24 142 145 147 148 S RE A e EE E EE 25 142 145 147 EE ie Cala A cee 149 de e Defining Module ssc 2 146 EE Library ROUTINE 149 O A Referencing Moche 146 Ce e CODEPAGE A A 185 186 e DEER eee 12 include 90 141 COFF Object Module File AAA 174 pai SNS sedis tees ees EE e Coinmand Line Interface Ga ale e Pee ar eel Acree 40 Desember 22 gt uge eg 35 onu ere pipes A DEA sito dt OA DA A LINKS RSS RE SE 179 Absolute Code Generating 24 Command Line Options Librarian Access Section A he re A E 240 Overlayed EEN 46 Ce EE 240 EEN 46 WE 240 ACCESSBANK coronan ono nono nono coronan 183 186 A A 240 Accessing Labels From Other Modules 146 A A a lia ad Behan 240 Allocation Pass tl e eeh Ben ee eege e 240 INS CT 192 E el unn ici 28 Relocatable A ue Au ds 192 Common Problems SPC hes ttc ae estate tenant a ea NP 192 ELT EE A 231 AND Odile ee Pe ale 41 Compiler 12 14 15 Arithmatic Operators ooooocicicnioconoccononconcocononcnnconanons 40 Conditional Assembly Directives sssssssssssssssreseee 44 ASCII Character Set 267 CISE intact e 68 STEEL n a a a a N 70 B O 71 badram oeesoennn
93. 18f452 inc Include standard header file for the selected device code protect disabled CONFIG CPO OFF Oscillator switch enabled RC oscillator with OSC2 as I O pin CONFIG OSCS ON OSC LP Brown OutReset enabled BOR Voltage is 2 5v CONFIG BOR ON BORV 25 Watch Dog Timer enable Watch Dog Timer PostScaler count 1 128 CONFIG WDT ON WDTPS 128 CCP2 pin Mux enabled CONFIG CCP2MUX ON Stack over underflow Reset enabled CONFIG STVR ON 4 13 constant DECLARE SYMBOL CONSTANT 4 13 1 Syntax constant label expr label expr 4 13 2 Description Creates symbols for use in MPASM assembler expressions Constants may not be reset after having once been initialized and the expression must be fully resolvable at the time of the assignment This is the principal difference between symbols declared as constant and those declared as variable or created by the set directive Otherwise constants and variables may be used interchangeably in absolute code expressions 4 13 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation Although equ or cblock is more generally used to create constants the constant directive also works 4 13 4 See Also set variable equ cblock DS33014K page 58 2009 Microchip Technology Inc Directives 4 13 5 Examples See the examples under variable 4 14 da STOR
94. 33014K page 48 O 2009 Microchip Technology Inc 4 6 6 Directives Application Example bankisel This program demonstrates the bankisel directive This directive generates the appropriate code to set clear the IRP bit of the STATUS register for an indirect access include p16f877a inc groupl udata groupl _varl groupl var2 group2 udata group2_varl group2_var2 RST CODE pagesel goto PGM CODE start movlw 0x20 movwf FSR bankisel clrf INDF incf FSR F clrf INDF movwf FSR bankisel clrf INDF incf FSR F clrf INDF goto end 2009 Microchip Technology Inc 0x20 res 1 res 1 0x120 res 1 res 1 0x0 start start groupl1_varl group2 varl Include stan for the sele groupl data starting at groupl varl groupl var group2 data starting at group2 varl group2_var2 The code sec jis placed at location 0x0 instructions code section Jumps to the start dard header file cted device stored at locations 0x20 IRP bit 0 located at 0x20 located at 0x21 stored at locations 0x120 IRP bit 1 located at 0x120 located at 0x121 tion named RST program memory The next two are placed in RST location labelled This is the beginning of the code section ja relocatabl since no abs named PGM It is e code section olute address is given along with directive CODE This part of variables gr groupl var Go to
95. 4 2 5 Macro Directives Macro directives control the execution and data allocation within macro body definitions e endm End a Macro Definition p 70 exitm Exit froma Macro coiiinsin tl ia p 75 e expand Expand Macro Listing p 77 e local Declare Local Macro Variable p 92 e macro Declare Macro Definition p 94 e noexpand Turn off Macro Expansion p 98 4 2 6 Object File Directives Object file directives are used only when creating an object file e access our Begin an Object File Overlay Section in Access RAM PIC18 MEUS tee eal scar bets a E a a a e p 46 e code Begin an Object File Code Gecton nn p 54 e code pack Begin an Object File Packed Code Section PIC18 MCUs p 55 e extern Declare an Externally Defined Label p 78 global Export a Laurita p 82 e idata Begin an Object File Initialized Data Gecton p 82 e idata_acs Begin an Object File Initialized Data Section in Access RAM PIC18 MEUS ass p 84 e udata Begin an Object File Uninitialized Data Section p 110 udata_acs Begin an Object File Access Uninitialized Data Section PIC18 MCUS cocida p 111 udata_ovr Begin an Object File Overlaid Uninitialized Data Section p 113 udata_shr Begin an Object File Shared Uninitialized Data Section PIC12 16 MEU iii A on all p 115 O 2009 Microchip Technology Inc DS33014K page 45 Assembler L
96. 45 Unmatched ENDM endm found without a macro definition 146 Unmatched EXITM exitm found without a macro definition 147 Directive operation only allowed when generating an object file The instruction operand shown only has meaning when a linkable object file is generated It cannot be used when generating absolute code 148 Expanded source line exceeded 200 characters The maximum length of a source line after tdefine and macro parameter substitution is 200 characters Note that define substitution does not include comments but macro parameter substitution does 149 Directive only allowed when generating an object file Certain directives such as global and extern only have meaning when a linkable object file is generated They cannot be used when generating absolute code 150 Labels must be defined in a code or data section when making an object file When generating a linkable object file all data and code address labels must be defined inside a data or code section Symbols defined by the equ and set directives can be defined outside of a section 151 Operand contains unresolvable labels or is too complex When generating an object file operands must be of the form high 1low relocatable address label offsef O 2009 Microchip Technology Inc DS33014K page 159 Assembler Linker Librarian User s Guide 152 Executable code and data must be defined in an appropriate section When generating a linkable o
97. 4800 9600 or 19200 Hz oO GS DS33014K page 72 2009 Microchip Technology Inc Directives RST CODE 0x0 The code section named RST is placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start Start PGM CODE This is the beginning of the code section named PGM It is a relocatable code section Since no absolute address is given along with directive CODE start goto Go to current line loop here end 4 30 errorlevel SET MESSAGE LEVEL 4 30 1 Syntax errorlevel 0 1 2 msgnum msgnum 4 30 2 Description Sets the types of messages that are printed in the listing file and error file Setting Affect 0 Messages warnings and errors printed 1 Warnings and errors printed 2 Errors printed msgnum Inhibits printing of message msgnum msgnum Enables printing of message msgnum 4 30 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation Errors cannot be disabled Warnings may be disabled using setting 2 Messages may be disabled using settings 1 or 2 Also messages may be disabled individually However the setting of 0 1 or 2 overrides individual message disabling or enabling Be careful about disabling warnings and messages as this can make debuggi
98. 8 14 BIT BYTE ORIENTED SKIP OPERATIONS Hex Mnemonic Description Function OBdf DECFSZ f d Decrement f skip if zero f 1 gt d skip if 0 OFdf INCFSZ f d Increment f skip if zero f 1 gt d skip if O TABLE A 9 14 BIT BIT ORIENTED FILE REGISTER OPERATIONS Hex Mnemonic Description Function 4bf BCF f b Bit clear f 0 gt f b 5bf BSF f b Bit set f 1 gt f b TABLE A 10 14 BIT BIT ORIENTED SKIP OPERATIONS Hex Mnemonic Description Function 6bf BTFSC f b Bit test skip if clear skip if f b 0 Tht BTFSS f b Bit test skip if set skip if f b 1 TABLE A 11 14 BIT LITERAL OPERATIONS Hex Mnemonic Description Function 3Ekk ADDLW kk Add literal to W kk WREG gt WREG 39kk ANDLW kk AND literal and W kk AND WREG gt WREG 38kk IORLW kk Incl OR literal and W kk OR WREG gt WREG 002k MOVLB k Move literal to BSR k gt BSR 31 1 kk MOVLP kk Move literal to PCLATH kk gt PCLATH 30kk MOVLW kk Move Literal to W kk gt WREG 3Ckk SUBLW kk Subtract W from literal kk WREG gt WREG 3Akk XORLW kk Exclusive OR literal and W kk XOR WREG gt WREG Note 1 Operation in 14 bit extended instruction set but not 14 bit instruction set TABLE A 12 14 BIT CONTROL OPERATIONS Hex Mnemonic Description Function 32kk BRA kk Relative branch PC kk gt PC 000B BRW Relative branch with Wl PC W gt PC 2 0 kkk CALL kkk Call subroutine PC 1 gt TOS kkk PC 000A CALLW Call subroutine with Wi PC 1 TOS W gt PC 2 1 kkk GOTO kkk Goto address k is
99. 8F8722 Program Linker Script Section Memory Not debu ha extended Template Source Code Section Address g 0x0000 page ROM code space RESET_VECTOR Reset vector 0x0007 0x0008 HI_INT_VECTOR High priority interrupt 0x0017 vector 0x0018 LOW_INT_VECTOR Low priority interrupt vector 0x0019 Hoh Int High priority interrupt handler 0x01FFFF Low Int Low priority interrupt handler Main Main application code 0x200000 idlocs ID locations 0x200007 0x300000 config Configuration bits CONFIG Configuration settings 0x30000D Ox3FFFFE devid Device ID Ox3FFFFF 0xF00000 eedata EEPROM data DATA_EEPROM Data EEPROM OxFOO3FF DS33014K page 200 2009 Microchip Technology Inc Sample Applications 13 3 2 For this sample application assembly code is added to the template but the generic linker script is not edited In general you will modify templates to create your own application code but you should not need to modify the generic linker script file Still there are reasons why you might want to customize a linker script as shown in the other sample applications Modifying Templates and Linker Script Files In addition a case where you might want to modify the linker script is when you want to use a C code data object that is larger than 256 bytes such as a large array This application is discussed in the MPLAB C Compiler for PIC18 MCUs Getting
100. A command that rebuilds an application re compiling only those source files that have changed since the last complete compilation MCU Microcontroller Unit An abbreviation for microcontroller Also uC Message Text displayed to alert you to potential problems in language tool operation A message will not stop operation Microcontroller A highly integrated chip that contains a CPU RAM program memory I O ports and timers Microcontroller Mode One of the possible program memory configurations of PIC17 and PIC18 microcontrollers In microcontroller mode only internal execution is allowed Thus only the on chip program memory is available in microcontroller mode Microprocessor Mode DS33014K page 274 2009 Microchip Technology Inc Glossary One of the possible program memory configurations of PIC17 and PIC18 microcontrollers In microprocessor mode the on chip program memory is not used The entire program memory is mapped externally Mnemonics Text instructions that can be translated directly into machine code Also referred to as Opcodes MPASM Assembler Microchip Technology s relocatable macro assembler for PIC1X microcontroller devices KeeLoq devices and Microchip memory devices MPLAB ASM30 Microchip s relocatable macro assembler for dsPIC30F digital signal controller devices MPLAB C1X Refers to both the MPLAB C17 and MPLAB C18 C compilers from Microchip MPLAB C17 is the C compiler for PIC17
101. ALL instruction the next breakpoint will be set at the instruction after the CALL If for some reason the subroutine gets into an endless loop or does not return properly the next breakpoint will never be reached Select Halt to regain control of program execution Step Out Step Out allows you to step out of a subroutine which you are currently stepping through This command executes the rest of the code in the subroutine and then stops execution at the return address to the subroutine Stimulus Input to the simulator i e data generated to exercise the response of simulation to external signals Often the data is put into the form of a list of actions in a text file Stimulus may be asynchronous synchronous pin clocked and register Stopwatch A counter for measuring execution cycles Symbol 2009 Microchip Technology Inc DS33014K page 279 Assembler Linker Librarian User s Guide A symbol is a general purpose mechanism for describing the various pieces which comprise a program These pieces include function names variable names section names file names struct enum union tag names etc Symbols in MPLAB IDE refer mainly to variable names function names and assembly labels The value of a symbol after linking is its value in memory System Window Conirol The system window control is located in the upper left corner of windows and some dialogs Clicking on this control usually pops up a menu that has the items
102. AP decfsz LOOPCOUNT F goto LOOPUMO808A clrf AARGBO retlw 0x00 LUMO 808NAP bef STATUS C goto LUM0808NA LOOPUMO808 rrf BARGBO F btfsc STATUS C addwf AARGBO F LUMO808NA rrf AARGBO F Erf AARGB1 F decfsz LOOPCOUNT F goto LOOPUMO808 retlw 0 END DS33014K page 150 O 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 7 Macro Language 7 1 INTRODUCTION Macros are user defined sets of instructions and directives that will be evaluated in line with the assembler source code whenever the macro is invoked Macros consist of sequences of assembler instructions and directives They can be written to accept arguments making them quite flexible Their advantages are e Higher levels of abstraction improving readability and reliability e Consistent solutions to frequently performed functions e Simplified changes e Improved testability Applications might include creating complex tables frequently used code and complex operations Topics covered in this chapter e Macro Syntax e Macro Directives Defined e Macro Definition e Macro Invocation e Macro Code Examples 7 2 MACRO SYNTAX MPASM assembler macros are defined according to the following syntax label macro argl arg2 argn endm where label is a valid assembler label that will be the macro name and arg is any number of optional arguments supplied to the macro that will fit on the source
103. ASM assembler expressions only The symbols created with this directive do not occupy any physical memory location on the microcontroller include p16f877a inc Include standard header file for the selected device perimeter set 0 The label perimeter is assigned value 0 area set 0 The label area is assigned value 0 The value assigned by the set directive may be reassigned later lngth equ 50H The label lngth is assigned the value 50H wdth equ 25H The label wdth is assigned the value 25H A __ ___ _ __ _ __ __ __ __ _ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _______ __ _ __ ______a o oeo_____Q__ _z gt EEEPo i DS33014K page 108 O 2009 Microchip Technology Inc Directives The value assigned by the equ directive may not be reassigned later perimeter set 2 lngth wdth Both perimeter and area set Ingth wdth area values are reassigned end 4 59 space INSERT BLANK LISTING LINES 4 59 1 Syntax Preferred space expr Supported spac expr 4 59 2 Description and Usage Insert expr number of blank lines into the listing file This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation 4 59 3 See Also list 4 59 4 Simple Example space 3 Inserts three blank lines 4 60 subtitle SPECIFY PROGRAM SUBTITLE 4 60 1 Syntax Preferred subtitle sub_text Supported
104. Build All to build the project Note You also may right click on the project name Example mcp in the project tree and select Build All from the pop up menu The Output window should appear at the end of the build and display the build results FIGURE 4 OUTPUT WINDOW BUILD TAB Build Version Control Find in Files Clean Deleting intermediary and output files Clean Done Executing C Program Files MPLAB IDE MCHIP_Tools mpasmwin exe q p16F84A Example asm l Example lst e E Executing C Program Files MPLAB IDE MCHIP_Tools mpasmwin exe q p16F84A Example2 asm I Example2 Ist fe Executing C Program Files MPLAB IDE MCHIP_Tools mplink exe C Program Files MPLAB IDE MCHIP_Tools LKR 1 MPLINK 3 70 01 Linker Copyright c 2004 Microchip Technology Inc Errors SCH MP2COD 3 70 01 COFF to COD File Converter Copyright c 2004 Microchip Technology Inc Errors 30 MP2HEX 3 70 01 COFF to HEX File Converter Copyright c 2004 Microchip Technology Inc Errors RAT Loaded D Projects32 Example cof BUILD SUCCEEDED Mon May 17 14 41 31 2004 Build Errors If the build did not complete successfully check these items 1 Review the previous steps in this example Make sure you have set up the lan guage tools correctly and have all the correct project files and build options 2 If you modified the sample source code examine the Build tab of the Output win dow for syntax
105. C16 devices bit set clear instructions on the STATUS register will be generated For PIC16 extended and PIC18 devices a mov1b will be generated If the device contains only one bank of RAM no instructions will be generated 4 7 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive may be used with all PIC1X devices This directive is not needed for variables in access RAM PIC18 devices 4 7 4 See Also bankisel pagesel 4 7 5 Simple Example banksel Varl Select the correct bank for Vari movwf Vari Write to Varl DS33014K page 50 O 2009 Microchip Technology Inc Directives 4 7 6 Application Example banksel This program demonstrates the banksel directive This directive generates the appropriate code to set clear the RPO and RP1 bits of the STATUS register include p16f877a inc Include standard header file for the selected device group1 udata 0x20 groupl data stored at locations starting at 0x20 bank 0 group1_varl res 1 group1_varl located at 0x20 groupl var2 res 1 groupl var2 located at 0x21 group2 udata 0xA0 group2 data stored at locations starting at OxAO bank 1 group2_varl res 1 group2_var2 res 1 RST CODE 0x0 The code section named RST jis placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel s
106. Clear e To move single bit of data from REGA to REGB e Precondition REGB bit e Test REGA bit and fix REGB if necessary BTFSS REGA 2BCF REGB 5 BCF REGB 5BTFSC REGA 2 BTFSC REGA 2BSF REGB 5 BSF REGB 5 4 instructions3 instructions One technique for moving one bit from the REGA register to REGB is to perform bit tests In the first example the bit in REGA is tested using a BTFSS instruction If the bit is clear the BCF instruction is executed and clears the REGB bit and if the bit is set the instruction is skipped The second bit test determines if the bit is set and if so will execute the BSF and set the REGB bit otherwise the instruction is skipped This sequence requires four instructions DS33014K page 138 O 2009 Microchip Technology Inc Assembler Examples Tips and Tricks A more efficient technique is to assume the bit in REGA is clear and clear the REGB bit and test if the REGA bit is clear If so the assumption was correct and the BSF instruction is skipped otherwise the REGB bit is set The sequence in the second example uses three instructions because one bit test was not needed One important point is that the second example will create a two cycle glitch if REGB is a port outputting a high This is caused by the BCF and BTFSC instructions that will be executed regardless of the bit value in REGA 5 9 4 TIP 4 Swap File Register with W The following macro swaps the contents of W and REG without using
107. Could not open hex file filename for writing The hex file was never created due to other errors or an existing hex file is write protected 19 3 COFF TO COD CONVERSION ERRORS Source file filename name exceeds file format maximum of 63 characters The COD file name including the path has a 63 character limit Coff file filename must contain at least one code or romdata section In order to convert a COFF file to a COD file the COFF file must have either a code or a romdata section Could not open list file filename for writing Verify that if filename exists and that it is not a read only file 19 4 COFF TO COD CONVERTER WARNINGS Could not open source file filename This file will not be present in the list file The referenced source file could not be opened This can happen if an input object library module was built on a machine with a different directory structure If source level debugging for the file is desired rebuild the object or library on the current machine 2009 Microchip Technology Inc DS33014K page 247 Assembler Linker Librarian User s Guide 19 5 COD FILE ERRORS All the COD file errors listed below indicate an internal error in the file s contents Please contact Microchip support if any of these errors are generated e Cod file filename does not have a proper debug message table e Cod file filename does not have a proper Index e Cod file file
108. E Chapter 10 Linker Interfaces INTRODUCTION MPLINK object linker usage is discussed When MPLAB IDE or MPLAB C18 is installed the MPLINK linker mp1 ink exe is also installed Topics covered in this chapter e MPLAB IDE Interface Command Line Interface e Command Line Example 10 2 MPLAB IDE INTERFACE The MPLINK linker is commonly used with the MPASM assembler in an MPLAB IDE project to generate relocatable code For more information on this use see PIC1X MCU Language Tools and MPLAB IDE The linker may also be used in MPLAB IDE with the MPLAB C18 C compiler For more information on Microchip compilers see the MPLAB C18 C compiler documentation listed in Recommended Reading 10 3 COMMAND LINE INTERFACE MPLINK linker can be used in MPLAB IDE or directly from a command line When used in MPLAB IDE all of MPLINK linker s options are available through the MPLINK Linker tab accessed from the Project gt Build Options dialog When using MPLINK linker in a batch file or directly from the command line the linker is invoked with the following two syntaxes mplink cmdfiles objfiles libfiles options mplink ppartnumber objfiles libfiles options cmdfileis the name of a linker command file All linker command files must have the extension 1kr partnumber indicates the part number for the PIC MCU s generic linker script to build the project The linker will search the 1kr directory to find the gener
109. E STRINGS IN PROGRAM MEMORY PIC12 16 MCUs 4 14 1 Syntax label da expr expr2 exprn 4 142 Description da Data ASCII Generates a packed 14 bit number representing two 7 bit ASCII characters 4 143 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is useful for storing strings in memory for PIC16 MCU devices 4 14 4 Simple Examples e da abcdef will put 30E2 31E4 32E6 into program memory da 12345678 0 will put 18B2 19B4 1AB6 1BB8 0000 into program memory da OxFFFF will put 0x3FFF into program memory 4 14 5 Application Example da This example shows the usefulness of directive da in storing a character string in the program memory of 14 bit architecture devices This directive generates a packed 14 bit number representing two 7 bit ASCII characters include p16f877a inc Include standard header file for the selected device ORG 0x0000 The following code will be programmed in reset address 0 goto start Jump to an address labelled start start Write your main program here goto Go to current line loop here ORG 0x1000 Store the string starting from 1000H Ch_stng da PICmicro eee 2009 Microchip Technology Inc DS33014K page 59 Assembler Linker Librarian User s Guide Directive da produces four 14 bit numbers 2849 21ED 34E3 and 396
110. EJECT 4 52 1 page Syntax 2009 Microchip Technology Inc DS33014K page 101 Assembler Linker Librarian User s Guide 4 52 2 Description and Usage Inserts a page eject into the listing file This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation 4 52 3 See Also list subtitle title 4 53 pagesel GENERATE PAGE SELECTING CODE PIC10 12 16 MCUs 4 53 1 Syntax pagesel label 4 53 2 Description An instruction to the linker to generate page selecting code to set the page bits to the page containing the designated 1abe1 Only one label should be specified No operations can be performed on label 1abe1 must have been previously defined The linker will generate the appropriate page selecting code For 12 bit instruction width PIC10F some PIC12 PIC16 devices the appropriate bit set clear instructions on the STATUS register will be generated For 14 bit instruction width most PIC12 PIC16 devices a combination of BSF and BCF commands will be used to adjust bits 3 and 4 of the PCLATH register For PIC16 extended devices a mov1p instruction is generated to set the page If the device contains only one page of program memory no code will be generated For PIC18 devices this command will do nothing as these devices do not use paging 4 53 3 Usage This directive is used in the following types of code absol
111. Example 2 shows the C compiler linker script configuration and suggested code directives for the C compiler application targeted for a microcontroller that is running the C compiler boot loader See 13 5 1 3 Example 2 C Compiler Application Example 3 is a mixed language example using the C compiler application targeted for a microcontroller such as the PIC18F8720 with a limited boot block size running an MPASM boot loader A boot loader written in C code will typically require more program memory than a boot loader written in assembly and therefore requires a microcontroller with a larger boot block region such as the PIC18F8722 See 13 5 1 4 Example 3 Mixed Language Boot Loader Application Boot loader and application code written for the C compiler must use the C compiler linker scripts to command the linker to place the compiled C source code into appropriate program memory sections Typically boot loader code is compiled and linked for a destination in the boot section of the target microcontroller s program memory The application code is compiled and linked for a destination inside the user section of program memory To build the C compiler sample application refer to Section 13 2 How to Build the Sample Applications C __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ GS DS33014K page 206 O 2009 Microchip Technology Inc Sample Applications CODEPAGE CODEPAGE 13 5 1 1 C COMPILER MEMOR
112. F representing the ASCII equivalent of Pl Cm ic and ro See below for more information Sngl ch da A 7 bit ASCII equivalents of A and a NULL character will be packed in a 14 bit number da Oxff55 Places 3f55 in program memory No packing end Determining 14 Bit Numbers For the following statement Ch_stng da PICmicro directive da produces four 14 bit numbers 2849 21ED 34E3 and 396F representing the ASCII equivalent of Pl Cm ic and ro To see how the 14 bit numbers are determined look at the ASCII values of P and which are 50h 01010000 and 49h 01001001 respectively Each is presented in 7 bit as 0 1010000 and 0 1001001 respectively The packed 14 bit number is 101000 01001001 which is stored as 00 101000 01001001 or 2849 4 15 data CREATE NUMERIC AND TEXT DATA 415 1 Syntax label data expr expr expr label data text _string text string 4 15 2 Description Initialize one or more words of program memory with data The data may be in the form of constants relocatable or external labels or expressions of any of the above The data may also consist of ASCII character strings text_ string enclosed in single quotes for one character or double quotes for strings Single character items are placed into the low byte of the word while strings are packed two to a word If an odd number of characters are given in a string the final byte is zero On all families except the PIC18 device
113. File lib Libraries are a convenient way of grouping related object modules A library file may be created from object files by MPLIB librarian For more on the librarian see Chapter 15 MPLIB Librarian Overview 9 7 3 Linker Script File Ikr Linker script files are the command files of MPLINK linker For more information on linker scripts see Chapter 11 Linker Scripts Standard linker script files are located in C Program Files Microchip MPASM Suite LKR During the link process if MPLINK linker is unable to resolve a reference to a symbol it will search libraries specified on the command line or in the linker script in an attempt to resolve the reference lf a definition is found in a library file the object file containing that definition will be included in the link 9 7 4 COFF Object Module File cof out MPLINK linker generates a COFF file which provides debugging information to MPLAB IDE v6 xx or later 9 7 5 Hex File Formats hex hxl hxh Both the MPASM assembler and the MPLINK linker can generate a hex file For more information on this format see Section 1 7 5 Hex File Formats hex hxl hxh For MPLINK linker mp2hex exe uses the COF file to generate the hex file To prevent hex file generation use the x option 9 7 6 Listing File Ist An MPLINK linker listing file provides a mapping of source code to object code It also provides a list of symbol values memory usage inf
114. GISTER OPERATIONS Hex Mnemonic Description Function 4bf BCF f b Bit clear f 0 gt f b 5bf BSF f b Bit set f 1 f b cbf BTFSC Eb Bit test skip if clear skip if f b 0 7bf BTFSS f b Bit test skip if set skip if f b 1 TABLE A 6 14 BIT LITERAL AND CONTROL OPERATIONS Hex Mnemonic Description Function 3Ekk ADDLW kk Add literal to W kk WREG gt WREG 39kk ANDLW kk AND literal and W kk AND WREG gt WREG 2 0 kkk CALL kkk Call subroutine PC 1 gt TOS kk gt PC 0064 CLRWDT Clear watchdog timer 0 gt WDT and Prescaler if assigned 2 1 kkk GOTO kkk Goto address k is nine bits kk PC 9 bits 38kk IORLW kk Incl OR literal and W kk OR WREG gt WREG 30kk MOVLW kk Move Literal to W kk WREG 0062 OPTION Load OPTION register WREG gt OPTION Register 0009 RETFIE Return from Interrupt TOS gt PC 1 gt GIE 34kk RETLW kk Return with literal in W kk WREG TOS gt PC 0008 RETURN Return from subroutine TOS PC 0063 SLEEP Go into Standby Mode 0 WDT stop oscillator 3Ckk SUBLW kk Subtract W from literal kk WREG gt WREG 006r TRIS r Tristate port r WREG gt WO control reg r 3Akk XORLW kk Exclusive OR literal and W kk XOR WREG gt WREG 2009 Microchip Technology Inc DS33014K page 255 Assembler Linker Librarian User s Guide Ab 14 BI
115. I format DS33014K page 14 2009 Microchip Technology Inc PIC1X MCU Language Tools and MPLAB IDE Build Options Dialog MPLAB C18 Tab If Installed Although the MPLAB C18 C compiler works with MPLAB IDE it must be acquired separately The full version may be purchased or a student limited feature version may be downloaded for free See the Microchip website www microchip com for details This compiler supports PIC18X MCU devices A subset of command line options may be specified in MPLAB IDE in the Build Options dialog MPLAB C18 tab Select a category and then set up compiler options For additional options see the MPLAB C18 C Compiler User s Guide DS51288 also available on the Microchip website General Category Generate Command Line Diagnostics level Select to display errors only errors and warnings or errors warnings and messages These will be shown in the Output window Default storage class Select the storage class either auto ANSI standard static ANSI standard or overlay non extended mode Enable integer promo Select to enable integer promotions ISO mandated arithmetic tions performed at int precision or greater Treat char as unsigned Select to make char types unsigned 0 256 instead of the default signed 128 to 127 Extended mode Enable PIC18F extended instruction support Macro Definitions Add macro directive definitions Resto
116. IDE project to generate relocatable code For more information on this use see PIC1X MCU Language Tools and MPLAB IDE The assembler may also be used in MPLAB IDE to generate absolute code without the use of the MPLINK linker or MPLAB IDE project by using the QuickBuild feature To do this 1 From the MPLAB IDE menu bar select Project gt Set Language Tool Locations to open a dialog to set check language tool executable location 2 Inthe dialog under Registered Tools select Microchip MPASM Toolsuite Click the to expand 3 Select Executables Click the to expand 4 Select MPASM Assembler mpasmwin exe Under Location a path to the mpasmwin exe file should be displayed If no path is displayed enter one or browse to the location of this file By default it is located at C Program Files Microchip MPASM Suite mpasmwin exe 5 Click OK 6 From the MPLAB IDE menu bar select Project gt Quickbuild to assemble the specified asm file using the MPASM assembler 2009 Microchip Technology Inc DS33014K page 33 Assembler Linker Librarian User s Guide 2 3 WINDOWS INTERFACE MPASM assembler for Windows provides a graphical interface for setting assembler options It is invoked by executing mpasmwin exe in Windows Explorer or from a command prompt FIGURE 2 1 MPASM ASSEMBLER WINDOWS SHELL INTERFACE SOY 03 60 Microchip Technology Inc Of xj Source File Name Browse
117. IST P 18F4520 define processor include lt P18F4520 INC gt include file list c 132 n 0 132 col no paging p RRR RRR RK RK RK KEK KK RK KK KK KKK KK KKK KKK KKK KK KKK KK KK KK KK KR KK KK KK k k k k k k KK k k k define Clk LATB O SPI clock output define Dat LATB 1 SPI data output define Bus LATB 2 busy indicator PRR RRR RRR KERR KERR KKK KK KKK RRR KKK KERR kkk kkk kk kkk kkk kkk KEE KEKE KEKE KER KK KKK k k k Variable definitions udata Buffer res 1 SPI transmit data Counter res 1 SPI transmit bit counter DelayCtr res 1 ARRE RK KK RK RK KK KK KK KK KK KK KK KK KK KK KK KK KKK KK KK KK KK KK KK KK KK KK KK KK k k KKK code SPI Out clrf Counter init bit counter bsf Counter 7 bet Clk Clear clock bet Dat clear data out bsf Bus indicate busy ees DS33014K page 134 2009 Microchip Technology Inc Assembler Examples Tips and Tricks Lup movf Counter W get mask andwf Buffer W test selected bit btfss STATUS Z was result zero bsf Dat set data bsf Clk set clock bcf Clk clear clock bet Dat Clear data rrncf Counter F test next bit btfss Counter 7 done with byte bra Lup no bcf Bus indicate not busy return PRR RRR RRR KERR KERR KKK KK KKK KKK RK AK KA RRR KE KKK ERRE RR RRE kkk kkk kkk kkk kkk global SPI Out Buffer end 2009 Microchip Technology Inc DS33014K page 135 Assembler Linker Librarian User s Guide 5 7 EXAMPLE OF HEXADECIMA
118. K page 81 Assembler Linker Librarian User s Guide 4 35 global fill nop 4 Fills 2 locations 4 bytes with NOP goto Go to current line loop here INTR_H Write your high interrupt ISR here retfie INTR L Write your low interrupt ISR here retfie end EXPORT A LABEL 4 35 1 Syntax global label label 4 35 2 Description This directive declares symbol names that are defined in the current module and should be available to other modules At least one label must be specified on the line 4 35 3 Usage This directive is used in the following types of code relocatable For information on types of code see Section 1 6 Assembler Operation When your project uses more than one file you will be generating linkable object code When this happens you may use the global and extern directives global is used to make a label visible to other files extern must be used in the file that uses the label to make it visible in that file 4 35 4 See Also extern idata udata udata_acs udata_ovr udata_shr 4 35 5 Simple Example global Varl Var2 global AddThree udata Varl res 1 Var2 res 1 code AddThree addlw 3 return 4 35 6 Application Example extern global See this example under extern 4 36 idata BEGIN AN OBJECT FILE INITIALIZED DATA SECTION 4 36 1 Syntax label idata RAM address DS33014K page 82 2009 Microchip Technology Inc Directives 4 36 2 Description This
119. L TO ASCII CONVERSION Directives highlighted in this example are e udata res e global 5 7 1 Program Functional Description This program converts a hexadecimal byte into two ASCII bytes The application is written as relocatable code i e you must use both the assembler and linker to generate the executable Program registers are assigned using the udata and res directives Sections of code are created using the code statement External code is accessed using global 5 7 2 Commented Code Listing PRR RRR RRA RARE RR kkk kkk kk kkk kkk kkk kkk kk kkk kkk kkk k kkk kkk k kkk k kk k kkk get a hex byte in W convert to 2 ASCII bytes in ASCIIH ASCIIL req 2 stack levels i PRR RRR RRR KERR KERR KERR KK kkk kkk kkk kk kkk kkk kk kkk kkk k kkk kkk k kkk k kkk kkk kkk k k k Variables udata HexTemp res 1 ASCIIH res 1 ASCIIL res 1 PRR RRR RRR KK RR KERR KERR kkk kkk kkk kkk kkk kkk kkk kkk k kkk kkk k kkk kkk kkk kk kk k kkk code Hex2ASC mov HexTemp W andlw OxOF get low nibble call DecHex movwf ASCIIL swapf HexTemp F movf HexTemp W andlw OxOF get high nibble call DecHex movwf ASCIIH return PRR RRR RRR KERR KERR KERR KK EEK RR KERR KK RK AK kkk kkk kkk kkk kkk kkk k kkk k kkk kkk kk k k k k DecHex sublw 0x09 9 WREG btfss STATUS C is nibble Dec goto HexC no convert hex Dec mov HexTemp W convert DEC nibble to ASCII andlw Ox0F addlw A 0 return HexC mov HexTemp W conver
120. LAB IDE 1 Use the Project Wizard under the Project menu to create a project Select PIC18F8722 as the device Select the Microchip C18 Toolsuite as the active toolsuite Make sure the executable paths are correct as per Table 13 2 Name the project and place it in its own folder Add the sample files to your project i e c018i mod c mixed asm and mixed lkr View the Project window View gt Project to see your project files sa3_mixed mcw Lok sa3_mixed mcp gt Y Source Files E co18i_mod c E mixed c CA Header Files CA Object Files a Library Files Y Linker Script mixed lr C Other Files 2 Once the project is created select Project gt Build Options gt Project to open the Build Options for Project dialog Click the Directories tab and enter C mcc18 1ib under Library Path Click the MPLINK Linker tab and then click the Generate map file checkbox to select it 3 Select Debug from the Build Configuration list on the Project Manager toolbar 4 Select Project gt Build Allto build the application EH 2009 Microchip Technology Inc DS33014K page 197 Assembler Linker Librarian User s Guide 13 2 2 Using the Command Line The command line provides a platform independent method to develop your code 13 2 2 1 BUILDING APPLICATIONS To build an application on the command line 1 The listed Environment Variables need to b
121. LINKER LIBRARIAN MICROCHIP USER S GUIDE Table of Contents Part 1 MPASM Assembler Chapter 1 MPASM Assembler Overview El INWOGUGHON Wet a a a a a a M accede 23 1 2 MPASM Assembler Defined cccccccsssecesessssssreseeeeeeeeesssssssseeeerensssseees 23 1 3 How MPASM Assembler Helps You 23 1 4 Assembler Migration Path 23 1 5 Assembler Compatibility ISSUES ooooooococcccccnonocoooncnoccnonanonrncncnnnnnnnnnnnnnnnos 24 UR Assembler Operation cana dra tl a dll 24 1 7 Assembler Input Output Files ss 26 Chapter 2 Assembler Interfaces DN Wiele erte TEE 33 2 2 MPLAB IDE Interface ins 33 2 3 Windows Interface sisi 34 2 4 Command Line Interface EE 35 Chapter 3 Expression Syntax and Operation A issn a a O e a 37 3 2 WOME SOS pins 37 3 3 Reserved Words and Section Names c sccccceecsssesneeeeeeeeeesessneeeeeeeeess 39 3 4 Numeric Constants and Radix socia Zeg t eE 39 3 5 Arithmetic Operators and Precedence ccccococccccnoconccononncncnnnnnnancnnnnnnncnnanancnos 40 Chapter 4 Directives 4T Introduction li td 43 4 2 Directives by Type a Ee eege en ee 43 4 3 access ovr Begin an Object File Overlay Section in Access RAM PICTS MCU Sais atraca 46 4 4 badram Identify Unimplemented RAM eee eter eee 46 Ab badrom Identify Unimplemented ROM ee eee eeeeeeseeeeenteeeeneees 47 4 6 bankisel Generate Indirect Bank Selecting Code PIGT2A TB MGUS si 48 4
122. Loop End loop when DTEMP 0 return Use the time it takes to decrement a register DTEMP from an initial value to 0x00 as Delay 2 This method requires no timers or interrupts end End of the program i e tells the assembler no further code needs to be assembled 5 3 3 Header Files A header file is included in the program flow with the include directive include p16f877a inc Include header file Angle brackets quotes or nothing at all may used to enclose the name of the header file You may specify the complete path to the included file or let the assembler search for it For more on search order see the discussion of the include directive in Section 4 42 include Include Additional Source File A header file is extremely useful for specifying often used constants such as register and pin names This information can be typed in once and then the file can be included in any code using the processor with those registers and pins DS33014K page 126 2009 Microchip Technology Inc Assembler Examples Tips and Tricks 5 3 4 Register and Bit Assignments You can specify your own registers and bits by using the udata res and equ directives as is done in the following lines udata Declare storage of RAM variables DTEMP res 1 Reserve 1 address location DFLAG res 1 Reserve 1 address location DFLO equ 0x00 Set flag bit 0 bit of DFLAG DTEMP and DFLAG are assigned one address location in RAM each by the link
123. MPLEMENTED RAM Note badram is preceded by two underline characters 4 4 1 Syntax __badram expr expr expr expr DS33014K page 46 2009 Microchip Technology Inc Directives 4 4 2 Description The maxramand badran directives together flag accesses to unimplemented registers badram defines the locations of invalid RAM addresses This directive is designed for use with the maxramdirective A maxram directive must precede any badram directive Each expr must be less than or equal to the value specified by maxram Once the _ maxram directive is used strict RAM address checking is enabled using the RAM map specified by badram To specify a range of invalid locations use the syntax minloc maxloc 4 4 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation __badramis not commonly used as RAM and ROM details are handled by the include files inc or linker script files 1kr 4 4 4 See Also maxram 4 4 5 Simple Example include p16c622 inc _ maxram 0x0BF __badram 0x07 0x09 0Ox0D 0xE __badram 0x87 0x89 0x8D 0x8F 0x9E movwf 0x07 Generates invalid RAM warning movwf 0x87 Generates invalid RAM warning and truncation message 4 5 _ badrom IDENTIFY UNIMPLEMENTED ROM Note badromis preceded by two underline characters 4 5 1 Syntax __badrom expr expr expr
124. Note 1 Operation in 14 bit extended instruction set but not 14 bit instruction set DS33014K page 258 O 2009 Microchip Technology Inc Instruction Sets Ap 12 BIT 14 BIT INSTRUCTION WIDTH PSEUDO INSTRUCTIONS The following pseudo instructions are applicable to both the 12 bit and 14 bit instruction word devices These pseudo instructions are alternative mnemonics for standard PIC1X instructions or are macros that generate one or more PIC1X instructions Use of these pseudo instructions is not recommended for new designs These are documented mainly for historical purposes TABLE A 15 12 BIT 14 BIT SPECIAL INSTRUCTION MNEMONICS d Equivalent Mnemonic Description ASS Status Operation s ADDCF f d Add Carry to File BTFSC 3 0 Z INCF f d ADDDCF fad Add Digit Carry to File BTFSC Sal Z INCF d B k Branch GOTO k BC k Branch on Carry BTFSC 3 0 GOTO k BDC k Branch on Digit Carry BTFSC 3 1 GOTO k BNC k Branch on No Carry BTFSS 3 0 GOTO k BNDC k Branch on No Digit Carry BTFSS 3 1 GOTO k BNZ k Branch on No Zero BTFSS 37 2 GOTO k BZ k Branch on Zero BTFSC 3 2 GOTO k CLRC Clear Carry BCF 3 0 CLRDC Clear Digit Carry BCF 3 1 CLRZ Clear Zero BCF SR LCALL k Long Call BCF BSF Ox0A 3 BCF BSF Ox0A 4 CALL k LGOTO k Long GOTO BCF BSF Ox0A 3 BCF BSF Ox0A 4 GOTO k MOVFW Move File to
125. Overview describes what the MPASM assembler is what it does and how it works with other tools Also gives an overview of operation and discusses input output files Chapter 2 Assembler Interfaces reviews how to use the MPASM assembler with MPLAB IDE and describes how to use the assembler on the command line or in a Windows shell interface Chapter 3 Expression Syntax and Operation provides guidelines for using complex expressions in MPASM assembler source files Chapter 4 Directives lists each MPASM assembler directive alphabetically and describes the directive in detail with examples Chapter 5 Assembler Examples Tips and Tricks provides examples of how to use the MPASM assembler directives together in applications Chapier 6 Relocatable Objects describes how to use the MPASM assembler in conjunction with MPLINK object linker Chapter 7 Macro Language describes how to use the MPASM assembler s built in macro processor Chapter 8 Errors Warnings Messages and Limitations contains a descriptive list of the errors warnings and messages generated by the MPASM assembler as well as tool limitations Part 2 MPLINK Object Linker Chapter 9 MPLINK Linker Overview describes what the MPLINK object linker is what it does and how it works with other tools Also gives an overview of operation and discusses input output files Chapter 10 L
126. OxOf e OXx0f s OxOf t An ASCII 0x0F74 0x0F65 0x0F73 0x0F74 0x0a00 Example 2 PIC18 Devices db t ei s t An ASCII 0x6574 0x7473 0x000a 4 16 6 PIC16 Application Example db This example shows the usefulness of directive db in storing one or more bytes or characters in program memory include p16f877a inc Include standard header file for the selected device ORG 0x0000 The following code will be programmed in reset address 0 goto start Jump to an address labelled start start Write your main program here goto Go to current line loop here ORG 0x1000 Store the string starting from 1000H Ch _stng db OEM Oe AO Ch_strng contains three 14 bit numbers 004Dh 0043h and 0055h These are ASCII equivalents of M C and U respectively tb1 dra db 0 Oxff Places OOff in program memory location end 4 16 7 PIC18 Application Example db This example shows the usefulness of directive db in storing one or more byte or character in program memory include p18f452 inc Include standard header file for the selected device ORG 0x0000 The following code will be programmed in reset address 0 goto start Jump to an address labelled start start Write your main program here goto Go to current line loop here O 2009 Microchip Technology Inc DS33014K page 63 Assembler Linker Librarian User s Guide ORG 0x1000 Store the string startin
127. R LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 9 MPLINK Linker Overview 9 1 INTRODUCTION An overview of the MPLINK object linker and its capabilities is presented Topics covered in this chapter e MPLINK Linker Defined e How MPLINK Linker Works e How MPLINK Linker Helps You Linker Platforms Supported Linker Operation Linker Input Output Files 9 2 MPLINK LINKER DEFINED MPLINK object linker the linker combines object modules generated by the MPASM assembler or the MPLAB C18 C compiler into a single executable hex file The linker also accepts libraries of object files as input as generated by the MPLIB object librarian The linking process is controlled by a linker script file which is also input into MPLINK linker For more information on MPASM assembler see Chapter 1 MPASM Assembler Overview For more information on MPLAB C18 see C compiler documentation listed in Recommended Reading 9 3 HOW MPLINK LINKER WORKS MPLINK linker performs many functions Locates Code and Data The linker takes as input relocatable object files Using the linker script it decides where the code will be placed in program memory and where variables will be placed in RAM Resolves Addresses External references in a source file generate relocation entries in the object file After the linker locates code and data it uses this relocation information to update all external references with the actual addresses Generates
128. REG skip if f lt f WREG if f lt WREG PC 4 gt PC WREG else PC 2 PC 07f DECF f d a Decrement f f 1 gt dest 2Ff DECFSZ d a Decrement f skip if O f 1 gt dest if dest 0 PC 4 PC else PC 2 gt PC 4Ff DCFSNZ d a Decrement f skip if not O f 1 gt dest if dest 0 PC 4 PC else PC 2 gt PC 2Bf INCF f d a Increment f f 1 gt dest 3Ff INCFSZ d a Increment f skip if 0 f 1 gt dest if dest 0 PC 4 PC else PC 2 gt PC 4Bf INFSNZ d a Increment f skip if not O f 1 gt dest if dest 0 PC 4 gt PC else PC 2 gt PC 13f IORWF d a Inclusive OR WREG with f WREG OR f gt dest 53 MOVF d a Move f f gt dest C MOVFF Move f to fd second word fof Ff 6Ff MOVWF f a Move WREG to f WREG f 03 MULWF fia Multiply WREG with f WREG f gt PRODH PRODL 6Df NEGF f a Negate f gt f 37 RLCF f d a Rotate left f through Carry register f C Le A 0 lt lt 47 RLNCF f d a Rotate left f no carry register f Doris 0 lt 33f RRCF f d a Rotate right f through Carry register f ke c KE 0 43f RRNCF f d a Rotate right f no carry register f D RAS 0 69f SETF f a Set f OxFF f 57 SUBFWB f d a Subtract f from WREG with WREG f C gt dest Borrow 5Ff SUBWF d a Subtract WREG from f f WREG gt dest 5Bf SUBWFB d a Subtract WREG from f with f WREG C gt dest Borrow 3B SWAPF f d a Swap nibbles off f lt 3 0
129. RGBO Output product AARGxBARG in AARGBO AARGB1 Other comments truncated See AN617 PRR RRR RRR KKK KR KKK KKK RRR RRR RRR kk kkk kkk kkk kkk kkk kkk kkk kk kkk kkk kkk KR KKK EK include p16f877a inc Use any PIC16 device you like EXTERN UMULO808L AARGBO AARGB1 BARGBO Reset CODE 0x0 pagesel TestCode goto TestCode CODE TestCode banksel AARGB1 clrf AARGB1 Clear partial product before testing movlw DETI Load in 2 test values movwf AARGBO movlw D 30 movwf BARGBO pagesel UMULO808L call UMULO808L After loading AARGBO and BARGBO call routine goto Result now in AARGBO AARGB1 where AARGBO is MSB END EXAMPLE 6 11 RELOCATABLE CODE LIBRARY ROUTINE Input fixed point arguments in AARGBO and BARGBO Output product AARGxBARG in AARGBO AARGB1 Other comments truncated See AN617 PRR RARER RRR KK RR KKK KK RK KERR KEK KK RK KERR KR RRR kkk kkk kkk kkk kk kkk kkk kkk kkk k k k include p16f877a inc Use any PIC16 device you like GLOBAL UMULO808L AARGBO AARGB1 BARGBO UDATA LOOPCOUNT RES 1 7 loops needed to complete routine AARGBO RES 1 MSB of result out AARGB1 RES J operand A in 8 bits BARGBO RES ali LSB of result out operand B in 8 bits 2009 Microchip Technology Inc DS33014K page 149 Assembler Linker Librarian User s Guide CODE UMULO808L movlw 0x08 movwf LOOPCOUNT mov AARGBO W LOOPUM0808A rrf BARGBO F btfsc STATUS C goto LUM0808N
130. RTC ifndef UsePORTB MyPort equ PORTC Use Port C if UsePORTB not defined MyTris equ TRISC TRISC must be used to set data direction for PORTC Helse MyPort equ PORTB Use Port B if UsePORTB defined MyTris equ TRISB TRISB must be used to set data direction for PORTB endif banksel MyTris clrf MyTris Set port to all outputs banksel MyPort Return to bank used for port movlw 55h Move arbitrary value to W reg movw MyPort Load port selected with 55h end 4 42 include INCLUDE ADDITIONAL SOURCE FILE 4 42 1 Syntax Preferred include include file include include file include lt include_file gt Supported include include file include include file include lt include file gt 4 42 2 Description The specified file is read in as source code The effect is the same as if the entire text of the included file were inserted into the file at the location of the include statement Upon end of file source code assembly will resume from the original source file Up to 5 levels of nesting are permitted Up to 255 include files are allowed If include file contains any spaces it must be enclosed in quotes or angle brackets If a fully qualified path is specified only that path will be searched Otherwise the search order is e current working directory e source file directory e MPASM assembler executable directory 4 42 3 Usage This directive is used in the following types of code absolu
131. ST CODE 0x0 The code section named RST is placed at location 0x0 instructions code section program memory The next two are placed in RST pagesel start Jumps to the location labelled goto start start PGM CODE This is the beginning of the code section named PGM It is a relocatable code section since no absolute address is given along with directive CODE start banksel groupl varl clrf groupl varl clrf groupl var2 banksel group2_varl clrf group2_varl clrf group2 var2 goto Go to current line loop here end 4 63 udata acs BEGIN AN OBJECT FILE ACCESS UNINITIALIZED DATA SECTION PIC18 MCUs 4 63 1 Syntax label udata_acs RAM address 4 63 2 Description This directive declares the beginning of a section of access uninitialized data If 1abe1 is not specified the section is named udata_acs The starting address is initialized to the specified address or will be assigned at link time if no address is specified This directive is used to declare variables that are allocated in access RAM of PIC18 devices No code can be generated in this segment The res directive should be used to reserve space for data Note Two sections in the same source file are not permitted to have the same name 2009 Microchip Technology Inc DS33014K page 111 Assembler Linker Librarian User s Guide 4 63 3 Usage This directive is used in the following types of code relocatable For infor
132. Set RBO Menu CIS data RA4 gt RBO 128 data n RBO Exit n 144 data Volts n 160 data Prd 128 DC 128 76 O 2009 Microchip Technology Inc DS33014K page 143 Assembler Linker Librarian User s Guide EE kok kk keke STANDARD CODE MENU SELECTION kk k kkk kk kkk kk k k movlw 80 send Microchip to LCD movwf ptr_pos call stan_char 1 Standard code Place characters on line 1 stan char 1 call LCDLine 1 move cursor to line 1 movlw 16 1 full line of LCD movw ptr_count movlw UPPER stan_table Use operators to load movw TBLPTRU table pointer values movlw HIGH stan table movw TBLPTRH movlw LOW stan table movw TBLPTRL movf ptr_pos W addwf TBLPTRL F clrf WREG addwfc TBLPTRH F addwfc TBLPTRU F stan_next_char_1 tblrd Mi movff TABLAT temp wr call d write send character to LCD decfsz ptr count F move pointer to next char bra Stan next char 1 movlw n move data into TXREG movw TXREG next line btfss TXSTA TRMT walt for data TX goto 2 movlw r move data into TXREG movwf TXREG Carriage return btfss TXSTA TRMT walt for data TX goto 2 return DS33014K page 144 2009 Microchip Technology Inc Relocatable Objects 6 5 RAM ALLOCATION RAM space must be allocated in a data section Five types of data sections are available Note The ability to use access overlaid or
133. T ESC K k C FF FS lt L D CR GS M m E SO RS gt N A n F SI US O a o DEL 2009 Microchip Technology Inc DS33014K page 267 Assembler Linker Librarian User s Guide B 3 HEXADECIMAL TO DECIMAL CONVERSION This appendix describes how to convert hexadecimal to decimal For each HEX digit find the associated decimal value Add the numbers together High Byte Low Byte HEX 1000 Dec HEX 100 Dec HEX 10 Dec HEX 1 Dec 0 0 0 0 0 0 0 0 1 4096 1 256 1 16 1 1 2 8192 2 512 2 32 2 2 3 12288 3 768 3 48 3 3 4 16384 4 1024 4 64 4 4 5 20480 5 1280 5 80 5 5 6 24576 6 1536 6 96 6 6 7 28672 7 1792 7 112 7 7 8 32768 8 2048 8 128 8 8 9 36864 9 2304 9 144 9 9 A 40960 A 2560 A 160 A 10 B 45056 B 2816 B 176 B 11 C 49152 C 3072 C 192 C 12 D 53248 D 3328 D 208 D 13 E 57344 E 3584 E 224 E 14 F 61440 F 3840 F 240 F 15 For example HEX A38F converts to 41871 as follows HEX 1000 s Digit HEX 100 s Digit HEX 10 s Digit HEX 1 s Digit Result 40960 768 128 15 41871 Decimal DS33014K page 268 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Glossary Absolute Section A section with a fixed absolute address that cannot be changed by the linker Access Memory PIC18 Only Special registers on PIC18 devices that allow access regardless of the setting of t
134. T INSTRUCTION WIDTH EXTENDED INSTRUCTION SET Some of Microchip s midrange 8 bit microcontroller family use a 14 bit wide extended instruction set Consult your device data sheet to see if you device uses an extended instruction set This instruction set consists of 41 instructions each a single 14 bit wide word Most instructions operate on a file register f and the working register WREG accumulator The result can be directed either to the file register or the WREG register or to both in the case of some instructions A few instructions operate solely on a file register BSF for example The instruction set is grouped into the following categories byte oriented file register operations byte oriented skip operations bit oriented file register operations bit oriented skip operations core literal operations core control operations core inherent operations and C compiler optimized operations Additionally instructions that apply to both 12 bit and 14 bit devices are shown in Section A 6 12 Bit 14 Bit Instruction Width Pseudo Instructions Instruction opcode is show in hex by making certain assumptions either listed in the key or as a footnote For more information on the opcode bit values for each instruction as well as the number of cycles per instruction status bits affected and complete instruction details see the relevant device data sheet TABLE A 7 14 BIT BYTE ORIENTED FILE REGISTER OPERATIONS Hex Mnemonic Description Funct
135. TED NAME page START 0x0 END 0x1FFFF NAME eeprom START 0x20000 END 0x1FFFFF PROTECTED NAME idlocs START 0x200000 END 0x200007 PROTECTED NAME config START 0x300000 END 0x30000D PROTECTED NAME devid START 0x3FFFFE END 0x3FFFFF PROTECTED NAME eedata START 0xF00000 END 0xF003FF PROTECTED Then add section information for the EEPROM sections IFDEF _CRUNTIME SECTION SECTION SECTION NAME CONFIG NAME INTHAND NAME DATTBL ROM conf ig ROM eeprom ROM eeprom Interrupt handlers Data tables IFDEF DEBUGDATASTART STACK SIZE 0x100 RAM gpr13 HELSE STACK SIZE 0x100 RAM gpr14 FI FI 13 4 4 Building the Application To build the application see Section 13 2 How to Build the Sample Applications Then to continue development with MPLAB IDE 1 Though the configuration bits in code set the microcontroller mode to external you must tell MPLAB IDE the range of external memory you wish to use Select Configure gt External Memory In the dialog click Use External Memory and enter Ox1FFFFF as the Address Range End Click OK 2 Select Project gt Build All to build the application again 13 4 5 Absolute Method Instead of adding SECTION lines to the linker script you could add the absolute address in code e INTHAND code 0x20000 However if you need to place additional code in the CODEPAGE eeprom area you would need to know the disassembly code length of the interrupt handler to determ
136. Tail Double1 2 Double2 2 endc 4 8 6 Application Example cblock endc This example shows the usage of CBLOCK and ENDC directives for defining constants or variables in data memory space The same directives can be used for program memory space also The program calculates the perimeter of a rectangle Length and width of the rectangle will be stored in buffers addressed by Length 22H and width 23H The calculated perimeter will be stored in the double precision buffer addressed by perimeter i e 20H and 21H include p16f877a inc Include standard header file for the selected device CBLOCK 0x20 Define a block of variables starting at 20H in data memory perimeter 2 The label perimeter is 2 bytes wide Address 20H and 21H is assigned to the label perimeter length Address 22H is assigned to the label length width Address 23H is assigned to the label width ENDC This directive must be supplied to terminate the CBLOCK list clrf perimeter 1 Clear perimeter high byte at address 21H mov length w Move the data present in the register addressed by length to Iw addwf width w Add data in w with data in the register addressed by width STATUS register carry bit C may be affected movwf perimeter Move wi to the perimeter low byte at address 20H Carry bit jis unaffected rlf perimeter 1 Increment register 21H if carry was generated Also clear carry if bit was set
137. Text Strings e Reserved Words and Section Names e Numeric Constants and Radix e Arithmetic Operators and Precedence 3 2 TEXT STRINGS A string is a sequence of any valid ASCII character of the decimal range of 0 to 127 enclosed by double quotes It may contain double quotes or null characters The way to get special characters into a string is to escape the characters preceding them with a backslash V character The same escape sequences that apply to strings also apply to characters Strings may be of any length that will fit within a 255 column source line If a matching quote mark is found the string ends If none is found before the end of the line the string will end at the end of the line While there is no direct provision for continuation onto a second line it is generally no problem to use a second dw directive for the next line The dw directive will store the entire string into successive words If a string has an odd number of characters bytes the dw and data directives will pad the end of the string with one byte of zero 00 If a string is used as a literal operand it must be exactly one character long or an error will occur 2009 Microchip Technology Inc DS33014K page 37 Assembler Linker Librarian User s Guide 3 2 1 Escape Characters The assembler accepts the ANSI C escape sequences to represent certain special control characters TABLE 3 1 ANSI C ESCAPE SEQUENCES
138. The program memory section names Vectors IntH and IntL are used with the CODE directive to instruct the linker to place the assembled code that follows each directive at the specified program memory location In this case the boot loader is not linked with any application code so the relocated reset and interrupt vectors 0208h 0218h and 022Ah are assumed and therefore are explicitly coded 18Fboot asm This is an example of how the startup portion of a boot loader could be configured when designing and programming only the boot loader code into the target PIC microcontroller kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk 18Fboot asm CEREERRRARERE REA RE ERA REE REE EKER RE RRE RRE RERER RR RAE RE RRE AER RARA ARE RRA A RARA LIST P 18F8720 include P18cxxx inc kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxkxk Vectors VReset IntH VIn Int VIn 1 Boo Boot Li tH tL code bra code bra code bra code 0x0000 Boot_Start 0x0008 0x0208 Re map Interrupt vector to app s code space 0x0018 0x0218 Re map Interrupt vector to app s code space kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk 0x002A Boot loader executable code starts here Logic to determine if bootloader executes or branch to user s code bra 0x022A Branch to user s application code end of boot loader code section kkkkkkk
139. These sample applications can be used as templates for your own application e How to Build the Sample Applications e Sample Application 1 Templates and Linker Scripts How to find and use template files When to modify the generic linker script file e Sample Application 2 Placing Code and Setting Config Bits How to place program code in different memory regions How to place data tables in ROM memory How to set configuration bits in C e Sample Application 3 Using a Boot Loader How to partition memory for a boot loader How to compile code that will be loaded into external RAM and executed e Sample Application 4 Configuring External Memory How to create new linker script memory section How to declare external memory through pragma code directive How to access external memories using C pointers 13 2 HOW TO BUILD THE SAMPLE APPLICATIONS To build the sample applications you will need the MPASM assembler the MPLINK linker and for some sample applications the MPLAB C compiler for PIC18 MCUs formerly MPLAB C18 installed on your PC The assembler and linker are automatically installed with MPLAB IDE or may be acquired separately on the Microchip website or the C compiler CD ROM A free demo student version of the C compiler may be obtained on the Microchip website The full C compiler must be purchased separately By default the tool executables are located as specified in the tables below TABLE 13 1 ASSEMBLY
140. This error would occur if you try to reserve an odd number of bytes using a PIC18 device and assemble in absolute mode Quickbuild For example org 0x0 a res 1 end If you try to Quickbuild the above PIC18 MCU program you will see error 180 and warning 231 UNKNOWN ERROR An internal application error has occurred is the value of the last defined error plus 1 Contact your Microchip Field Application Engineer FAE or Microchip support if you cannot debug this error 8 3 ASSEMBLER WARNINGS MPASM assembler warnings are listed numerically below 201 Symbol not previously defined The symbol being undefined was not previously defined 202 Argument out of range Least significant bits used Argument did not fit in the allocated space For example literals must be 8 bits 203 Found opcode in column 1 An opcode was found in column one which is reserved for labels 204 Found pseudo op in column 1 A pseudo op was found in column one which is reserved for labels 205 Found directive in column 1 A directive was found in column one which is reserved for labels 206 Found call to macro in column 1 A macro call was found in column one which is reserved for labels 207 Found label after column 1 A label was found after column one which is often due to a misspelled opcode 208 Label truncated at 32 characters Maximum label length is 32 characters 209 Missing quote A text string or character was missing
141. UGCODESTART START 0x2A START 0x020000 START 0x200000 START 0x300000 START 0x3FFFFE START 0xF00000 END 0x29 END _CODEEND END _CEND END 0x1FFFF END 0x1FFFFF END 0x200007 END 0x30000D END 0x3FFFFF END 0xF003FF PROTECTED PROTECTED PROTECTED PROTECTED PROTECTED PROTECTED PROTECTED Then the vectors program and external memory section is added IFDEF _CRUNTIME SECTION SECTION SECTION SECTION NAME CONFIG NAME VECTORS NAME PROG NAME SRAM IFDEF _DEBUGDATASTART STACK SIZE 0x100 RAM gpr13 HELSE ROM conf ig ROM vectors ROM page ROM xsram STACK SIZE 0x100 RAM gpr14 FI FI DS33014K page 220 2009 Microchip Technology Inc Sample Applications 13 6 2 3 ASSEMBLER SOURCE CODE This is a simple code example showing the definition of the external memory SRAM address at 20000h and how to write a 16 bit value to two consecutive memory locations using the table pointer register and table write instruction If you are using MPLAB IDE to run this example remember to enable external memory Configure gt External Memory to see this extra memory in the Program Memory window include lt p18F8722 inc gt Microprocessor mode a memory mode that supports external memory CONFIG MODE MP gl define SRAM BASE ADDRS 0x20000 Base addrs for external memory device define SRAM END ADDRS 0x1FFFFF End addrs not required vectors code bra main prog code main Example
142. Y MAP The first two C compiler boot loader examples are demonstrated using a PIC18F8722 which offers a configurable boot block size of 2K 4K or 8K bytes The remaining program memory is available for the relocatable application code and data tables For these two examples it is assumed the boot block is configured for 2K bytes and requires modification to the C compiler linker script file in order to accommodate the selected boot block size The third example a mix of an MPASM assembler boot loader and C compiler source code uses the PIC18F8720 For the corresponding memory map see Section 13 5 2 1 Assembler Memory Map For the first two examples program memory sections specified by the code and linker script are compared below Specific sections highlighted in these sample application SA3 examples are noted TABLE 13 5 PROGRAM MEMORY MAP PIC18F8722 Program Linker Script Section SA9 Memory Address Not debug or extended Source Code section 0x000000 vectors Reset Interrupts Vectors IntH IntL 0x000029 gt 0x00002A boot Boot Loader Boot 0x0007FF 0x000800 page Remapped Vectors R_vectors R_IntH R_IntL Boot 0x1 FFFFF and User Code Loader Updated Application Code 13 5 1 2 EXAMPLE 1 C COMPILER BOOT LOADER This example shows a section of linker script modified to accommodate the boot loader code Boot Loader Linker Script The partial C compiler linker script file shown bel
143. _ _____ ____ _ ________ o a DS33014K page 16 O 2009 Microchip Technology Inc PIC1X MCU Language Tools and MPLAB IDE PROJECT EXAMPLE In this example you will create an MPLAB IDE project with multiple assembly files Therefore you will need to use the MPASM assembler and the MPLINK linker to create the final output executable hex file e Run the Project Wizard e Set Build Options e Build the Project e Build Errors e Output Files e Further Development Run the Project Wizard In MPLAB IDE select Project gt Project Wizard to launch the wizard Click Next gt at the Welcome screen 1 Select PIC16F84A as the Device Click Next gt to continue 2 Setup the language tools if you haven t already Refer to MPLAB IDE Setup Click Next gt to continue 3 Enter Example for the name of the project Then Browse to select a location for your project Click Next gt to continue 4 Add files to the project In the file listing box on the left of the dialog find the following directory C Program Files Microchip MPASM Suite EXAMPLE Select Example asmand Example2 asm Click Add gt gt to add these files to the project Click Next gt to continue 5 Review the summary of information If anything is in error use lt Back to go back and correct the entry Click Finish to complete the project creation and setup Once the Project Wizard has completed the Project window should contain the project tree The work
144. a quote For example DATA a DS33014K page 162 2009 Microchip Technology Inc Errors Warnings Messages and Limitations 210 Extra An extra comma was found at the end of the line 211 Extraneous arguments on the line Extra arguments were found on the line 212 Expected ENDIF Expected an endif statement i e an if statement was used without an endif 213 The EXTERN directive should only be used when making a o file The extern directive only has meaning if an object file is being created This warning has been superseded by Error 149 214 Unmatched An unmatched parenthesis was found The warning is used if the parenthesis is not used for indicating order of evaluation 215 Processor superseded by command line Verify processor symbol The processor was specified on the command line as well as in the source file The command line has precedence If you are using MPLAB IDE with the assembly set the device to match the source file from Configure gt Select Device 216 Radix superseded by command line The radix was specified on the command line as well as in the source file The command line has precedence 217 Hex file format specified on command line The hex file format was specified on the command line as well as in the source file The command line has precedence 218 Expected DEC OCT HEX Will use HEX Bad radix specification 219 Invalid RAM location specified Ifthe maxram
145. a second register SWAPWF MACRO REG XORWF REG F XORWF REG W XORWF REG F ENDM Needs 0 TEMP registers 3 Instructions 3 Tcy An efficient way of swapping the contents of a register with the working register is to use three XORWF instructions It requires no temporary registers and three instructions Here s an example W REG Instruction 10101100 01011100 XORWF REG F 10101100 11110000 XORWF REG W 01011100 11110000 XORWF REG F 01011100 10101100 Result 5 9 5 TIP 5 Bit Shifting Using Carry Bit Rotate a byte through carry without using RAM variable for loop count e Easily adapted to serial interface transmit routines e Carry bit is cleared except last cycle and the cycle repeats until the zero bit sets indicating the end list p 12f629 include p12f629 inc buffer equ 0x20 bsf STATUS C Set end of loop flag rlf buffer E Place first bit into C Send_Loop bcf GPIO Dout Precondition output btfsc STATUS C Check data 0 or 1 bsf GPIO Dout bcf STATUS C Clear data in C rif buffer F Place next bit into C movf buffer F Force Z bit btfss STATUS Z Exit goto Send Loop Related Topic TIP 3 Conditional Bit Set Clear 2009 Microchip Technology Inc DS33014K page 139 Assembler Linker Librarian User s Guide 5 9 6 TIP 6 Using External Memory To use external memory the maximum allowable address must be redefined by using the _MAXROM directive For example w
146. able 2009 Microchip Technology Inc DS33014K page 103 Assembler Linker Librarian User s Guide If you are using relocatable code and your device has more than 2k program memory or 0 5K for 12 bit instruction width devices it is recommended that you use this directive especially when code must jump between two or more code sections You must use this directive instead of pagese1 if you wish to indicate the start address of a RETLW table or a jump table for computed GOTOs Only then will all the 5 top most bits of the PC will be loaded with the appropriate value when an 8 bit offset is added to the PC The 256 word boundaries will still have to be considered as discussed in Application Note AN586 4 54 4 See Also bankisel banksel 4 54 5 Simple Example pageselw CommandTableStart Get the byte read and use it to movlw CommandTableStart index into our jump table If addwf Comm RxTxByte w we crossed a 256 byte boundary btfsc STATUS C then increment PCLATH Then load the incf PCLATH f program counter with computed goto movwf PCL CommandTableStart goto GetVersion Ox00 Get Version goto GetRTSample Ox01 Get Real Time sample goto Configure Ox02 stub goto Go 70x03 stub goto ReadBuffer 0x04 Read Buffer just sends Vout goto AreYouThroughYet 0x05 goto CommDone 0x06 goto CommDone 0x07 4 55 processor SET PROCESSOR TYPE 4 55 1 Syntax processor processor type 4 55 2 Description Sets the
147. alent of M C and U x Directive data produces three 14 bit numbers 004Dh 0043h and 0055h 4Dh 43h and 55h are ASCII equivalents of M C and U respectively tb1 dra data Oxffff 0xaa55 Places 3fffh and 2a55h in two consecutive program memory locations As program memory is 14 bit wide the last nibble can store ja maximum value 3 end 4 15 7 PIC18 Application Example data This example shows the usefulness of directive data in storing one or more words in program memory include p18f452 inc Include standard header file for the selected device ORG 0x0000 The following code will be programmed in reset address 0 goto start Jump to an address labelled Start start Write your main program here goto Go to current line loop here ORG 0x1000 Store the string starting from 1000H In PIC18 devices the first character is in least significant byte 2009 Microchip Technology Inc DS33014K page 61 Assembler Linker Librarian User s Guide Ch_stng data M C U 3 program memory locations will be filled with ASCII equivalent of M C and SED Directive data produces three 16 bit numbers 004Dh 0043h and 0055h 4Dh 43h and 55h are ASCII equivalents of M C and U respectively See Section 4 10 code pack Begin an Object File Packed Code Section PIC18 MCUs for better use of memory Ch_stgl data MCU 2 program memory l
148. allow the specification of titles pagination and other listing control Listing File A listing file is an ASCII text file that shows the machine code generated for each C source statement assembly instruction assembler directive or macro encountered in a source file Local Label A local label is one that is defined inside a macro with the LOCAL directive These labels are particular to a given instance of a macro s instantiation In other words the symbols and labels that are declared as local are no longer accessible after the ENDM macro is encountered Logic Probes Up to 14 logic probes can be connected to some Microchip emulators The logic probes provide external trace inputs trigger output signal 5V and a common ground Machine Code The representation of a computer program that is actually read and interpreted by the processor A program in binary machine code consists of a sequence of machine instructions possibly interspersed with data The collection of all possible instructions for a particular processor is known as its instruction set Machine Language A set of instructions for a specific central processing unit designed to be usable by a processor without being translated Macro Macroinstruction An instruction that represents a sequence of instructions in abbreviated form Macro Directives Directives that control the execution and data allocation within macro body definitions Make Project
149. allowed for the ID locations 305 Using default destination of 1 file If no destination bit is specified the default is used Usually code that causes this message is missing the Wor F after the register name but sometimes the bug is due to typing mov instead of movwf It is best to fix any code that is causing this message The default destination could not be where you want the value stored and could cause the code to operate strangely 306 Crossing page boundary ensure page bits are set Generated code is crossing a page boundary This is a reminder message to tell you that code is being directed to a label that is on a page other than page 0 It is not an error or warning but a reminder to check your page bits Use the pagesel directive Section 4 53 pagesel Generate Page Selecting Code PIC10 12 16 MCUs before this point and remember to use another pagesel if returning to page 0 The assembler can t tell what path your code will take so this message is generated for any label in a page other than 0 You can use the errorlevel command to turn this and other messages on and off but be careful as you may not spot a paging problem with this message turned off For more about errorlevel see Section 4 30 errorlevel Set Message Level A similar message is 302 for banking 2009 Microchip Technology Inc DS33014K page 165 Assembler Linker Librarian User s Guide 307 Setting page bits Page bit
150. and badramdirectives are used this warning flags use of any RAM locations declared as invalid by these directives Note that the provided header files include maxramand badram for each processor 220 Address exceeds maximum range for this processor A ROM location was specified that exceeds the processor s memory size 221 Invalid message number The message number specified for displaying or hiding is not a valid message number 222 Error messages cannot be disabled Error messages cannot be disabled with the errorlevel command 223 Redefining processor The selected processor is being reselected by the 1ist or processor directive O 2009 Microchip Technology Inc DS33014K page 163 Assembler Linker Librarian User s Guide 224 Use of this instruction is not recommended The instruction is being obsoleted and is not recommended for current use However it is still supported for legacy reasons 225 Invalid label in operand Operand was not a valid address For example if the user tried to issue a CALL to a MACRO name 226 Destination address must be word aligned The destination address is not aligned with the start of a program memory word For this device use even bytes to specify address 227 Substituting RETLW 0 for RETURN pseudo op Using retlw 0 instead of return to resume program execution 228 Invalid ROM location specified The data memory location specified is not valid for the operation specified
151. append the current directory and the directory C PROJECTS INCLUDE to the library object search path the following line should be added to the linker command file LIBPATH C PROJECTS INCLUDE 11 3 2 LKRPATH Linker command files that are included using a linker script INCLUDE directive are searched for using the linker command file search path The following directive appends additional search directories to the linker command file search path LKRPATH lkrpath where 1krpath is a semicolon delimited list of directories EXAMPLE 11 2 LKRPATH EXAMPLE To append the current directory s parent and the directory C PROJECTS SCRIPTS to the linker command file search path the following line should be added to the linker command file LKRPATH C PROJECTS SCRIPTS 11 33 FILES The following directive specifies object or library files for linking FILES objfile libfile objfile libfile where obj file 1ibfile is either an object or library file Note More than one object or library file can be specified in a single FILES direc tive EXAMPLE 11 3 FILES EXAMPLE To specify that the object module main o be linked with the library file math Lib the following line should be added to the linker command file FILES main o math lib DS33014K page 182 O 2009 Microchip Technology Inc Linker Scripts 11 3 4 INCLUDE The following directive includes an additional linker command file INCLUDE cmdfile
152. arian Overview 15 6 LIBRARIAN INPUT OUTPUT FILES The MPLIB librarian combines multiple object files into one library lib file Input Files Object File Loi Relocatable code produced from source files Output Files Library File lib A collection of object files grouped together for convenience 15 6 1 Object File o Object files are the relocatable code produced from source files The MPLIB librarian combines several object files into a single library file 15 6 2 Library File lib A library file may be created from object files by the MPLIB librarian or may be an existing standard library O 2009 Microchip Technology Inc DS33014K page 237 Assembler Linker Librarian User s Guide NOTES DS33014K page 238 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 16 Librarian Interfaces 16 1 INTRODUCTION How to use MPLIB librarian is discussed here For information on how librarian output can be used with the MPASM assembler and the MPLINK linker see the documentation for these tools Topics covered in this chapter MPLAB IDE Interface Command Line Options Command Line Examples and Tips 16 2 MPLAB IDE INTERFACE The MPLIB librarian may be used with MPLAB IDE to create a library file from project object files instead of an executable hex file With your project open in MPLAB IDE select Project gt Build Options g
153. assigned sections are allocated If the stack is unassigned then it gets allocated after the relocatable assigned sections and before the other relocatable unassigned sections are allocated DS33014K page 192 2009 Microchip Technology Inc Linker Processing 12 4 RELOCATION EXAMPLE The following example illustrates how the linker relocates sections Suppose the following source code fragment occurred in a file File ref c char varl Line 1 void setVarl void Line 2 varl OxFF Line 3 Suppose this compiles into the following assembly instructions Note This example deliberately ignores any code generated by MPLAB C18 to handle the function s entry and exit 0x0000 MOVLW OxFF 0x0001 MOVLB Need to patch with varl s bank 0x0002 MOVWF Need to patch with varl s offset When the compiler processes source line 1 it creates a symbol table entry for the identifier var1 which has the following information Symbol index gt name varl value 0 section data class extern When the compiler processes source line 3 it generates two relocation entries in the code section for the identifier symbol var1 since its final address is unknown until link time The relocation entries have the following information Reloc index gt address 0x0001 symbol varl type bank Reloc index gt address 0x0002 symbol varl type offset Once the linker has placed every section into target memory t
154. ata Begin an Object File Uninitialized Data Section ee 110 4 63 udata_acs Begin an Object File Access Uninitialized Data Section PIC18 MEUS ria o aaa ca aaa 111 4 64 udata ovr Begin an Object File Overlaid Uninitialized Data SECO aan iio 113 4 65 udata_shr Begin an Object File Shared Uninitialized Data Section PIC TER Oe RE WE 115 4 66 undefine Delete a Substitution Label oooonncccnnicccinnnncccccononcccccnnnns 116 4 67 variable Declare Symbol Variable AAA 117 4 68 while Perform Loop While Condition is True ooccnnccccnnnccccccnoncccccnnnns 118 Chapter 5 Assembler Examples Tips and Tricks dal TO UCI ios 121 5 2 Example of Displaying Count on Ports cccccoooccccccoccccnnnncnccccnanancn conan ncnnnannnnos 122 5 3 Example of Port B Toggle and Delay Routines 123 5 4 Example of Calculations with Variables and Constants ooooccccinnccccnnnnncco 130 5 5 Example of a 32 Bit Delay Routine ccocoocnnnnicccccnnnnnsccnoccnnnnnnnnnnnannnnennnnos 132 5 6 Example of SPI Emulated in Firmware EE 134 5 7 Example of Hexadecimal to ASCII Conversion 136 5 8 Other Sources of Examples AEN 137 5 9 Tips and Tricks calada 137 Chapter 6 Relocatable Objects A EE 141 6 2 Header Files iaa ii 141 6 3 Program Memory EE 142 6 4 Low High and Upper Operators ss 142 6 5 RAM AllOCAtION EE 145 6 6 Configuration Bits and ID Locations ooccccco
155. ata 0x120 res 1 Dank var var2 udata 0xla0 res 1 bank3_var var3 RST CODE 0x0 start start pagesel goto PGM CODE start banksel movlw varo 0x00 movwf var banksel movlw vari 0x01 movwf var banksel movlw var2 0x02 movwf var banksel movlw var3 0x03 movwf var goto end Declares beginning of a data section named banki_var which is in banki allocated the address 0xa0 varl is Declares beginning of a data section named bank2 var which is in bank2 var2 is allocated the address 0x120 Declares beginning of a data section named bank3 var which is in bank3 var3 is allocated the address 0x1a0 The code section named RST jis placed at program memory location 0x0 The next two instructions are placed in code section RST Jumps to the location labelled FUSEart This is the beginning of the code section named PGM It is a relocatable code section since no absolute address is given along with directive CODE Select banko var is accessible from banko Select banki var is accessible from bank1 also Select bank2 var is accessible from bank2 also Select bank3 var is accessible from bank3 also Go to current line loop here 4 66 undefine DELETE A SUBSTITUTION LABEL 4 66 1 undefine label Syntax DS33014K page 116 2009 Microchip Technology In
156. ated to program memory address 0200h because of the boot loader it is necessary to change the code section _entry_scn definition in c018i c file as shown below and to add the co18i c source file to the project for recompiling and linking pragma code entry scn 0x000200 void _ entry void _asm goto startup _endasm EEE DS33014K page 210 2009 Microchip Technology Inc Sample Applications Mixed Language Source Code The C compiler application code can be composed of one or more relocatable C source files that are compiled and linked together during build time In the code snippet shown below the source code file uses the pragma code directive to instruct the linker to place the relocated reset and interrupt vectors at the appropriate memory locations A main function must be included as this is called from the C compiler startup code that is added during the link process include lt p18cxxx h gt VER VECTOR MAPPING KR KR RR RR k k HA HR RR RK KR RR RR KK KK KK pragma code HIGH INTERRUPT VECTOR 0x000208 void high ISR void pragma code LOW INTERRUPT VECTOR 0x000218 void low ISR void APPLICATION CODE 4 k FO IO ROO IO I FO I IO IO KR I IO RARAS ISR goes here ISR goes here Hpragma code void main void while 1 A Main application code here END OF APPLICATION XKKXAKXAKHAAKA FO IR FO IO IO I IO IO E RAS 13 5 2 Assembler Usage This s
157. ation pointer to be advanced from its current location by the value specified in mem units In relocatable code using MPLINK linker res can be used to reserve data storage In non relocatable code label is assumed to be a program memory address Address locations are defined in words for PIC12 16 MCUs and bytes for PIC18 MCUs For MPASM v3 30 and later the res directive does not reserve an odd number of locations for PIC18 MCUs in non relocatable mode 4 57 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation The most common usage for res is for data storage in relocatable code 4 57 4 See Also fill org equ cblock 4 57 5 Simple Example buffer res 64 reserve 64 address locations of storage 4 57 6 Application Example res This example shows the advantage of res directive in developing relocatable code The program calculates the perimeter of a rectangle Length and width of the rectangle will be stored in buffers addressed by length and width The calculated perimeter will be stored in the double precision buffer addressed by perimeter include p18f452 inc Include standard header file for the selected device UDATA This directive allows the following data to be placed only in the data area DS33014K page 106 O 2009 Microchip Technology Inc Directives perimeter res 2 Two locations of memo
158. available through the web site at http support microchip com _ _ _ gt gt gt _ Q _ oo e e eeRoRoRoQRRRRruonpoRR p gt rornrpprorRp gt pt EE O 2009 Microchip Technology Inc DS33014K page 7 Assembler Linker Librarian User s Guide NOTES DS33014K page 8 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE PIC1X MCU Language Tools and MPLAB IDE INTRODUCTION The MPASM assembler the MPLINK object linker and the MPLIB object librarian are typically used together under MPLAB IDE to provide GUI development of application code for PIC1X MCU devices PIC10 12 16 18 MCUs The operation of these 8 bit language tools with MPLAB IDE is discussed here Topics covered in this chapter MPLAB IDE and Tools Installation e MPLAB IDE Setup MPLAB IDE Projects e Project Setup e Project Example MPLAB IDE AND TOOLS INSTALLATION In order to use the PIC MCU language tools with MPLAB IDE you must first install MPLAB IDE The latest version of this free software is available at our website http www microchip com or from any sales office back cover When you install MPLAB IDE you will be installing the MPASM assembler the MPLINK object linker and the MPLIB object librarian as well The language tools will be installed by default in the directory e C Program Files Microchip MPASM Suite The executables for each tool will be e MPASM Ass
159. bject file all executable code and data declarations must be placed within appropriate sections 153 Page or Bank bits cannot be evaluated for the operand The operand of a pagesel banksel or bankisel directive must be a relocatable address label or a constant 154 Each object file section must be contiguous Object file sections except udata_ovr sections cannot be stopped and restarted within a single source file To resolve this problem either name each section with its own name or move the code and data declarations such that each section is contiguous This error will also be generated if two sections of different types are given the same name 155 All overlaid sections of the same name must have the same starting address If multiple udata_ovr sections with the same name are declared they must all have the same starting address 156 Operand must be an address label When generating object files only address labels in code or data sections may be declared global Variables declared by the set or equ directives may not be exported 157 ORG at odd address For PIC18 devices you cannot place org at an odd address only even Consult your device data sheet 158 Cannot use RES directive with odd number of bytes For PIC18 devices you cannot use res to specify an odd number of bytes only even Consult your device data sheet 159 Cannot use FILL directive with odd number of bytes For PIC18 devices you cannot use i11 to
160. by Also associated file names have been replaced by numbers i e 1 and 2 See the end of the listing of the actual file paths and names MP2COD 3 80 03 COFF to COD File Converter Copyright c 2004 Microchip Technology Inc Listing File Generated Tue Nov 02 14 33 23 2004 Address Value Disassembly Source File include p18f452 inc 1 LIST 2 P18F452 INC Standard Header File 2 LIST 2 udata 1 Dest res 1 1 1 RST code 0x0 1 000000 ef16 GOTO Ox2c goto Start 1 000002 000 1 PGM code 1 00002c 0e0a MOVLW Oxa Start movlw Ox0A 1 00002e 6 80 MOVWF 0x80 0x1 movwf Dest 1 000030 9780 BCF 0x80 0x3 0x1 bet Dest 3 1 000032 ef16 GOTO Ox2c goto Start 1 000034 000 end 1 where 1 D Projects32 PIC18F452 SourceReloc asm 2 C Program Files Microchip MPASM Suite p18f452 inc 2009 Microchip Technology Inc DS33014K page 175 Assembler Linker Librarian User s Guide 9 7 7 Map File map The map file generated by MPLINK linker can be viewed by selecting File gt Open in MPLAB IDE and choosing the file you specified in the MPLINK linker options It provides information on the absolute location of source code symbols in the final output It also provides information on memory use indicating used unused memory This window is automatically reloaded after each rebuild The map file contains four tables The first table Section Info displays information about each section The informatio
161. c Directives 4 66 2 Description label is an identifier previously defined with the define directive The symbol named is removed from the symbol table 4 66 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is most often used with the ifdef and ifndef directives which look for the presence of an item in the symbol table 4 66 4 See Also define include ifdef ifndef 4 66 5 Simple Example define length 20 undefine length 4 66 6 Application Example define undefine See this example under define 4 67 variable DECLARE SYMBOL VARIABLE 4 67 1 Syntax variable label exprl label expr 4 67 2 Description Creates symbols for use in MPASM assembler expressions Variables and constants may be used interchangeably in expressions The variable directive creates a symbol that is functionally equivalent to those created by the set directive The difference is that the variable directive does not require that symbols be initialized when they are declared The variable values cannot be updated within an operand You must place variable assignments increments and decrements on separate lines 4 67 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This dire
162. cccoconccnoncononnonnononoconononnnnnanonos 10 3 Command Line Interface ooonccccccccccnnnonoccnonononononononancnonanananonos 10 4 Command Line Example AAA Chapter 11 Linker Scripts NNN leide ellen 11 2 Standard RE 11 3 Linker Script Command Line Information 11 4 Linker Script Caveats AAA 11 5 Memory Region Definition coin 11 6 Logical Section Definition vta 11 7 STACK Definition caia 11 8 Conditional Linker Statements AE DS33014K page vi 2009 Microchip Technology Inc Table of Contents Chapter 12 Linker Processing 1271 reel eu EE 191 12 2 Linker Processing Overview EE 191 12 3 Linker Allocation Algorta dd 192 12 4 Relocation E nl UE 193 12 5 Inttialized Data coins 194 12 6 Reserved Section Names ss 194 Chapter 13 Sample Applications CB Bier deeler e EE 195 13 2 How to Build the Sample Applications ooooocccninicicnnnoccccnnnnacccccnnnaannnnnnno 195 13 3 Sample Application 1 Templates and Linker Scripts ccceeeee 200 13 4 Sample Application 2 Placing Code and Setting Config Bits 203 13 5 Sample Application 3 Using a Boot Loader noooooccccccccccccccocccnnnnnnonanannnos 206 13 6 Sample Application 4 Configuring External Memory 217 Chapter 14 Errors Warnings and Common Problems VA ANETO AU Oir nda hans tds a Ad 223 14 2 Linker Parse Errors 223 TASS LINKER EMMONS 1 a 225 14 4 Linker Warning
163. clared through the command line the list directive the processor directive or Configure gt Select Device in MPLAB IDE Another directive that may be used to set configuration bits for PIC18 MCU devices is the __ config directive but this is not recommended for new code Note Do noi mix __ config and config directives in the same code 4 123 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is placed in source code so that when the code is compiled assembled into a hex file the configuration values are preset to desired values in your application This is useful when giving your files to a third party programming house as this helps insure the device is configured correctly when programmed 2009 Microchip Technology Inc DS33014K page 57 Assembler Linker Librarian User s Guide Place configuration bit assignments at the beginning of your code Use the configuration options setting value pairs listed in the standard include inc file or the addendum The config directive can be used multiple times in the source code but an error will be generated if the same bit is assigned a value more than once Le CONFIG CPO OFF WDT ON CONFIG CPO ON An error will be issued since CPO is assigned twice 4 12 4 See Also _ config _ idlocs list processor 4 12 5 Simple Example include p
164. code see Section 1 6 Assembler Operation 4 49 3 See Also expand 4 49 4 Simple Example Code example Define a macro to add two numbers add macro numl num2 movlw numi movwf result movlw num2 addwf result endm noexpand Use macro add add 100 90 Resulting listing file 00029 noexpand 00030 add 100 90 00031 4 50 nolist TURN OFF LISTING OUTPUT 4 50 1 Syntax nolist 4 50 2 Description and Usage Turn off listing file output This directive suppresses the information required for the listing file and source level debugging This will prevent the ability to debug the source code This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation 4 50 3 See Also list DS33014K page 98 2009 Microchip Technology Inc Directives 4 51 org SET PROGRAM ORIGIN 4 51 1 Syntax label org expr 4 51 2 Description Set the program origin for subsequent code at the address defined in expr If label is specified it will be given the value of the expr If no org is specified code generation will begin at address zero For PIC18 devices only even numbered expr values are allowed When generating an object file the org directive is interpreted as introducing an absolute CODE section with an internally generated name For example L1 org 0x200 is interpreted as scnname CODE 0x200 L1
165. code section named PGM It is a relocatable code section since no absolute address is given along with directive CODE start goto Go to current line loop here end 4 37 idata_acs BEGIN AN OBJECT FILE INITIALIZED DATA SECTION IN ACCESS RAM PIC18 MCUs 4 37 1 Syntax label idata_acs RAM address 4 37 2 Description This directive declares the beginning of a section of initialized data in Access RAM If label is not specified the section is named idata_acs The starting address is initialized to the specified address or will be assigned at link time if no address is specified No code can be placed by the user in this segment The linker will generate a look up table entry for each byte specified in an idata section You must then link or include the appropriate initialization code Examples of initialization code that may be used and modified as needed may be found with MPLINK linker sample application examples The res db and dw directives may be used to reserve space for variables res will generate an initial value of zero db will initialize successive bytes of RAM dw will initialize successive bytes of RAM one word at a time in low byte high byte order 4 37 3 Usage This directive is used in the following types of code relocatable For information on types of code see Section 1 6 Assembler Operation Use this directive to initialize your variables or use a udata directive and then initialize your
166. compiler linker script file for the PIC18F8722 is modified to instruct the linker that anew memory region is available by adding a CODEPAGE definition as shown below The use of the PROTECTED modifier prevents the linker from assigning random relocatable code to this region The name xsram is arbitrary and can be any desired name What is important are the START and END addresses which should match the physical memory address range of the external memory being used CODEPAGE NAME xsram START 0x020000 END 0x01FFFFF PROTECTED In addition to the new CODEPAGE a new logical SECTION is created and assigned to the program memory region specified in the associated CODEPAGE definition SECTION NAME SRAM BASE ROM xsram In the C compiler application s source code file the pragma romdata directive instructs the linker to allocate the SRAM s starting address to the memory region specified by the SRAM_BASE logical section definition The physical address is provided by the xsram codepage directive at 20000h Since the memory region occupied by the SRAM is program memory not data memory the rom qualifier is required in the declaration of the char array variable sram In addition this memory region is beyond a 16 bit address range 64Kbyte and therefore requires the use of the far qualifier in order for C pointers to correctly access this region pragma romdata SRAM BASE Assigns this romdata space at 0x020000 rom far char sram Declare an
167. config or CONFIG directive TRIS argument is out of range 0xHHHH not between 0xHHHH and OxHHHH Check the device data sheet to determine acceptable hex values for the TRIS register you are using Undefined CODEPAGE memName for SECTION secName A SECTION directive with a ROM attribute refers to a memory block which has not been defined Add a CODEPAGE directive to the linker command file for the undefined memory block Undefined DATABANK SHAREBANK memName for SECTION secName A SECTION directive with a RAM attribute refers to a memory block that has not been defined Add a DATABANK or SHAREBANK directive to the linker command file for the undefined memory block Undefined DATABANK SHAREBANK memName for STACK No input object files specified At least one object module must be specified either on the command line or in the linker command file using the FILES directive Unknown section type for secName The section type for secName needs to be defined Unknown section type for secName in file filename An input object or library module is not of the proper file type or it may be corrupted Unsupported processor type in file filename A processor was specified that is not currently supported by the linker See the Readme file for a list of supported devices 2009 Microchip Technology Inc DS33014K page 229 Assembler Linker Librarian User s Guide Unsupported relocation ty
168. crochip Technology Inc DS33014K page 123 Assembler Linker Librarian User s Guide udata Declare storage of RAM variables DTEMP res 1 Reserve 1 address location DFLAG res 1 Reserve 1 address location DFLO equ 0x00 Set flag bit 0 bit of DFLAG Set DTEMP to be a temporary register at a location in RAM determined at by the linker Set DFLAG to be the flag register at a location following the DTEMP register Set DFLO to a value to represent a bit in the DFLAG register in this case 0 See the Additional Comments section for more information rst code 0x00 Reset Vector pagesel Start Ensure correct page selected goto Start Jump to Start code Place the reset vector at program memory location 0x00 When the program resets the program will branch to Start intrpt code 0x04 Interrupt Vector goto ServInt Jump to service interrupt Place interrupt vector code at program memory location 0x04 since this device automatically goes to this address for interrupts When an interrupt occurs the program will branch to the ServInt routine isr code 0x08 Interrupt Service Routine Servint banksel OPTION REG Select Option Reg Bank 1 bsf OPTION REG TOCS Stop Timero banksel INTCON Select INTCON Bank 0 bcf INTCON TOIF Clear overflow flag bcf DFLAG DFLO Clear flag bit retfie Return from interrupt For the PIC16F877A there is not enough memory to add a pagesel ServInt statement to insure proper paging There
169. ction and in some it is not Change the section s type in the source files and rebuild the object modules Section secName can not fit the absolute section Section secName start 0xHHHH length 0xHHHH A section which has not been assigned to a memory in the linker command file can not be allocated Use the m lt mapfile gt switch to generate an error map file The error map will show the sections which were allocated prior to the error More memory must be made available by adding a CODEPAGE SHAREBANK or DATABANK directive or by removing the PROTECTED attribute or the number of input sections must be reduced Section romName can not have a RAM memory attribute specified in the linker command file Use only the ROM attribute when defining the section in the linker command file Section secName can not fit the section Section secName length 0xHHHH A section which has not been assigned to a memory in the linker command file can not be allocated Use the m lt mapfile gt switch to generate an error map file The error map will show the sections which were allocated prior to the error More memory must be made available by adding a CODEPAGE SHAREBANK or DATABANK directive or by removing the PROTECTED attribute or the number of input sections must be reduced Section secName contains code and can not have a RAM memory attribute specified in the linker command file Use only the ROM attribute when defining the s
170. ction named PGM It is a relocatable code section Since no absolute address is given along with directive CODE start clrf group1_varl A groupl varl initialized to zero clrf groupl var2 A groupl var2 initialized to zero clrf group2 varl A group varl initialized to zero clrf group2 var2 A group2 var initialized to zero DS33014K page 112 2009 Microchip Technology Inc Directives goto Go to current line loop here end In the code above A references the access RAM This A designation can be explicitly stated by the code but is not needed since the assembler will automatically locate variables in access memory if possible 4 64 udata ovr BEGIN AN OBJECT FILE OVERLAID UNINITIALIZED DATA SECTION 4 64 1 Syntax label udata_ovr RAM address 4 64 2 Description This directive declares the beginning of a section of overlaid uninitialized data If 1abe1 is not specified the section is named udata_ovr The starting address is initialized to the specified address or will be assigned at link time if no address is specified The space declared by this section is overlaid by all other udata_ovr sections of the same name It is an ideal way of declaring temporary variables since it allows multiple variables to be declared at the same memory location No code can be generated in this segment The res directive should be used to reserve space for data Note Two sections in the same source file are not perm
171. ctive see Section 4 48 messg Create User Defined Message 302 Register in operand not in bank 0 Ensure that bank bits are correct This is a commonly seen reminder message to tell you that a variable that is being accessed in not in bank 0 This message was added to remind you to check your code particularly code in banks other than 0 Review the section on banksel Section 4 7 banksel Generate Bank Selecting Code and bankisel Section 4 6 bankisel Generate Indirect Bank Selecting Code PIC12 16 MCUs and ensure that your code uses bank bits whenever changing from ANY bank to ANY other bank including bank 0 Since the assembler or linker can t tell which path your code will take you will always get this message for any variable not in bank 0 You can use the errorlevel command to turn this and other messages on and off but be careful as you may not spot a banking problem with this message turned off For more about errorlevel see Section 4 30 errorlevel Set Message Level A similar message is 306 for paging 303 Program word too large Truncated to core size The program word instruction width is too large for the selected device s core program memory size Therefore the word has been truncated to the proper size For example a 14 bit instruction would be truncated to 12 bits to be used by a PIC16F54 304 ID Locations value too large Last four hex digits used Only four hex digits are
172. ctive is most used for conditional assembly code Note variable is not used to declare a run time variable but a variable that is used by the assembler To create a run time variable refer to the directives res equ or cblock 4 67 4 See Also constant set 4 67 5 Simple Example variable RecLength 64 Set Default RecLength constant BufLength 512 Init BufLength 2009 Microchip Technology Inc DS33014K page 117 Assembler Linker Librarian User s Guide RecLength may be reset later in RecLength 128 constant MaxMem RecLength BufLength CalcMaxMem 4 67 6 Application Example variable constant This example shows the usage of the variable directive used for creating symbols which may be used in MPASM assembler expressions only The symbols created with this directive do not occupy any physical memory location of microcontroller include p16f877a inc Include standard header file for the selected device variable perimeter 0 The symbol perimeter is sinitialized to 0 variable area If a symbol is declared as variable then initialization is optional i e it may or may not be initialized constant Ingth 50H The symbol lngth is initialized to 50H constant wdth 25H The symbol wdth is initialized to 25H A constant symbol always needs to be initialized perimeter 2 lngth wdth The value of a CONSTANT cannot be reassigned after having been initialized once S
173. d The working W register has not been modified 318 Superseding current maximum ROM and ROM map Operation will cause maximum ROM to be exceeded UNKNOWN MESSAGE An internal application error has occurred is the value of the last defined message plus 1 However it is not severe enough to keep your code from assembling i e itis a message not an error DS33014K page 166 2009 Microchip Technology Inc Errors Warnings Messages and Limitations 8 5 ASSEMBLER LIMITATIONS 8 5 1 General Limitations e If a fully qualified path is specified only that path will be searched Otherwise the search order is 1 current working directory 2 source file directory and 3 MPASM assembler executable directory There is a source file line limit expanded of 200 characters 8 5 2 Directive Limitations Do not use includes in macros if directive limits Maximum nesting depth 16 include directive limits Maximum nesting depth 5 Maximum number of files 255 macro directive limits Maximum nesting depth 16 while directive limits Maximum nesting depth 8 Maximum number of lines per loop 100 Maximum iterations 256 8 5 3 MPASM Assembler Versions before v3 30 Assembler versions before v3 30 v3 2x and earlier have limitations based on the generation a COD file for debugging and the support of a command line version mpasm exe e There is a 62 character length restricti
174. d MPASM assembler to the proper RAM location s at start up The names of the initializer sections created by the linker are the same as the initialized data sections with a_i appended For example if an input object module contains an initialized data section named idata_main o the linker will create a section in program memory with the name idata_main o i which contains the data In addition to creating initializer sections the linker creates a section named cinit in program memory The cinit section contains a table with entries for each initialized data section Each entry is a triple which specifies where in program memory the initializer section begins where in data memory the initialized data section begins and how many bytes are in the initialized data section The boot code accesses this table and copies the data from ROM to RAM 12 6 RESERVED SECTION NAMES Both the MPASM assembler and the MPLAB C18 C compiler have reserved names for certain types of sections Please see the documentation for these tools to ensure that you do not use a reserved name for your own section The linker will be unable to generate the application if there is a section naming conflict DS33014K page 194 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 13 Sample Applications 13 1 INTRODUCTION You can learn the basics of how to use MPLINK linker from the four sample applications listed below
175. d code than COFF Emulation The process of executing software loaded into emulation memory as if it were firmware residing on a microcontroller device Emulation Memory Program memory contained within the emulator Emulator Hardware that performs emulation Emulator System The MPLAB ICE 2000 and 4000 emulator systems include the pod processor module device adapter cables and MPLAB IDE software Environment IDE The particular layout of the desktop for application development Environment MPLAB PM3 A folder containing files on how to program a device This folder can be transferred to a SD MMC card EPROM Erasable Programmable Read Only Memory A programmable read only memory that can be erased usually by exposure to ultraviolet radiation Event A description of a bus cycle which may include address data pass count external input cycle type fetch R W and time stamp Events are used to describe triggers breakpoints and interrupts Export Send data out of the MPLAB IDE in a standardized format Extended Microcontroller Mode In extended microcontroller mode on chip program memory as well as external memory is available Execution automatically switches to external if the program memory address is greater than the internal memory space of the PIC17 or PIC18 device External Label A label that has external linkage External Linkage A function or variable has external linkage if it can be referenced fr
176. d data can be used db will define successive bytes of data memory dw and data will define successive words of data memory in low byte high byte order The following example shows how data will be initialized EXAMPLE 6 5 RELOCATABLE CODE LISTING 00001 IDATA 0000 01 02 03 00002 Bytes DB 1 2 3 0003 34 12 78 56 00003 Words DW 0x1234 0x5678 0007 41 42 43 00 00004 String DB ABC 0 6 6 CONFIGURATION BITS AND ID LOCATIONS Configuration bits and ID locations can still be defined in a relocatable object using the following directives e Section 4 11 _ config Set Processor Configuration Bits e Section 4 12 config Set Processor Configuration Bits PIC18 MCUs e Section 4 38 __ idlocs Set Processor ID Locations Only one linked module can specify these directives They should be used prior to declaring any code sections After using these directives the current section is undefined 6 7 ACCESSING LABELS FROM OTHER MODULES Labels that are defined in one module for use in other modules must be exported using the global directive see 4 35 global Export a Label Modules that use these labels must use the extern directive see 4 33 extern Declare an Externally Defined Label to declare the existence of these labels An example of using the global and extern directives is shown below EXAMPLE 6 6 RELOCATABLE CODE DEFINING MODULE udata InputGain res 1 OutputGain res 1 global InputGain OutputGain cod
177. d line would be appropriate mplib t dsp lib Tips MPLIB librarian creates library files that may contain only a single external definition for any symbol Therefore if two object modules define the same external symbol the librarian will generate an error if both object modules are added to the same library file To minimize the code and data space which results from linking with a library file the library s member object modules should be as small as possible Creating object modules that contain only a single function can significantly reduce code space DS33014K page 240 O 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 17 Errors 17 1 INTRODUCTION MPLIB librarian detects the following sources of error and reports them Topics covered in this chapter e Librarian Parse Errors e Library File Errors e COFF File Errors 17 2 LIBRARIAN PARSE ERRORS MPLIB librarian parse errors are listed alphabetically below Invalid Object Filename All object filenames must end with o Invalid Switch An unsupported switch was specified For a list of supported switches refer to command line options Library Filename is Required All commands require a library filename All library filenames must end with Llib 17 3 LIBRARY FILE ERRORS Library file processing errors are listed alphabetically below Could not build member memberName in library file filename The file is no
178. d other language tools These include the MPLAB C18 and MPLAB C30 C compilers MPASM and MPLAB ASM30 assemblers MPLINK and MPLAB LINK30 object linkers and MPLIB and MPLAB LIB30 object librarians Emulators The latest information on Microchip in circuit emulators This includes the MPLAB ICE 2000 and MPLAB ICE 4000 In Circuit Debuggers The latest information on the Microchip in circuit debugger MPLAB ICD 2 MPLAB IDE The latest information on Microchip MPLAB IDE the Windows Integrated Development Environment for development systems tools This list is focused on the MPLAB IDE MPLAB IDE Project Manager MPLAB Editor and MPLAB SIM simulator as well as general editing and debugging features Programmers The latest information on Microchip programmers These include the MPLAB PM3 and PRO MATE II device programmers and the PICSTART Plus and PICkit 1 development programmers DS33014K page 6 2009 Microchip Technology Inc Preface CUSTOMER SUPPORT Users of Microchip products can receive assistance through several channels e Distributor or Representative e Local Sales Office e Field Application Engineer FAE e Technical Support Customers should contact their distributor representative or field application engineer FAE for support Local sales offices are also available to help customers A listing of sales offices and locations is included in the back of this document Technical support is
179. de relocatable For information on types of code see Section 1 6 Assembler Operation This directive is similar to udata except that it is only used on parts with memory accessible from multiple banks udata_shr sections are used with SHAREBANK locations in the linker script where as udata sections are used with DATABANK locations in the linker script See the data sheet for the PIC16F873A for a specific example 4 65 4 See Also extern global idata udata udata_acs udata_ovr 4 65 5 Simple Example Temps udata_shr Templ res 1 Temp2 res 1 Temp3 res 1 4 65 6 Application Example udata shr This program demonstrates the udata_shr directive This directive declares the beginning of a section of shared uninitialized data This directive is used to declare variables that are allocated in RAM that is shared across all RAM banks i e unbanked RAM include p16f877a inc Include standard header file for the selected device shared data udata shr Declares the beginning of a data section named shared data var res 1 which is shared by all banks var is the location which can be accessed irrespective of banksel bits bank0_var udata 0X20 Declares beginning of a data varo res 1 section named bank0_var which is in bank0 var0 is allocated the address 0x20 2009 Microchip Technology Inc DS33014K page 115 Assembler Linker Librarian User s Guide udata 0xa0 res 1 bank1_var varl ud
180. de was previously generated for this address 119 Code too fragmented The code is broken into too many pieces This error is very rare and will only occur in source code that references addresses above 32K including configuration bits 120 Call or jump not allowed at this address A call or jump cannot be made to this address For example CALL destinations on the PIC16C5x family must be in the lower half of the page 121 Illegal label Labels are not allowed on certain directive lines Simply put the label on its own line above the directive Also high low page and bank are not allowed as labels 122 Illegal opcode Token is not a valid opcode 2009 Microchip Technology Inc DS33014K page 157 Assembler Linker Librarian User s Guide 123 Illegal directive Directive is not allowed for the selected processor for example the idlocs directive on devices with ID locations 124 Illegal argument An illegal directive argument for example list foobar 125 Illegal condition A bad conditional assembly For example an unmatched endif 126 Argument out of range Opcode or directive argument out of the valid range for example TRIS 10 127 Too many arguments Too many arguments specified for a macro call 128 Missing argument s Not enough arguments for a macro call or an opcode 129 Expected Expected a certain type of argument The expected list will be provided 130 Processor type previously defined A d
181. e Filter global Filter Filter code EXAMPLE 6 7 RELOCATABLE CODE REFERENCING MODULE extern InputGain OutputGain Filter udata Reading res 1 code movlw GAIN1 movwf InputGain movlw GAIN2 movwf OutputGain DS33014K page 146 O 2009 Microchip Technology Inc Relocatable Objects movf Reading W call Filter 6 8 PAGING AND BANKING ISSUES In many cases RAM allocation will span multiple banks and executable code will span multiple pages In these cases it is necessary to perform proper bank and page set up to properly access the labels However since the absolute addresses of these variable and address labels may not be known at assembly time it is not always possible to place the proper code in the source file For these situations two directives banksel 4 7 banksel Generate Bank Selecting Code and pagesel 4 53 pagesel Generate Page Selecting Code PIC10 12 16 MCUs have been added These directives instruct the linker to generate the correct bank or page selecting code for a specified label An example of how code should be converted is shown below EXAMPLE 6 8 BANKSEL AND PAGESEL Hard Coded Banking and Paging Use indirect addressing FSR and the Status register for banking and paging respectively include p12f509 inc Varl equ 0x10 Declare variables Var2 equ 0x30 movlw InitialValue bef FSR 5 Data memory Varl bank 0 movwf Varl bsf FSR 5 Data memory Var2 bank 1 movwf Var2
182. e C source files that are compiled and linked together during build time In the code snippet shown below the source code file uses the pragma code directive to instruct the linker to place the relocated reset and interrupt vectors at the appropriate memory locations A main function must be included as this is called from the C compiler startup code that is added during the link process The linker automatically includes this C compiler initialization code provided in file cO18i c and must be accessed by the application code through an in line assembly goto instruction shown below include lt p18cxxx h gt px VECTOR MAPPING KKK KR RR RR RK RRR RR RK k k RR RRR KK KK KK extern void startup void See co18i c in your C18 compiler dir pragma code _RESET INTERRUPT VECTOR 0x000800 void reset void pragma code HIGH INTERRUPT VECTOR 0x000808 void high ISR void _asm goto startup _endasm pragma code _LOW_INTERRUPT_VECTOR 0x000818 void low ISR void APPLICATION CODE 4 k EE IO IO I IO IO IOI IO RARAS b pragma code void main void while 1 Main application code here ER END OF APPLICATION NA O 2009 Microchip Technology Inc DS33014K page 209 Assembler Linker Librarian User s Guide 13 5 1 4 EXAMPLE 3 MIXED LANGUAGE BOOT LOADER APPLICATION This example shows the linker script startup code and source code modi
183. e PIC12 16 device family If you are using a PIC18 device it is recommended that you use the table read write TBLRD TBLWT features See the device data sheet for more information 4 19 4 See Also data db de dtm dw 4 19 5 Simple Example dt A Message 0 dt FirstValue SecondValue EndOfValues 4 20 dtm DEFINE TABLE EXTENDED PIC16 MCUS ONLY 4 20 1 Syntax label dtm expr expr expr 4 20 2 Description dtm Define data Table using MOVLW Generates a series of MOVLW instructions one instruction for each expr Each expr must be an 8 bit value Each character in a string is stored in its own MOVLW instruction 4 20 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is used when generating a table of data for the PIC16 extended device family 4 20 4 See Also data db de dt dw 4 20 5 Simple Example dtm A Message 0 dtm FirstValue SecondValue EndOfValues 2009 Microchip Technology Inc DS33014K page 67 Assembler Linker Librarian User s Guide 4 21 daw DECLARE DATA OF ONE WORD 4 21 1 Syntax label dw expr expr expr 4 21 2 Description dw Data Word Reserve program memory words for data initializing that space to specific values For PIC18 devices dw functions like db Values are stored into successive memory locations and the location counter is
184. e information 2009 Microchip Technology Inc DS33014K page 141 Assembler Linker Librarian User s Guide 6 3 PROGRAM MEMORY Program memory code must be organized into a logical code section To do this the code must be preceded by a code section declaration See 4 9 code Begin an Object File Code Section to make it relocatable Absolute Code Equivalent Relocatable Code Start clrw code Address determined option by the linker Start clrw option Progl org 0x0100 Progl code 0x0100 Start at 0x0100 movlw 0x0A movlw Ox0A movwf varl movwf varl If more than one code section is defined in a source file each section must have a unique name If the name is not specified it will be given the default name code Each program memory section must be contiguous within a single source file A section may not be broken into pieces within a singe source file The physical address of the code can be fixed by supplying the optional address parameter of the code directive Situations where this might be necessary are e Specifying reset and interrupt vectors Ensuring that a code segment does not overlap page boundaries EXAMPLE 6 2 RELOCATABLE CODE Reset code Ox01FF Fixed address goto Start Pgm code Address determined by the linker clrw option 6 4 LOW HIGH AND UPPER OPERATORS Low high and upper operators are used to return one byte of a multi byte label value If low is used onl
185. e macro invocation v expr Return the integer value of expr Typically used to create unique variable names with common prefixes or suffixes Cannot be used in conditional assembly directives e g ifdef while Arguments may be used anywhere within the body of the macro except as part of normal expression The exitm directive provides an alternate method for terminating a macro expansion During a macro expansion this directive causes expansion of the current macro to stop and all code between the exitm and the endm directives for this macro to be ignored If macros are nested exitm causes code generation to return to the previous level of macro expansion 7 5 MACRO INVOCATION Once the macro has been defined it can be invoked at any point within the source module by using a macro call as described below macro name larg arg where macro_name is the name of a previously defined macro and arguments are supplied as required The macro call itself will not occupy any locations in memory However the macro expansion will begin at the current memory location Commas may be used to reserve an argument position In this case the argument will be an empty string The argument list is terminated by white space or a semicolon DS33014K page 152 2009 Microchip Technology Inc Macro Language EXAMPLE 7 1 MACRO CODE GENERATION The following macro define table macro local a 0 while a lt 3 entry v
186. e set as specified To set these vari ables go to the Command prompt and type SET to view and set the variables In Windows OS go to Start gt Settings gt Control Panel gt System Advanced tab Environment Variables button View and edit variables here a PATH Make sure the executables can be found as per Table 13 1 and Table 13 2 b MCC INCLUDE If MPLAB C Compiler for PIC18 MCUs is used this should point to the h subdirectory of the C compiler installation directory 2 For C code compilation use the following mcc18 p device sourcel c where device is the device representation e g 18F8772 for the PIC18F8722 device and source1 cis the C code source file example For multiple files leave a space between each file 3 For MPASM assembly use the following mpasmwin p device source2 asm where device is the device representation and source2 asmis the assembly code source file example For multiple files leave a space between each file 4 For MPLINK linking of files to create an application use shown on two lines but type on one mplink pdevice u_macro sourcel o source2 o 1 c mcci8 lib m app map or for a modified linker script mplink modified lkr u_macro sourcel o source2 o 1 c mcci8 lib m app map where Option Description device The device representation modified lkr The modified linker script file _ macro A conditional macro eg CRUNTIME For more details s
187. e to be printed in the listing file and error file include p16f877a inc Include standard header file for the selected device variable baudrate variable used to define required baud rate baudrate set D 5600 Enter the required value of baud rate here if baudrate D 1200 amp amp baudrate D 2400 amp amp baudrate D 4800 amp amp baudrate D 9600 amp amp baudrate D 19200 error Selected baud rate is not supported messg only baud rates 1200 2400 4800 9600 19200 Hz amp amp are supported endif The if endif code outputs error and messg if the baud rate selected is other than 1200 2400 4800 9600 or 19200 Hz RST CODE 0x0 The code section named RST is placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start start PGM CODE This is the beginning of the code section named PGM It is a relocatable code section since no absolute address is given along with directive CODE 2009 Microchip Technology Inc DS33014K page 97 Assembler Linker Librarian User s Guide start goto Go to current line loop here end 4 49 noexpand TURN OFF MACRO EXPANSION 4 49 1 Syntax noexpand 4 49 2 Description and Usage Turns off macro expansion in the listing file This directive is used in the following types of code absolute For information on types of
188. e was used to remove Tdistance2 from the symbol table i e Tdistance2 can no longer be used to substitute for 25 udata 0x20 Set up distance reg distance reg res 1 at GPR 0x20 The udata and res directives are used to assign distance reg to register 0x20 For more on these directives see example 1 rst code 0x00 Reset Vector pagesel Start goto Start code Start Program Start clrf distance reg Clear register movlw Tdistancel Move value of Tdistancel A __ __ _ _ _ _ ___ _ _ __ __ _ _ _ __ __ a EQ EA _E o Fe DS33014K page 130 O 2009 Microchip Technology Inc Assembler Examples Tips and Tricks movwf distance reg into distance reg constant distancel 10 Declare distancel ja constant symbol Declare a constant symbol distance1 with a value of 10 Once a constant is declared its value cannot be altered variable distance2 Declare distance2 a variable symbol Declare a variable symbol distance2 The variable directive does not require the symbol to be initialized when declared distance3 set 10 Define a value for the symbol distance3 Define symbol distance3 as 10 distance2 15 Give distance2 an initial value distance2 distancel distance2 Add distancel to distance2 Variable assignments increments and decrements must be placed on separate lines distance3 set 15 Change value of distance3 distance2 distance2 distance3 Add distance3 to distance2 movlw distanc
189. e2 Move value of distance2 movwf distance reg into distance reg goto Start Loop back to Start end 5 4 3 Using Watch Windows Once the program begins the value of Tdistancel is placed into distance reg This can be observed in a watch window in MPLAB IDE where the value of distance reg will become 50 The symbol Tdistance1 will not be found in the watch window symbol list as symbols defined using the define directive are not available for viewing in MPLAB IDE because they are not RAM variables The final lines of the example program write the final value of distance2 to distance reg If you had a watch window open to see distance reg loaded with the value of 50 you will see it change to 3A Remember that the radix is hexadecimal so hex addition was used to determine the distance2 value O 2009 Microchip Technology Inc DS33014K page 131 Assembler Linker Librarian User s Guide 5 5 EXAMPLE OF A 32 BIT DELAY ROUTINE Directives highlighted in this example are e macro endm e banksel 5 5 1 Program Functional Description A delay routine is needed in many applications For this example delay increments are 20 us with the routine having a range of 40 us to 23 8 hours This assumes a 4 MHz clock 5 5 2 Commented Code Listing Each loop takes 20 clocks or 20 us per loop at 4MHz or 1MIPS clock Turn off in config bits WDT for long simulations Hinclude p16F877A inc udata 0x20 DlyO res ab Stores 4 byt
190. eared flag bit DFLO now causes the delay loop TLOOP to end thus ending Delay 1 routine 2009 Microchip Technology Inc DS33014K page 129 Assembler Linker Librarian User s Guide 5 4 EXAMPLE OF CALCULATIONS WITH VARIABLES AND CONSTANTS Directives highlighted in this example are es define undefine e set constant variable Items covered in this example are e Program Functional Description e Commented Code Listing e Using Watch Windows 5 4 1 Program Functional Description This program performs several calculations using defined constants and variables The application is written as relocatable code i e you must use both the assembler and linker to generate the executable The standard header file for the processor selected is included using include Sections of code are created using the code statement 5 4 2 Commented Code Listing PRR RRR RR KKK KKK KKK KERR KERR KERR AK kkk kk kkk MPASM Assembler Control Directives Example Program 2 Perform calculations PRR RRR RR kk kkk kkk kkk k EEK k k kk k k k k kkk k kk k k include p16f877a inc Include header file define Tdistancel 50 Define the symbol Tdistancel Hdefine Tdistance2 25 Define the symbol Tdistance2 undefine Tdistance2 Remove Tdistance2 from the symbol table The define directive was used to define two substitution strings Tdistance1 to substitute for 50 and Tdistance2 to substitute for 25 Then undefin
191. ecified address or will be assigned at link time if no address is specified No code can be generated in this segment The res directive should be used to reserve space for data Note Two sections in the same source file are not permitted to have the same name 4 62 3 Usage This directive is used in the following types of code relocatable For information on types of code see Section 1 6 Assembler Operation For relocatable code this directive is used to create a data RAM section For absolute code do not use this directive Use directives equ or cblock 4 62 4 See Also extern global idata udata_acs udata_ovr udata_shr 4 62 5 Simple Example udata Varl res 1 Double res 2 4 62 6 Application Example udata This program demonstrates the udata directive which declares the beginning of a section of uninitialized data udata does not set initialize the starting value of the variables you must do this in code DS33014K page 110 O 2009 Microchip Technology Inc include p16f877a inc Directives Include standard header file for the selected device group1 udata 0x20 groupl data stored at locations starting at 0x20 groupl varl res 1 groupl _varl located at 0x20 groupl var2 res 1 groupl var2 located at 0x21 group2 udata Declaration of group2 data The addresses for variables under group2 varl res 1 this data section are allocated group2 var2 res 1 automatically by the linker R
192. ection discusses how to use the MPASM assembler the assembler when developing bootloader and related application code There are three assembler examples showing suggested linker script modifications and appropriate source code directive usage for a boot loader and application project To better understand how the code corresponds to locations in device program memory see Section 13 5 2 1 Assembler Memory Map The modified linker script file provided in this example is designed to support all three of the following examples See Section 13 5 2 2 Assembler Linker Script Example 1 shows an assembler boot loader See Section 13 5 2 3 Example 1 Assembler Boot Loader Source Code Example 2 shows a multiple module relocatable assembler application See Section 13 5 2 4 Example 2 Assembler Application Source Code Example 3 incorporates both the assembler boot loader and multiple module relocatable assembler application as a single program memory image See Section 13 5 2 5 Example 3 Assembler Boot Loader Application Source Code To build the assembler sample application refer to Section 13 2 How to Build the Sample Applications 2009 Microchip Technology Inc DS33014K page 211 Assembler Linker Librarian User s Guide 13 5 2 1 ASSEMBLER MEMORY MAP The boot loader typically resides in the boot block region of the PIC18F8720 s program memory which is the first 512 bytes of memory fro
193. ection in the linker command file Section secName contains initialized data and can not have a ROM memory attribute specified in the linker command file Use only the RAM attribute when defining the section in the linker command file Section secName contains initialized rom data and can not have a RAM memory attribute specified in the linker command file Use only the ROM attribute when defining the section in the linker command file O 2009 Microchip Technology Inc DS33014K page 227 Assembler Linker Librarian User s Guide Section secName contains uninitialized data and can not have a ROM memory attribute specified in the linker command file Use only the RAM attribute when defining the section in the linker command file Section secName has a memory memName which can not fit the absolute section Section secName start 0xHHHH length 0xHHHH The memory which was assigned to the section in the linker command file either does not have space to fit the section or the section will overlap another section Use the m lt mapfile gt switch to generate an error map file The error map will show the sections which were allocated prior to the error Section secName has a memory memName which can not fit the section Section secName length 0xHHHH The memory which was assigned to the section in the linker command file either does not have space to fit the section or the section will overlap another sect
194. ed for backward compatibility fixed FIXED Use fixed format parser mm ON OFF On Print memory map in list file n nnn 60 Set lines per page p type None Set processor type for example PIC16F54 See also processor Note Processor type is set in MPLAB IDE Configure gt Device pe type None Set processor type and enable extended instruction set for example LIST pe PIC18F4620 Only valid with processors which support the extended instruction set and the generic processor PIC18XXX Is overridden by command line option y disable extended instruction set Note Processor type is set in MPLAB IDE Configure gt Device r radix hex Set radix hex dec oct See also radix st ON OFF On Print symbol table in list file t ON OFF Off Truncate lines of listing otherwise wrap w 0 1 2 0 Set the message level See also errorlevel 2009 Microchip Technology Inc DS33014K page 91 Assembler Linker Librarian User s Guide TABLE 4 1 LIST DIRECTIVE OPTIONS CONTINUED Option Default Description x ON OFF On Turn macro expansion on or off Note All list options are evaluated as decimal numbers by default 4 43 4 See Also errorlevel expand noexpand nolist processor radix 4 43 5 Simple Example Set the processor type to PIC18F452 the hex file output format to INHX32 and the radix to decimal list p 18f452 f INHX32 r DEC 4 44 local DECLARE LOCAL MACRO VARIABLE 4 44 1 S
195. ed in the table below Note These operators cannot be used with program variables They are for use with directives only The operator order in the table also corresponds to its precedence where the first operator has the highest precedence and the last operator has the lowest precedence Precedence refers to the order in which operators are executed in a code statement DS33014K page 40 TABLE 3 1 ARITHMETIC OPERATORS IN ORDER OF PRECEDENCE Operator Example goto 3 Left Parenthesis 1 d 4 Current Return program counter Right Parenthesis Item NOT logical complement Length 1 256 if a b Negation 2 s complement 1 Length Complement flags flags low Return low byte of address movlw low CTR_Table high Return high byte of address movlw high CTR_Table upper Return upper byte of address movlw upper CTR Table Multiply a bx c Divide a b e Modulus entry len tot_len 16 Add tot_len entry len 8 1 Subtract entry_len tot 1 8 lt lt Left shift flags flags lt lt 1 O 2009 Microchip Technology Inc Expression Syntax and Operation TABLE 3 1 ARITHMETIC OPERATORS IN ORDER OF PRECEDENCE Operator Example gt gt Right shift flags gt gt 1 Greater or equal flags if entry idx gt num entries Greater than if entry idx gt num entries Less t
196. ee Section 11 8 Conditional Linker Statements sourcel o A C code object file source2 o An assembly code object file e mec18 lib The library path only needed if the MPLAB C compiler for PIC18 MCUs was used as here to generate source1 o from sourcel c app map The map file DS33014K page 198 2009 Microchip Technology Inc Sample Applications 13 2 2 2 EXAMPLE As an example consider Sample Application 3 C code mixed boot loader application To build an application on the command line 1 The listed Environment Variables need to be set as specified a PATH Make sure the executables can be found as per Table 13 2 b MCC_INCLUDE Point to the c mcc18 h subdirectory 2 For C code compilation use the following mcc18 p 18F8722 c018i mod c mixed c 3 For MPLINK linking of files to create an application use shown on two lines but type on one mplink mixed lkr u_CRUNTIME c018i mod o mixed o 1 c mcci8 lib m mixed map If you want to link for debug mode or PIC18 extended mode see Section 11 8 Conditional Linker Statements O 2009 Microchip Technology Inc DS33014K page 199 Assembler Linker Librarian User s Guide 13 3 SAMPLE APPLICATION 1 TEMPLATES AND LINKER SCRIPTS In the MPLAB IDE installation assembly source code templates and generic linker script files are provided for most devices supported by MPLAB IDE The source code templates give you a starting point from which to begin
197. embler mpasmwin exe e MPLINK Object Linker mlink exe e MPLIB Object Librarian mplib exe e Other Utilities All device include header files are also in this directory For more on these files see MPASM assembler documentation All device linker script files are in the LKR subdirectory For more on these files see MPLINK object linker documentation Code examples and template files are also included in subdirectories for your use Template files are provided for absolute code Code and relocatable code Object development 2009 Microchip Technology Inc DS33014K page 9 Assembler Linker Librarian User s Guide MPLAB IDE SETUP Once MPLAB IDE is installed on your PC check the settings below to ensure that the language tools are properly recognized under MPLAB IDE 1 From the MPLAB IDE menu bar select Project gt Set Language Tool Locations to open a dialog to set check language tool executable location FIGURE 1 SET LANGUAGE TOOL LOCATIONS x r Registered Tools Microchip C17 Toolsuite Microchip C18 Toolsuite Microchip C30 Toolsuite E Microchip MPASM Toolsuite E Executables MPASM Assembler mpasmwin exe MPLIB Librarian mplib exe MPLINK Object Linker mplink exe E Default Search Paths amp Directories EH microE ngineering PicBasic Pro Toolsuite EH microE ngineering PicBasic T oolsuite e Location C Program Files MPLAB IDE MCHIP_Tools mpasmwin exe Browse
198. er For illustrative purposes suppose the locations selected by the linker are the general purpose registers GPRs 0x20 and 0x21 DFLO is assigned the value 0x00 and will be used as the name for pin 0 in the DFLAG register FIGURE 5 1 PIC16F877A REGISTER FILE MAP Special 9209 Function lt Registers ADCONO Ox1F 7 DTEMP 0x20 General DFLAG L 0x21 Purpose Registers DFLO L Ox7F Bank 0 Bank 1 Bank 2 Bank 3 The directives udata and res are used in relocatable code to define multiple registers instead of equ For more on these directives see e Section 4 62 udata Begin an Object File Uninitialized Data Section e Section 4 57 res Reserve Memory e Section 4 28 equ Define an Assembler Constant 5 3 5 Program Memory CODE Sections and Paging The code directive is used to specify sections of relocatable code For absolute code the org directive is used See Chapter 6 Relocatable Objects for more on the differences between relocatable and absolute code For more on these directives see e Section 4 9 code Begin an Object File Code Section e Section 4 51 org Set Program Origin If no code directive is used code generation will begin at address zero For this example code is used to specify code at 0x00 reset address 0x04 interrupt address 0x08 interrupt service routine and 0x1000 Delay 2 address It does not explicit
199. erate cross reference file Create an cross reference file A cross reference file contains a listing of all symbols used in the assembly code Hex file format for single file assemblies When assembling a single file the assembler may be used to generate a hex file Choose the format here When assembling multiple files the assembler generates object files which must be linked with the linker to generate a hex file Choose the hex file format for the linker in this case Restore Defaults Restore tab default settings Use Alternate Settings Text Box Enter options in a command line non GUI format 2009 Microchip Technology Inc DS33014K page 13 Assembler Linker Librarian User s Guide Build Options Dialog MPLAB C17 Tab If Installed Although the MPLAB C17 C compiler works with MPLAB IDE it must be acquired separately See the Microchip website www microchip com for details This compiler supports PIC17C MCU devices Note PIC17C MCUs are end of life devices Consider migrating to PIC18X MCU devices A subset of command line options may be specified in MPLAB IDE in the Build Options dialog MPLAB C17 tab Select a category and then set up compiler options For additional options see the MPLAB C17 C Compiler User s Guide DS51290 also available on the Microchip website General Category Generate Command Line Diagnostics level Select to d
200. es of data for the delay count Dlyl res 1 Dly0 is the least significant byte Dly2 res 1 while Dly3 is the most significant byte Dly3 res 1 Dly32 MACRO DLY goto 1 delay 2 cycles goto 1 delay total of 4 cycles Take the delay value argument from the macro precalculate the required 4 RAM values and load the The RAM values Dly3 though Dlyo BANKSEL Dly3 movlw DLY 1 H FF movw Dlyo movlw DLY 1 gt gt D 08 H FF movw Dly1 movlw DLY 1 gt gt D 16 H FF Bytes are shifted and anded by the assembler to make user calculations easier movw Dly2 movlw DLY 1 gt gt D 24 H FF Call DoDly32 to run the delay loop movw Dly3 call DoD1ly32 ENDM End of Macro definition RST CODE 0x00 Reset Vector pagesel TestCode goto TestCode CODE Code starts here TestCode Dly32 D 50000 Max 4 billion runs Dly32 Macro 1 sec in this case nop ZERO STOPWATCH put breakpoint here DS33014K page 132 2009 Microchip Technology Inc Assembler Examples Tips and Tricks goto TestCode Go back to top of program and run the delay again Subroutine called by the Macro Dly32 20 Tcy per loop DoDly32 movlw H FF Start with 1 in W addwf Dly0 F LSB decrement btfsc STATUS C was the carry flag set clrw If so 0 is put in W addwf Dly1 F Else we continue btfsc STATUS C clrw 0 in W addwf Dly2 F btfsc STATUS C clrw 0 in W addwf Dly3 F btfsc STATUS
201. es to find the one for it If one can not be located an error is generated Since absolute sections can only be allocated at a fixed address assigned and unassigned sections are performed in no particular order 12 3 2 Relocatable Allocation Once all absolute sections have been allocated the linker allocates relocatable assigned sections For relocatable assigned sections the linker checks the assigned target memory block to verify that there is space available otherwise an error is generated The allocation of relocatable assigned sections occurs in the order in which they were specified in the linker command file After all relocatable assigned sections have been allocated the linker allocates relocatable unassigned sections The linker starts with the largest relocatable unassigned section and works its way down to the smallest relocatable unassigned section For each allocation it chooses the target memory block with the smallest available space that can accommodate the section By starting with the largest section and choosing the smallest accommodating space the linker increases the chances of being able to allocate all the relocatable unassigned sections 12 3 3 Stack Allocation The stack is not a section but gets allocated along with the sections The linker command file may or may not assign the stack to a specific target memory block If the stack is assigned a target memory block it gets allocated just before the relocatable
202. eseeeeeeeeeeeeeeeseeeeen 181 Store Strings in Program Memonm 59 Subtest Si aL EE tn ee 109 Symbol Constant 58 Symbols In Expressions 40 T Table Deuce aer 67 Templates ci 200 Re EE 37 Text Substitution Label 65 Tips and Tricks Bit Shifting Using Carry Bit 139 Conditional Bit GetiClear eee 138 Delay Techniques 137 Optimizing Destinations 138 Swap File Register with W 139 Using External Memornm 140 TUNG ie rite ile 110 Troubleshooting AAA 155 U Ud e 110 145 Udala Alia in a 111 145 UA OU iii 113 145 Udala Suicidal idad A ere 115 145 undefined tata ie 116 Unimplemented RAM 46 Unimplemented ROM 47 UP POP ER EE a EEE EEE 40 143 Utilities Overview and Usage coooconocccoccccocacancccnnnnns 245 V Variable A a E E Sen 117 Defien a 108 el 92 W Warnings Assemble eeina aaaeeeaa erota adhiem aaan 162 COFF to COD Converter 247 AA a Aa E ee 230 Watch Window AA 131 Web Site Microchip ooooocccnnnocccnococccononnnonarcncnnanononos 6 While so cia Eeer nie 118 White page 222 EEN ane 26 Windows Shell Interface 34 2009 Microchip Technology Inc DS33014K page 287 MICROCHIP WORLDWIDE SALES AND SERVICE AMERICAS Corporate Office 2355 West Chandler Blvd Chandler AZ 85224 6199 Tel 480 792 7200 Fax 480 792 7277 Technical Support http support microchip com Web Address www m
203. family the first character is in the most significant byte of the word On the PIC18 device family the first character is in the least significant byte of the word 4 15 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation When generating a linkable object file this directive can also be used to declare initialized data values Refer to the idata directive for more information db and other data directives are more commonly used than data 4 15 4 See Also db de dt dtm dw idata 4 15 5 Simple Example data reloc label 10 constants data 1 2 ext label constants externals data testing 1 2 3 text string data N single character data start of program relocatable label DS33014K page 60 2009 Microchip Technology Inc Directives 4 15 6 PIC16 Application Example data This example shows the usefulness of directive data in storing one or more words in program memory include p16f877a inc Include standard header file for the selected device ORG 0x0000 The following code will be programmed in reset address 0 goto start Jump to an address labelled start start Write your main program here goto Go to current line loop here ORG 0x1000 Store the string starting from 1000H Ch _stng data M C U 3 program memory locations will be filled with ASCII equiv
204. fications needed to accommodate a mixed language application which employs a boot loader Mixed Language Linker Script The partial C compiler linker script file shown below demonstrates the required modifications when building the mixed assembly boot loader C code application The linker will use this configuration to link the compiled source code into the user program memory region above the protected boot loader In this linker script example the C compiler start up file c018 1 0 has been remarked out preventing the linker from linking this object file to the project Instead it will use the modified file in the next section IFDEF _CRUNTIME IFDEF _EXTENDEDMODE FILES c018i e o FILES clib e lib FILES p18 f8722 e lib ELSE PIBES EIER lt Note this line to be ignored by linker FILES clib lib FILES p18f8722 1lib FI FI CODEPAGE NAME vectors START 0x0 END 0x29 CODEPAGE NAME boot START 0x2A END 0x1FF IFDEF _DEBUGCODESTART CODEPAGE NAME page START 0x200 END _CODEEND CODEPAGE NAME debug START _DEBUGCODESTART END _CEND PROTECTED ELSE CODEPAGE NAME page START 0x200 END 0x1FFFF FI Mixed Language c018i c Modifications For a typical C compiler application the co18i c startup code normally specifies program memory location 0000h as the entry section and is linked into the project by the linker when specified in the MPLAB C18 linker script Since the C compiler application code in this example has been reloc
205. file listed is the location of the definition The remaining files contain references to the symbol Data Directives Data directives are those that control the assembler s allocation of program or data memory and provide a way to refer to data items symbolically that is by meaningful names Data Memory On Microchip MCU and DSC devices data memory RAM is comprised of general purpose registers GPRs and special function registers SFRs Some devices also have EEPROM data memory Device Programmer A tool used to program electrically programmable semiconductor devices such as microcontrollers Digital Signal Controller A microcontroller device with digital signal processing capability i e Microchip dsPIC DSC devices Directives Statements in source code that provide control of the language tool s operation Download DS33014K page 270 2009 Microchip Technology Inc Glossary Download is the process of sending data from a host to another device such as an emulator programmer or target board DSC See Digital Signal Controller EEPROM Electrically Erasable Programmable Read Only Memory A special type of PROM that can be erased electrically Data is written or erased one byte at a time EEPROM retains its contents even when power is turned off An object file of this format contains machine code Debugging and other information is specified in with DWARF ELF DWARF provide better debugging of optimize
206. fill with data an odd number of bytes only even Consult your device data sheet 160 CODE_PACK directive not available for this part substituting CODE The code_pack directive can only be used with byte addressable ROM 161 Non negative value required for this context Some contexts require non negative values 162 Expected a section name Some operators and pseudo operators take section names as operands The lexical form of a section name is that of an identifier optionally prefixed with a 163 CONFIG directives must be contiguous Do not place other code between config directive declarations 164 _IDLOC directives must be contiguous Do not place other code between _idloc directive declarations DS33014K page 160 2009 Microchip Technology Inc Errors Warnings Messages and Limitations 165 extended mode not available for this device This PIC18 device does not support extended mode 166 left bracket missing from offset operand The left bracket is missing from an offset i e 0x55 167 right bracket missing from offset operand The right bracket is missing from an offset i e 0x55 168 square brackets required around offset operand Square brackets are required around an offset i e 0x55 169 access bit cannot be specified with indexed mode When using indexed mode the access bit cannot be specified 170 expression within brackets must be constant The expression specified within brackets is not a c
207. fine directive is removed from the symbol table if undefine directive is used The same symbol may be redefined again include p16f877a inc Include standard header file for the selected device area set 0 The label area is assigned the value 0 define lngth 50H Label lngth is assigned the value 50H Hdefine wdth 25H Label wdth is assigned the value 25H area set Ingth wdth Reassignment of label area So area will be reassigned a value equal to 50H 25H undefine Ilngth Undefine label lngth undefine wdth Undefine label wdth define lngth 0 Define label lngth to 0 end By using the above directives 1ngth will be reassigned a value 0 and wdth will be removed from the symbol list in the list 1st file The label Lngth must be undefined before it can be defined as 0 DS33014K page 66 2009 Microchip Technology Inc Directives 4 19 dt DEFINE TABLE PIC12 16 MCUs 4 19 1 Syntax label dt expr expr expr 4 19 2 Description dt Define data Table Generates a series of RETLW instructions one instruction for each expr Each expr must be an 8 bit value Each character in a string is stored in its own RETLW instruction 4 19 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is used when generating a table of data for th
208. fore the ISR code needs to be specifically placed on page 0 See Section 5 3 7 Interrupts for more on the ISR code PRR RRR RRR RRR KERR KEE KK kk kkk k kkk kkk k KE k k EEK k kk k Main Program PRR RRR RR KR kkk kkk kkk kk kkk KK EKER kkk k k kkk k k k k code Start Program Begin program code Because no address is specified the program memory location will be determined by the linker See Section 5 3 5 Program Memory CODE Sections and Paging for more on code DS33014K page 124 2009 Microchip Technology Inc Assembler Examples Tips and Tricks Start clrf banksel clrf banksel bsf bsf PORTB TRISB TRISB INTCON INTCON GIE INTCON TOIE Clear PortB Select TRISB Bank 1 Set all PortB pins as outputs Select INTCON Bank 0 Enable Global Int s Enable Timer0 Int First set up Port B pins to be all outputs using the data direction TRISB register Then set up Timer 0 and interrupts for later use Loop movlw movwf call clrf pagesel call pagesel goto OxFF PORTB Delayl PORTB Delay2 Delay2 Loop Loop Set PortB Wait Clear PortB Select Delay2 Page Wait Select Loop Page Repeat Set all Port B pins high and wait Delay 1 Then set all Port B pins low and wait Delay 2 Repeat until program halted This will have the effect of flashing the pins of Port B PRR RRR RRR kkk kkk kk kkk kkk k kkk kkk kkk kk kkk k kk k
209. g A menu selection select Enable Programmer Quotes A field name in a window or __ Save project before build dialog Underlined italic text with A menu path File gt Save right angle bracket Bold characters A dialog button Click OK A tab Click the Power tab Text in angle brackets lt gt A key on the keyboard Press lt Enter gt lt F1 gt Courier font Plain Courier Sample source code define START Filenames autoexec bat File paths e mec18 h Keywords _asm _endasm static Command line options Opa Opa Bit values 0 1 Constants OxFF A Italic Courier A variable argument file o where file can be any valid filename Square brackets Optional arguments mpasmwin options file options Curly brackets and pipe character Choice of mutually exclusive arguments an OR selection errorlevel 0 1 Ellipses Replaces repeated text var_name var_name Represents code supplied by user void main void DS33014K page 4 2009 Microchip Technology Inc Preface RECOMMENDED READING This documentation describes how to use Assembler Linker Librarian User s Guide Other useful documents are listed below The following Microchip documents are available and recommended as supplemental reference resources Readme Files readme asm and readme lkr For the latest tool information and know
210. g from 1000H In PIC18 devices the first character is in least significant byte Ch_stng db EME eer EU Ch_strng contains three 16 bit numbers 004Dh 0043h and 0055h These are ASCII equivalents of M C and U respectively Information on storing data in both bytes of a program word on the PIC18 architecture can be found in Section 4 10 code pack Begin an Object File Packed Code Section PIC18 MCUs tb1 dra db 0 Oxff Places ff00 in program memory location end 4 17 de DECLARE EEPROM DATA BYTE 4 17 1 Syntax label de expr expr expr 4 17 2 Description de Data EEPROM This directive can be used at any location for any processor For PIC18 devices reserve memory word bytes are packed If an odd number of bytes is specified a O will be added unless in a code pack section See the description for code_pack for more information For all other PIC1X MCU devices reserve memory words with 8 bit data Each expr must evaluate to an 8 bit value The upper bits of the program word are zeroes Each character in a string is stored in a separate word 4 17 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is designed mainly for initializing data in the EE data memory region of PIC1X MCU devices with EE data FLASH For PIC18 MCU devices make sure to specify the
211. ge to a device software file or equipment Watch Variable A variable that you may monitor during a debugging session in a watch window DS33014K page 280 2009 Microchip Technology Inc Glossary Watch Window Watch windows contain a list of watch variables that are updated at each breakpoint Watchdog Timer A timer on a PIC microcontroller that resets the processor after a selectable length of time The WDT is enabled or disabled and set up using configuration bits WDT See Watchdog Timer Workbook For MPLAB SIM stimulator a setup for generation of SCL stimulus 2009 Microchip Technology Inc DS33014K page 281 Assembler Linker Librarian User s Guide NOTES DS33014K page 282 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Index Symbols Bit Assignments 127 badra agent O A tess a ee 46 Blank Listing Lines 109 E sr Ronde et eet Ee 47 Block of Constant EEN 52 69 lr DEEG 55 146 BGOt LOader A E 206 fusese Ee 55 Build Options 13 E AAA A apr nel 85 146 Build Project EE AI 95 Command Line 198 maxrom e odo ee pl al 96 MPLAB IDE 196 ERUN DIME vooreen rea erene ere ennet opisa dit 188 C DEBUG ee Re ee sure 188 Caveats Linker Gert 183 ADEBUGCODELEN een 188 D EE 52 _ DEBUGCODESTART aaonnnnnnn00nnnnnn0nnnnnnreeennnne 188 COD file 167 DEBUGDATALEN cccecccccessseeeeeessseeeeeeeeees
212. gging use instead View gt Program Memory or View gt Disassembly List ing Further Development Usually your application code will contain errors and not build the first time Therefore you will need a debug tool to help you develop your code Using the output files previously discussed several debug tools exist that work with MPLAB IDE to help you do this You may choose from simulators in circuit emulators or in circuit debuggers either manufactured by Microchip Technology or third party developers Please see the documentation for these tools to see how they can help you When debugging you will need to set the Build Configuration to Debug Please see MPLAB IDE documentation concerning this control Once you have developed your code you will want to program it into a device Again there are several programmers that work with MPLAB IDE to help you do this Please see the documentation for these tools to see how they can help you When programming you will need to set the Build Configuration to Release Please see MPLAB IDE documentation concerning this control For more information on using MPLAB IDE consult the on line help that comes with this application or download printable documents from our website 2009 Microchip Technology Inc DS33014K page 19 Assembler Linker Librarian User s Guide NOTES DS33014K page 20 2009 Microchip Technology Inc S ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE
213. gh Byte PCLATH Program Counter High Byte Latch PCLATU Program Counter Upper Byte Latch PRODH Product of Multiply High Byte PRODL Product of Multiply Low Byte STATUS Status Register TABLAT 8 bit Table Latch TBLPTR 21 bit Table Pointer points to a Program Memory location WREG Working register accumulator Named Bits C DC Z OV N ALU Status bits Carry Digit Carry Zero Overflow Negative TO Time out bit PD Power down bit PEIE Peripheral Interrupt Enable bit GIE GIEL H Global Interrupt Enable bit s Named Device Features MCLR Master clear device reset PC Program Counter TOS Top of Stack WDT Watchdog Timer Misc Descriptors LI Contents gt Assigned to lt gt Register bit field A B PIC18 DEVICE INSTRUCTION SET Microchip s new high performance 8 bit microcontroller family uses a 16 bit wide instruction set This instruction set consists of 76 instructions each a single 16 bit wide word 2 bytes Most instructions operate on a file register f and the working register WREG accumulator The result can be directed either to the file register or the WREG register or to both in the case of some instructions A few instructions operate solely on a file register BSF for example The instruction set is grouped into the following categories byte oriented file register operations bit oriented file register operations control operations literal operations
214. ghted work you may have a right to sue for relief under that Act Information contained in this publication regarding device applications and the like is provided only for your convenience and may be superseded by updates lt is your responsibility to ensure that your application meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORY OR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITS CONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSE Microchip disclaims all liability arising from this information and its use Use of Microchip devices in life support and or safety applications is entirely at the buyer s risk and the buyer agrees to defend indemnify and hold harmless Microchip from any and all damages claims suits or expenses resulting from such use No licenses are conveyed implicitly or otherwise under any Microchip intellectual property rights QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV ISO TS 16949 2002 Trademarks The Microchip name and logo the Microchip logo Accuron dsPIC KEELOQ KEELOQ logo MPLAB PIC PICmicro PICSTART rfPIC SmartShunt and UNI O are registered trademarks of Microchip Technology Incorporated in the U S A and other countries FilterLab Linear Active Thermistor MXDEV MXLAB SEEVAL SmartSensor and The Embedded Control Solutions Company are registered
215. gt gt dest lt 7 4 gt f lt 7 4 gt gt dest lt 3 0 gt 67 TSTFSZ f a Test f skip if O PC 4 gt PC if f 0 else PC 2 gt PC 1Bf XORWF f d a Exclusive OR WREG with f WREG XOR f gt dest Assuming default bit values for d and a DS33014K page 262 O 2009 Microchip Technology Inc Instruction Sets TABLE A 17 PIC18 BIT ORIENTED REGISTER OPERATIONS Hex Mnemonic Description Function 91f BCF f b a Bit Clear f 0 gt f lt b gt 81f BSF f b a Bit Setf 1 gt f lt b gt B1f BTFSC f b a Bit test f skip if clear if f lt b gt 0 PC 4 gt PC else PC 2 gt PC Alf BTFSS f b a Bit test f skip if set if f lt b gt 1 PC 4 5PC else PC 2 gt PC 71f BTG f b a Bit Toggle f f lt b gt gt f lt b gt Assuming b 0 and default bit value for a TABLE A 18 PIC18 CONTROL OPERATIONS Hex Mnemonic Description Function E2n BC n Branch if Carry if C 1 PC 2 2 n gt PC else PC 2 gt PC E6n BN n Branch if Negative if N 1 PC 2 2 n gt PC else PC 2 gt PC E3n BNC n Branch if Not Carry if C 0 PC 2 2 n gt PC else PC 2 gt PC E7n BNN n Branch if Not Negative if N 0 PC 2 2 n gt PC else PC 2 gt PC E5n BNOV n Branch if Not Overflow if OV 0 PC 2 2 n gt PC else PC 2 gt PC Eln BNZ n Branch if Not Zero if Z 0 PC 2 2 n gt PC else PC 2 gt PC E4n BOV n Branch if Overflow if
216. h a 248 Part 5 Appendices Appendix A Instruction Sets Lage e IEN 251 A 2 Key to 12 14 Bit Instruction Width Instruction Sets ooooccccinncccccnnnacccccccnnnss 251 A 3 12 Bit Instruction Width Instruction Set oococccccnnnnnonincnnnnnononinnanacacononnnnonos 253 AA 14 Bit Instruction Width Instruction Gei 254 A 5 14 Bit Instruction Width Extended Instruction Get 256 A 6 12 Bit 14 Bit Instruction Width Pseudo Instructions 259 A 7 Key to PIC18 Device Instruction Set AEN 260 A 8 PIC18 Device Instruction Set crire 261 A 9 PIC18 Device Extended Instruction Gei 265 Appendix B Useful Tables Bal INTOGUCTION teg tege itacto did 267 B 2 ASCII Character Set ENER a ia iia dada 267 B 3 Hexadecimal to Decimal Conversion occccccccccccncnococnnnnoncnonononnnancncnnnananonos 268 GOSS ANY EEN 269 O EE 283 Worldwide Sales and Service noni 288 DS33014K page viii 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Preface NOTICE TO CUSTOMERS All documentation becomes dated and this manual is no exception Microchip tools and documentation are constantly evolving to meet customer needs so some actual dialogs and or tool descriptions may differ from those in this document Please refer to our web site www microchip com to obtain the latest documentation available Documenis are identified with a DS number This number is located on the bot
217. han if entry idx lt num entries Less or equal if entry idx lt num entries Equal to if entry idx num entries l Not equal to if entry idx num entries amp Bitwise AND flags flags amp ERROR BIT ge Bitwise exclusive OR flags flags ERROR BIT Bitwise inclusive OR flags flags ERROR_BIT amp amp Logical AND if len 512 amp amp b c Logical OR if len 512 b c Set equal to entry index 0 Add to set equal entry index 1 Subtract set equal entry index 1 Multiply set equal entry index entry length Divide set equal entry total entry length Modulus set equal entry index 8 lt lt Left shift set equal flags lt lt 3 gt gt Right shift set equal flags gt gt 3 amp AND set equal flags amp ERROR FLAG Inclusive OR set equal flags ERROR_FLAG Ms Exclusive OR set equal flags ERROR_FLAG Increment i dr Decrement i Note 1 This precedence is the same for the low high and upper operands which apply to sections See Section 6 4 Low High and Upper Operators for more informa tion These operators can only be used on a line by themselves they cannot be embed ded within other expression evaluations 2009 Microchip Technology Inc DS33014K page 41 Assembler Linker Librarian User s Guide NOTES
218. he bank select register BSR Address Value that identifies a location in memory Alphabetic Character Alphabetic characters are those characters that are letters of the arabic alphabet a b Z A B Z Alphanumeric Alphanumeric characters are comprised of alphabetic characters and decimal digits 0 1 9 ANSI American National Standards Institute is an organization responsible for formulating and approving standards in the United States Application A set of software and hardware that may be controlled by a PIC microcontroller Archive A collection of relocatable object modules It is created by assembling multiple source files to object files and then using the archiver to combine the object files into one library file A library can be linked with object modules and other libraries to create executable code Archiver A tool that creates and manipulates libraries ASCII American Standard Code for Information Interchange is a character set encoding that uses 7 binary digits to represent each character It includes upper and lower case letters digits symbols and control characters Assembler A language tool that translates assembly language source code into machine code Assembly Language A programming language that describes binary machine code in a symbolic form Asynchronous Stimulus Data generated to simulate external inputs to a simulator device Breakpoint Hardware An event whose executi
219. he final addresses are known Once all identifier symbols have their final addresses assigned the linker must patch all references to these symbols using the relocation entries In the example above the updated symbol might now be at location 0x125 Symbol index gt name varl value 0x125 section data class extern If the code section above were relocated to begin at address 0x50 the updated relocation entries would now begin at location 0x51 Reloc index gt address 0x0051 symbol varl type bank Reloc index gt address 0x0052 symbol varl type offset The linker will step through the relocation entries and patch their corresponding sections The final assembly equivalent output for the above example would be 0x0050 MOVLW OxFF 0x0051 MOVLB 0x1 Patched with varl s bank 0x0052 MOVWF 0x25 Patched with varl s offset 2009 Microchip Technology Inc DS33014K page 193 Assembler Linker Librarian User s Guide 12 5 INITIALIZED DATA MPLINK linker performs special processing for input sections with initialized data Initialized data sections contain initial values initializers for the variables and constants defined within them Because the variables and constants within an initialized data section reside in RAM their data must be stored in nonvolatile program memory ROM For each initialized data section the linker creates a section in program memory The data is moved by initializing code supplied with MPLAB C18 an
220. hen using the PIC18F87J10 in extended microcontroller mode the MAXROM directive must be used as follows include lt P18cxxx inc gt __ MAXROM Ox1FFFFF 87310 Configuration for external memory CONFIG MODE XM20 EASHFT OFF BW 16 WAIT OFF org 0x0000 goto 0x10000 END DS33014K page 140 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 6 Relocatable Objects INTRODUCTION MPASM assembler used with MPLINK object linker has the ability to generate and link precompiled object modules Writing source code that will be assembled to an object module is slightly different from writing code used to generate an executable hex file directly MPASM assembler routines designed for absolute address assembly will require minor modifications to compile correctly into relocatable object modules Topics covered in this chapter Header Files Program Memory Low High and Upper Operators RAM Allocation Configuration Bits and ID Locations Accessing Labels From Other Modules Paging and Banking Issues Generating the Object Module Code Example HEADER FILES The Microchip supplied standard header files e g p18 8720 inc should be used when generating object modules These header files define the special function registers for the target processor EXAMPLE 6 1 INCLUDE HEADER FILE include p18f8720 inc See 4 42 include Include Additional Source File for mor
221. hey are used This sometimes happens when include files are used in your project Since the text from an include file is inserted at the location of the include statement and you may have labels used before that point you can get this error Also the error may occur due to a typing error spelling mistake or case change in your label MyLabel is not the same as Mylabel unless case sensitivity is turned off it is on by default Additionally goto MyLabel will never locate the code at My1ab1 or Mylable Check for these sorts of mistakes first As a general rule put your include files at the top of each file If this seems to cluttered you may include files within other include files 114 Divide by zero Division by zero encountered during an expression evaluation 115 Duplicate label A label was declared as a constant e g with the equ or cblock directive in more than one location 116 Address label duplicated or different in second pass The same label was used in two locations Alternately the label was used only once but evaluated to a different location on the second pass This often happens when users try to write page bit setting macros that generate different numbers of instructions based on the destination 117 Address wrapped around 0 For PIC12 16 devices the location counter can only advance to OxFFFF After that it wraps back to 0 Error 117 is followed by error 118 118 Overwriting previous address contents Co
222. iable AAA p 108 e variable Declare Symbol Variable cccccceeeeeeeeeeeeeneeseeeeeeeeeeeeee p 117 4 2 2 Conditional Assembly Directives Conditional assembly directives permit sections of conditionally assembled code These are not run time instructions like their C language counterparts They define which code is assembled not how the code executes else Begin Alternative Assembly Block to if Conditional p 68 endif End Conditional Assembly Block sssseesseeseeeeressrresrrrssrnsssrnens p 70 endw Enda while LOOp wc Nee el eee amet p 71 if Begin Conditionally Assembled Code Block p 86 ifdef Execute If Symbol has Been Detned p 88 ifndef Execute If Symbol has not Been Defined p 89 while Perform Loop While Condition is Tue p 118 4 2 3 Data Directives Data directives control the allocation of memory and provide a way to refer to data items symbolically i e by meaningful names e _badram Identify Unimplemented RAM p 46 e badrom Identify Unimplemented ROM p 47 e config Set Processor Configuration Bits p 55 e config Set Processor Configuration Bits DIC18MCUei eee p 57 e _idlocs Set Processor ID Locations 0 0 00 cece eeeeeeeeeeteneeeeeeeeaees p 85 e __maxram Define Maximum RAM Location eee eee p 95 e __maxrom Define Maximum ROM Location p 96 e cblock Define a Block of
223. ibrarian documentation For more information on available Microchip libraries see the MPLAB C18 C compiler documentation The object files along with library files are used to generate the project output files via the linker MPLINK object linker Depending on your project you may or may not need to add a linker script file device 1kr For more information on using linker script files and the linker see the MPLINK linker documentation The main output file generated by the MPLINK linker is the COF file prog cof The linker then uses the utility MP2HEX to generate the Hex file prog hex used by simulators emulators debuggers and programmers For more information on linker output files see the MPLINK linker documentation For more information on utilities see the related documentation For more on projects and related workspaces see MPLAB IDE documentation DS33014K page 12 2009 Microchip Technology Inc PIC1X MCU Language Tools and MPLAB IDE PROJECT SETUP To set up an MPLAB IDE project for the first time it is advisable to use the built in Project Wizard Project gt Project Wizard In this wizard you will be able to select a language toolsuite that uses MPASM assembler e g the Microchip MPASM Toolsuite For more on the wizard and MPLAB IDE projects see MPLAB IDE documentation Once you have a project set up you may then set up properties of the tools in MPLAB IDE 1 From the MPLAB IDE menu bar select
224. ibrary is included in a project the addition or removal of calls to that library will not require a change to the link process Libraries help to convey the purpose of a group of object modules Since libraries can group together several related object modules the purpose of a library file is usually more understandable than the purpose of its individual object modules For example the purpose of a file named math lib is more apparent than the purpose of power o ceiling o and floor o O 2009 Microchip Technology Inc DS33014K page 235 Assembler Linker Librarian User s Guide 15 4 HOW MPLIB LIBRARIAN HELPS YOU The MPLIB librarian can help you in the following ways e The librarian makes linking easier because single libraries can be included instead of many smaller files e The librarian helps keep code maintainable by grouping related modules together e The librarian commands allow libraries to be created and modules to be added listed replaced deleted or extracted 15 5 LIBRARIAN OPERATION The librarian combines multiple input object modules generated by the MPASM assembler or MPLAB C18 C compilers into a single output library 1ib file Library files are used in conjunction with the MPLINK linker to produce executable code FIGURE 15 1 MPLIB LIBRARIAN OPERATION Object files MPLIB librarian math lib Library file DS33014K page 236 O 2009 Microchip Technology Inc MPLIB Libr
225. ic linker script for that part The 1kr directory is located at the same location as the MPLINK linker executable The linker will construct the name of the generic linker script by adding an _g 1kr to the string value of the part number For example the generic linker script for PIC18F4520 is 18 4520_g 1kr obj fileis the name of an assembler or compiler generated object file All object files must have the extension o libfile is the name of a librarian created library file All library files must have the extension 1ib O 2009 Microchip Technology Inc DS33014K page 179 Assembler Linker Librarian User s Guide option is one of the linker command line options described below Option Description a hexformat Specify format of hex output file By f Display help screen k pathlist Add directories to linker script search path 1 pathlist Add directories to library search path m filename Create map file filename n length Specify number of lines per listing page o filename Specify output file Filename Default is a out q Quiet mode u Specify multiple macros using following syntax Ju lt sym value gt where sym may be a macro with alphanumeric characters and value maybe be a numerical value If a value is not provided 0 will be used w Suppress the mp2cod exe utility Using this option will prevent the generation of a 1st file x Suppress the mp2hex exe u
226. icrochip com Atlanta Duluth GA Tel 678 957 9614 Fax 678 957 1455 Boston Westborough MA Tel 774 760 0087 Fax 774 760 0088 Chicago Itasca IL Tel 630 285 0071 Fax 630 285 0075 Cleveland Independence OH Tel 216 447 0464 Fax 216 447 0643 Dallas Addison TX Tel 972 818 7423 Fax 972 818 2924 Detroit Farmington Hills MI Tel 248 538 2250 Fax 248 538 2260 Kokomo Kokomo IN Tel 765 864 8360 Fax 765 864 8387 Los Angeles Mission Viejo CA Tel 949 462 9523 Fax 949 462 9608 Santa Clara Santa Clara CA Tel 408 961 6444 Fax 408 961 6445 Toronto Mississauga Ontario Canada Tel 905 673 0699 Fax 905 673 6509 ASIA PACIFIC Asia Pacific Office Suites 3707 14 37th Floor Tower 6 The Gateway Harbour City Kowloon Hong Kong Tel 852 2401 1200 Fax 852 2401 3431 Australia Sydney Tel 61 2 9868 6733 Fax 61 2 9868 6755 China Beijing Tel 86 10 8528 2100 Fax 86 10 8528 2104 China Chengdu Tel 86 28 8665 5511 Fax 86 28 8665 7889 China Hong Kong SAR Tel 852 2401 1200 Fax 852 2401 3431 China Nanjing Tel 86 25 8473 2460 Fax 86 25 8473 2470 China Qingdao Tel 86 532 8502 7355 Fax 86 532 8502 7205 China Shanghai Tel 86 21 5407 5533 Fax 86 21 5407 5066 China Shenyang Tel 86 24 2334 2829 Fax 86 24 2334 2393 China Shenzhen Tel 86 755 8203 2660 Fax 86 755 8203 1760 China Wuhan Tel 86 27 5980 5300 Fax 86 27 5980 5118 China Xiamen Tel
227. ide goto int routine Jump to an address whose label jis int routine org 0x0010 The following code section will placed starting from address 10H Main Write your main program here goto Main Loop back to Main org 0x0100 The following code section will be placed starting from address 100H int routine i Write your interrupt service routine here retfie Return from interrupt 1 org 0x1000 You can create a data or character table starting from any address in program memory In this case the address is 1000h ch tbl1 da PICwithFLASH 6 program memory locations starting from 1000h will be filled with six 14 bit packed numbers each representing two 7 bit ASCII characters org 0x2100 The absolute address 2100h is mapped to the 0000 location of EE data memory in PIC16Fxxx You can create a data or Character table starting from any address in EE data memory ch _tb12 de PICwithFLASH 12 EE data memory locations starting from 0 will be filled with 12 ASCII characters end 4 51 7 PIC18 Application Example org This example shows the usage of the org directive Code generation begins at an address specified by org address The origin of a data table also can be specified by this directive A data table may be placed either in a program memory region or in an EE data memory region as in case of a PIC1X device with EE data FLASH include
228. if carry was generated Also clear carry 1f bit was set rlf perimeter Multiply register 20H by 2 Carry bit may be affected rlf perimeter 1 Again increment register 21H if carry was generated The previous two lines of code will multiply by left shifting one bit the intermediate result by 2 goto Go to current line loop here end A a a 2009 Microchip Technology Inc DS33014K page 107 Assembler Linker Librarian User s Guide 4 58 set DEFINE AN ASSEMBLER VARIABLE 4 58 1 Syntax Preferred label set expr Supported label set expr 4 58 2 Description label is assigned the value of the valid MPASM assembler expression specified by expr The set directive is functionally equivalent to the equ directive except that set values may be subsequently altered by other set directives 4 58 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation Because set directive values may be altered by later set directives set is particularly useful when defining a variable in a loop e g a while loop 4 58 4 See Also equ variable while 4 58 5 Simple Example area set 0 width set 0x12 length set 0x14 area set length width length set length 1 4 58 6 Application Example set equ This example shows the usage of the set directive used for creating symbols which may be used in MP
229. ifferent family of processor is being selected 131 Processor type is undefined Code is being generated before the processor has been defined Note that until the processor is defined the opcode set is not known 132 Unknown processor The selected processor is not a valid processor 133 Hex file format INHX32 required An address above 32K was specified 134 Illegal hex file format An illegal hex file format was specified in the list directive 135 Macro name missing A macro was defined without a name 136 Duplicate macro name A macro name was duplicated 137 Macros nested too deep The maximum macro nesting level was exceeded 138 Include files nested too deep The maximum include file nesting level was exceeded DS33014K page 158 2009 Microchip Technology Inc Errors Warnings Messages and Limitations 139 Maximum of 100 lines inside WHILE ENDW A while endw can contain at most 100 lines 140 WHILE must terminate within 256 iterations A while endw loop must terminate within 256 iterations This is to prevent infinite assembly 141 WHILEs nested too deep The maximum while endw nesting level was exceeded 142 IFs nested too deep The maximum if nesting level was exceeded 143 Illegal nesting Macros if s and while s must be completely nested they cannot overlap If you have an if within a while loop the endif must come before the endw 144 Unmatched ENDC endc found without a cblock 1
230. incremented by one Expressions may be literal strings and are stored as described in the db data directive 4 21 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation When generating a linkable object file this directive can also be used to declare initialized data values Refer to the idata directive for more information While db is more common to use you may use dw to store data in Flash PIC16FXXX devices as many of these devices can read all 14 bits of a program memory word at run time See the PIC16F877A data sheet for examples and more information 4 21 4 See Also data db idata 4 21 5 Simple Example dw 39 diagnostic 39 0x123 dw diagbase 1 4 22 else BEGIN ALTERNATIVE ASSEMBLY BLOCK TO if CONDITIONAL 4 22 1 Syntax Preferred else Supported else else 4 22 2 Description Used in conjunction with an if directive to provide an alternative path of assembly code should the if evaluate to false el se may be used inside a regular program block or macro 4 223 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is not an instruction It is used to perform conditional assembly of code 4 22 4 See Also endif if DS33014K page 68 2009 Microchip Technology Inc Di
231. ine the absolute address at which to place this additional code Also if you edit the interrupt handler code you would need to remember to change the address of the additional code Therefore it is usually easier not to place code absolutely but to allow the linker script to place code for you 2009 Microchip Technology Inc DS33014K page 205 Assembler Linker Librarian User s Guide 13 5 SAMPLE APPLICATION 3 USING A BOOT LOADER A boot loader is a special program that when programmed into the target PIC microcontroller is responsible for downloading and programming relocatable application code into the same target PIC microcontroller The relocatable application or user code is typically transferred to the boot loader through serial communications such as RS232 13 5 1 C Compiler Usage This section discusses how to use the MPLAB C Compiler for PIC18 MCUs the C compiler when developing bootloader and related application code There are three examples showing how to modify the C compiler linker scripts and how to use the pragma code directive in the source code for the C compiler boot loader project To better understand how the code corresponds to locations in device program memory see 13 5 1 1 C Compiler Memory Map Example 1 shows how to configure the C compiler linker script and suggests how to use code directives for the C compiler boot loader See 13 5 1 2 Example 1 C Compiler Boot Loader
232. ing the MP2COD utility 9 7 LINKER INPUT OUTPUT FILES The MPLINK linker combines multiple object files into one executable hex file Input Files Object File Loi Relocatable code produced from a source file Library File lib A collection of object files grouped together for convenience Linker Script File Ikr Description of memory layout for a particular processor project Output Files COFF Object Module File cof out Debug file used by MPLAB IDE v6 xx and later Hex File Formats hex hxl hxh Hexidecimal file with no debug information Suitable for use in programming This file is generated by the utility MP2HEX Listing File Ist Original source code side by side with final binary code Note Requires linker can find original source files This file is generated by the utility MP2COD Map File map Shows the memory layout after linking Indicates used and unused memory regions 2009 Microchip Technology Inc DS33014K page 173 Assembler Linker Librarian User s Guide 9 7 1 Object File Lol Object files are the relocatable code produced from source files The MPLINK linker combines object files and library files according to a linker script into a single output file Object files may be created from source files by MPASM assembler and library files may be created from object files by MPLIB librarian 9 7 2 Library
233. ing assembly The effect is the same as if an endm directive had been encountered 4 31 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation Use this directive to prematurely end a macro usually for a specific condition This is similar to the C language command break 4 31 4 See Also endm macro 2009 Microchip Technology Inc DS33014K page 75 Assembler Linker Librarian User s Guide 4 31 5 Simple Example test macro filereg if filereg 1 check for valid file exitm else error bad file assignment endif endm 4 31 6 Application Example exitm This program demonstrates the exitm assembler directive which causes an immediate exit from a macro It is used in the example to exit from the macro when certain conditions are met include p16f877a inc Include standard header file for the selected device result equ 0x20 Assign value 20H to label jresult RST CODE 0x0 The code section named RST jis placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start 7 Start add MACRO numl num2 add is a macro The values of numl and num2 must be passed to this macro if numl gt 0xff If numl gt 255 decimal exitm force immediate return from macro during assembly else
234. inker Interfaces reviews how to use the MPLINK linker with MPLAB IDE and describes how to use the linker on the command line Chapter 11 Linker Scripts discusses how to generate and use linker scripts to control linker operation Chapter 12 Linker Processing describes how the linker processes files Chapter 13 Sample Applications provides examples of how to use the linker to create applications Sample Application 1 explains how to find and use template files and when to modify the generic linker script file Sample Application 2 explains how to place program code in different memory regions how to place data tables in ROM memory and how to set configuration bits in C Sample Application 3 explains how to partition memory for a boot loader and how to compile code that will be loaded into external RAM and executed Sample Application 4 explains how to create new linker script memory section how to declare external memory through pragma code directive and how to access external memories using C pointers Chapter 14 Errors Warnings and Common Problems contains a descriptive list of the errors and warnings generated by the MPLINK linker as well as common problems and tool limitations DS33014K page 2 O 2009 Microchip Technology Inc Preface Part 3 MPLIB Object Librarian Chapter 15 MPLIB Librarian Overview describes what the MPLIB object librarian
235. inker Librarian User s Guide 4 3 access ovr BEGIN AN OBJECT FILE OVERLAY SECTION IN ACCESS RAM PIC18 MCUs 4 3 1 Syntax label access ovr RAM address 4 3 2 Description This directive declares the beginning of a section of overlay data in Access RAM If label is not specified the section is named access_ovr The starting address is initialized to the specified address or will be assigned at link time if no address is specified The space declared by this section is overlaid by all other access ovr sections of the same name No code can be placed by the user in this segment 4 3 3 Usage This directive is used in the following types of code relocatable For information on types of code see Section 1 6 Assembler Operation access our is similar to udata_acs and udata_ovr except that it declares a PIC18 Access RAM uninitialized data section that can be overlaid with other overlay access sections of the same name Overlaying access sections allows you to reuse access bank data space 4 3 4 See Also extern global udata udata_ovr udata_acs 4 3 5 Simple Example The 2 identically named sections are overlaid in PIC18 Access RAM In this example ul a is overlaid with memory locations used by ua8 and u8b ul6b is overlaid with memory locations used by u8c and u8d myaoscn access_ovr uga res 1 u8b res 1 u8c res 1 u8d res 1 myaoscn access_ovr ul6a res 2 u16b res 2 44 _badram IDENTIFY UNI
236. ion 07df ADDWF f d Add W and f W fod 3Dd ADDWFC d Add with Carry W and f W f C gt d o5df ANDWF f d AND W with f W AND f gt d 37df ASRF a Arithmatic Right Shift registert msb gt e ft 35df LSLF d Logical Left Shift 1 vegteter e C Le GER 0 La 0 36d LSRF d Logical Right Shift teclear E ot Teer 0 tC 01 1 f CLRF f Clear f 0 gt f 01xx CLRW Clear W 0 gt W o9df COMF c d Complement f NOT f gt d 03df DECF F d Decrement f f 1 gt d OAdE INCF f d Increment f f 1 gt d 04df IORWF E d Inclusive OR W with f W OR f gt d o8df MOVF f d Move f fod 00 1 f MOVWF f Move W to f W f ODdf RLF f d Rotate left f register f C el Trees 0 a oCdf RRF f d Rotate right f register f e Cc Ea Dd 0 DS33014K page 256 O 2009 Microchip Technology Inc Instruction Sets TABLE A 7 14 BIT BYTE ORIENTED FILE REGISTER OPERATIONS CONTINUED Hex Mnemonic Description Function 02df SUBWF f d Subtract W from f f W gt d 3Bd SUBWFB a Subtract with Borrow W from f f W B gt d OEdf SWAPF f d Swap halves f f 0 3 O f 4 7 gt d 06df XORWF f d Exclusive OR W and f W XOR f d Note 1 Operation in 14 bit extended instruction set but not 14 bit instruction set TABLE A
237. ion Use the m lt mapfile gt switch to generate an error map file The error map will show the sections which were allocated prior to the error Section secName has a memory memName which is not defined in the linker command file Add a CODEPAGE DATABANK or SHAREBANK directive for the undefined memory to the linker command file Section secName type is non overlay and absolute but occurs in more than one input file An absolute section with the name secName may only occur in a single input file Relocatable sections with the same name may occur in multiple input files Either remove the multiple absolute sections in the source files or use relocatable sections instead Starting addresses for absolute overlay section secName do not match across all input files A section with the name secName occurs in more than one input file However its absolute overlay starting address varies between files Change the section s address in the source files and rebuild the object modules Symbol symName has multiple definitions A symbol may only be defined in a single input module Symbol symName is not word aligned It cannot be used as the target of a branch call or goto instruction The target of a branch call or goto instruction was at an odd address but the instruction encoding cannot reference addresses that are not word aligned symbol symName out of range of relative branch instruction A relative branch
238. ion named INTRPT is placed at program memory location 0x4 The next two instructions are placed in code section INTRPT Jumps to the location labelled 7 ISR start Fill upto address OFh with instruction lt goto start gt Write your main program here Fill 5 locations with NOPs Go to current line loop here Write your interrupt service routine here PIC18 Application Example 111 The i11 directive is used to specify successive program memory locations with a constant or an assembly instruction For PIC18 devices only an even number is allowed to be specified as a count of locations to be filled include p18f452 inc RST CODE 0x0000 Include standard header file for the selected device The code section named RST jis placed at location 0x0 goto Start code section program memory The instruction is placed in RST goto fill HI_INT goto fill LO_INT goto fill start start 0 HI_INT CODE INTR_H goto start 6 0x0008 CODE 0x0018 INTR_L 10a9 start CODE 0x0020 Jumps to the location labelled start Fills 0 in 2 program memory locations 0004 and 0006 HI_INT addr minus current addr Fills 6 locations each location jis 2 bytes wide with 3 numbers of 2 word wide instructions lt goto start gt Fills address 1Ch and 1Eh with 10a9h Write your main program here 2009 Microchip Technology Inc DS33014
239. iption N A Display the assembler help screen ahex format INHX32 Generate hex output directly from assembler where hex format is one of INHX8M INHX8S INHX3 2 See 1 7 5 Hex File Formats hex hxl hxh for more information 7e On Enable Disable case sensitivity If enabled the assembler will distinguish between upper and lower case letters dlabel value N A Define a text string substitution i e assign value to label e path On Enable Disable Set Path for error file e Enable e Enable e Disable e path Enable specify path See Section 1 7 4 Error File err for more information h N A Display the assembler help screen 1 path On Enable Disable Set Path for list file 1 Enable 1 Enable 1 Disable 1 path Enable specify path See Section 1 7 3 Listing File Ist for more information O 2009 Microchip Technology Inc DS33014K page 35 Assembler Linker Librarian User s Guide Option Default Description m On Enable Disable macro expansion See Section 4 32 expand Expand Macro Listing for more information o path Off Enable Disable Set Path for object file Jo Enable o Enable o Disable o path Enable specify path See Section 1 7 7 Object File 0 for more information pprocessor type None Set the processor type where processor typeis a PIC1X MCU device e g PIC18F452 al
240. is a value which fills any unused portion of a memory block If this value is in decimal notation it is assumed to be a 16 bit quantity If it is in hexadecimal notation e g 0x2346 it may be any length divisible by full words 16 bits The optional keyword PROTECTED indicates a region of memory that only can be used by program code that specifically requests it EXAMPLE 11 6 ROM EXAMPLE The program memory layout for a PIC16F877A microcontroller is shown below Memory Address Reset Vector Start 0000h Interrupt Vector Start 0004h User Memory Space 0005h 07FFh User Memory Space 0800h OFFFh User Memory Space 1000h 17FFh User Memory Space 1800h 1FFFh ID Locations 2000h 2003h Reserved 2004h 2005h Device ID 2006h Configuration Memory Space 2007h Reserved 2008h 20FFh EEPROM Data 2100h 21FFh Based on this map the CODEPAGE declarations are CODEPAGE NAME page0 CODEPAGE NAME pagel CODEPAGE NAME page2 CODEPAGE NAME page3 CODEPAGE NAME idlocs CODEPAGE NAME config CODEPAGE NAME eedata O 2009 Microchip Technology Inc START 0x0000 S START 0x1000 START 0x1800 START 0x2000 START 0x2007 START 0x2100 ART 0x0800 END 0x07FF END 0x0FFF END 0x17FF END 0x1FFF END 0x2003 END 0x2007 END 0x21FF PROTECTE PROTECTE PROTECTE VU Wel DS33
241. is example under set 4 29 error ISSUE AN ERROR MESSAGE 4 29 1 Syntax error text string 4 29 2 Description text _stringis printed in a format identical to any MPASM assembler error message text string may be from 1 to 80 characters 4 29 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation You can use this directive to generate errors for yourself or others who build your code You can create any error message you wish as long as it is no longer than 80 characters 4 29 4 See Also messg if 4 29 5 Simple Example error checking macro argl if argl gt 55 if arg is out of range error error checking 01 arg out of range endif endm 4 29 6 Application Example error This program demonstrates the error assembler directive which sets an error message to be printed in the listing file and error file include p16f877a inc Include standard header file for the selected device variable baudrate variable used to define required baud rate baudrate set D 5600 Enter the required value of baud rate here if baudrate D 1200 amp amp baudrate D 2400 amp amp baudrate D 4800 amp amp baudrate D 9600 amp amp baudrate D 19200 error Selected baud rate is not supported endif The if endif code above outputs error if the baud rate selected is other than 1200 2400
242. is version with MPLAB IDE in a stand alone Windows application or on the command line This version is available with MPLAB IDE or with the regular and demo version of the MPLAB C18 C compiler The MPASM assembler supports all PIC1X MCU devices as well as memory and KeeLoq secure data products from Microchip Technology Inc Some memory and Keel og devices were not supported in MPLAB IDE after v5 70 40 1 3 HOW MPASM ASSEMBLER HELPS YOU The MPASM assembler provides a universal solution for developing assembly code for all of Microchip s PIC1X MCUs Notable features include e MPLAB IDE Compatibility e Windows Command Line Interfaces e Rich Directive Language e Flexible Macro Language 1 4 ASSEMBLER MIGRATION PATH Since the MPASM assembler is a universal assembler for all PIC1X MCU devices application code developed for the PIC16F877A can be translated into a program for the PIC18F452 This may require changing the instruction mnemonics that are not the same between the devices assuming that register and peripheral usage were similar Also configuration settings may be different The CONFIG syntax with one operand is not recognized by PIC18 and PIC16F19XX MCUs The rest of the directive and macro language will be the same 2009 Microchip Technology Inc DS33014K page 23 Assembler Linker Librarian User s Guide 1 5 ASSEMBLER COMPATIBILITY ISSUES The MPASM assembler is compatible with the MPLAB IDE integrated devel
243. isplay errors only errors and warnings or errors warnings and messages These will be shown in the Output window Default storage class Select the storage class either ANSI standard auto or static Macro Definitions Add macro directive definitions Restore Defaults Restore tab default settings Use Alternate Settings Text Box Enter options in a command line non GUI format Memory Model Category Generate Command Line Small near rom program memory lt 8K near ram data memory lt 256 Medium far rom program memory gt 8K near ram data memory lt 256 Compact near rom program memory lt 8K far ram data memory gt 256 Large far rom program memory gt 8K far ram data memory gt 256 Restore Defaults Restore tab default settings Use Alternate Settings Text Box Enter options in a command line non GUI format Optimization Category Generate Command Line Bank Selection Optimiza Select the level of bank selection optimization Removes MOVLB tion instruction in instances where it can be determined that the Bank Select register already contains the correct value Level 0 None Level 1 Equivalent to On1 Level 2 Equivalent to On2 Other Optimizations Select individual optimizations Restore Defaults Restore tab default settings Use Alternate Settings Text Box Enter options in a command line non GU
244. itted Operands of the form relocatable symbol relocatable symbol will be reduced to a constant value if both symbols are defined in the same code or data section In addition to section operators there are section pseudo instructions Pseudo Instruction Definition scnend_lfsr scnend_lfsr n s where nis 0 1 or 2 as with the LFSR instruction and s is a string which is taken to be the name of a section This instruction loads LFSR with the end address of the section scnstart lfsr scnstart_lfsr n s where nis 0 1 or 2 as with the LFSR instruction and s is a string which is taken to be the name of a section This instruction loads LFSR with the start address of the section These operators and instructions only have meaning when an object file is generated they cannot be used when generating absolute code EXAMPLE 6 3 GENERAL OPERATOR USE The general operators low high and upper may be used to access data in tables The following code example was taken the p18demo asm file provided with PICDEM 2 Plus demo board The excerpt shows how Microchip is read from the table and displayed on the demo board LCD include p18f452 inc PROG1 CODE stan_table table for standard code 7 XXXXXXXXXXXXXXXX pEr data Voltmeter D 70 data n Buzzer n 16 data Temperature L 232 data Clock KR 48 data RA4 Next RBO Now 64 data Microchip 780 data PICDEM 2 PLUS 96 data RA4
245. itted to have the same name 4 64 3 Usage This directive is used in the following types of code relocatable For information on types of code see Section 1 6 Assembler Operation This directive is similar to udata except that it allows you to reuse data space by overlaying one data area on another It is used for temporary variables as each data section may overwrite and thus share the same RAM address locations 4 64 4 See Also extern global idata udata udata_acs udata_shr 4 64 5 Simple Example Temps udata_ovr Temp1 res 1 Temp2 res 1 Temp3 res 1 Temps udata_ovr this will be a variable at the LongTempl res 2 Same location as Templ and Temp2 this will be a variable at the same location as Temp3 LongTemp2 res 2 2009 Microchip Technology Inc DS33014K page 113 Assembler Linker Librarian User s Guide 4 64 6 Application Example udata ovr This program demonstrates the udata_ovr directive This directive declares the beginning of a section of overlaid uninitialized data include p16f877a inc Include standard header file for the selected device same_var udata_ovr 0x20 Declares an overlaid uninitialized data section named same_var starting at varl res 1 location 0x20 same var udata_ovr 0x20 Declares an overlaid suninitialized data section var2 res 1 with the same name as the one declared above Thus variables varl and var2 are allocated at the
246. kingham Tel 44 118 921 5869 Fax 44 118 921 5820 03 26 09 DS33014K page 288 O 2009 Microchip Technology Inc
247. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk END DS33014K page 214 2009 Microchip Technology Inc Sample Applications 13 5 2 5 EXAMPLE 3 ASSEMBLER BOOT LOADER APPLICATION SOURCE CODE The final example demonstrates the possibility of combining both the boot loader and application code into a single program memory image that can be programmed into a target microcontroller at the same time Since the boot loader will be assembled and linked with the application source code files any references to external labels defined in the application code must be resolved by the linker To accomplish this the GLOBAL directive used in main asm and the EXTERN directive used in the boot loader source file allow the linker to resolve the relocated reset and interrupt vector labels defined in main asm and referenced in the 18Fboot_r asm For this example the same boot kr linker script file used in the previous examples is used to link the boot loader and application files together 18Fboot_r asm This sample version of the boot loader allows for relocatable vectors that are defined not in the boot loader but in the application source code kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkk 18Fboot_r asm kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk LIST P 18F8720 include P18cxxx inc Z Declare labels used here but defined outside this module extern RVReset RVIntH RVI
248. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk END 2009 Microchip Technology Inc DS33014K page 213 Assembler Linker Librarian User s Guide 13 5 2 4 EXAMPLE 2 ASSEMBLER APPLICATION SOURCE CODE In this example the application code is composed of several relocatable source files that are assembled and linked together during build time The relocatable reset and interrupt vector locations are defined in main asm and are assigned to a specific program memory location by the CODE directive main asm This is a sample of the startup portion of a main source code file that contains the relocated reset and interrupts and is the main entry point into the application kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk main asm kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk LIST P 18F8720 include P18cxxx inc kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk R_vectors code 0x200 RVReset Re mapped RESET vector bra main R_IntH code 0x208 Re mapped HI priority interrupt vector RVIntH High priority interrupt vector code here RE retfie R_IntL code 0x218 Re mapped LOW priority interrupt vector RVIntL Low priority interrupt vector code here RAS retfie user_code code 0x22A main Entry into application code starts here o EE end of main code section kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
249. le TABLE 1 2 OUTPUT FILES Listing File Ist Default output extension for listing files generated by assembler Error File err Output extension from assembler for error files Hex File Formats hex hxl hxh Output extension from assembler for hex files Cross Reference File xrf Output extension from assembler for cross reference files Object File Loi Output extension from assembler for object files 1 7 1 Source Code asm Assembly is a programming language you may use to develop the source code for your application The source code file may be created using any ASCII text file editor Note Several example source code files are included free with MPLAB IDE Your source code should conform to the following basic guidelines Each line of the source file may contain up to four types of information e Labels e Mnemonics Directives and Macros e Operands e Comments The order and position of these are important For ease of debugging it is recommended that labels start in column one and mnemonics start in column two or beyond Operands follow the mnemonic Comments may follow the operands mnemonics or labels and can start in any column The maximum column width is 255 characters White space or a colon must separate the label and the mnemonic and white space must separate the mnemonic and the operand s Multiple operands must be separated by commas White space is one or more spaces or tabs White s
250. lename could not read symbol table Coff file filename could not write file header Coff file filename could not write lineinfo Coff file filename could not write optional file header Coff file filename could not write raw data Coff file filename could not write reloc Coff file filename could not write section header Coff file filename could not write string Coff file filename could not write string table length Coff file filename could not write symbol Coff file filename cScnHdr size cScnNum size Coff file filename does not appear to be a valid COFF file Coff file filename has relocation entries but an empty symbol table Coff file filename missing optional file header Coff file filename section xx has an invalid s_ offset Coff file filename section secName line xx has an invalid fenndx Coff file filename section secName line xx has an invalid _srcndx DS33014K page 230 2009 Microchip Technology Inc Errors Warnings and Common Problems Coff file filename section secName reloc xx has an invalid r_symndx Coff file filename symbol xx has an invalid n_offset Coff file filename symbol xx has an invalid n_scnum Coff file filename symbol xx has an invalid index Could not find section name secName in string table Could not find symbol name symNa
251. les per instruction status bits affected and complete instruction details see the relevant device data sheet TABLE A 4 14 BIT BYTE ORIENTED FILE REGISTER OPERATIONS Hex Mnemonic Description Function 07df ADDWF f d Add W and f W f gt d o5df ANDWF f d AND W and f W AND f gt d 01 1 f CLRF f Clear f 0 gt f 01xx CLRW Clear W 0 gt W o9df COMF c d Complement f NOT f gt d 03df DECF F d Decrement f f 1 gt d OBdf DECFSZ F d Decrement f skip if zero f 1 gt d skip if 0 oAdf INCF f d Increment f f 1 gt d OFdf INCFSZ f d Increment f skip if zero f 1 gt d skip if O 04df IORWF f d Inclusive OR W and f W OR f gt d o8df MOVF f d Move f fod 00 1 f MOVWF f Move W to f W gt f 0000 NOP No operation oDdf RLF f d Rotate left f register f C ra A 0 La DS33014K page 254 2009 Microchip Technology Inc Instruction Sets TABLE A 4 14 BIT BYTE ORIENTED FILE REGISTER OPERATIONS CONTINUED Hex Mnemonic Description Function ocaf RRF f d Rotate right f register f E CR Dana 0 02df SUBWF f d Subtract W from f f W gt d OEdf SWAPF Ed Swap halves f f 0 3 O f 4 7 gt d 06df XORWF f d Exclusive OR W and f W XOR f gt d TABLE A 5 14 BIT BIT ORIENTED FILE RE
252. line The values assigned to these arguments at the time the macro is invoked will be substituted wherever the argument name occurs in the body of the macro The body of a macro may be comprised of MPASM assembler directives PIC1X MCU assembly instructions or MPASM assembler macro directives local for example The assembler continues to process the body of the macro until an exitm or endm directive is encountered Note Macros must be defined before they are used i e forward references to macros are not permitted 2009 Microchip Technology Inc DS33014K page 151 Assembler Linker Librarian User s Guide 7 3 MACRO DIRECTIVES DEFINED There are directives that are unique to macro definitions They cannot be used out of the macro context e 4 45 macro Declare Macro Definition 4 31 exitm Exit from a Macro e 4 26 endm End a Macro Definition e 4 32 expand Expand Macro Listing e 4 49 noexpand Turn off Macro Expansion e 4 44 local Declare Local Macro Variable When writing macros you can use any of these directives PLUS any other directives supported by the assembler Note The previous syntax of the dot format for macro specific directives is no longer supported 7 4 MACRO DEFINITION String replacement and expression evaluation may appear within the body of a macro Command Description arg Substitute the argument text supplied as part of th
253. ll subroutine using WREG PC 2 gt TOS W gt PCL PCLATH gt PCH PCLATU gt PCU EB 0 z MOVSF z f Move z source to 1st word FSR2 z gt f Ffff f destination 2nd word EB 1 z MOVSS z z Move z source to 1st word FSR2 z gt FSR2 z FXZZ z destination 2nd word EAkk PUSHL k Store literal at FSR2 k gt FSR2 decrement FSR2 FSR2 1 gt FSR2 E9fk SUBFSR k Subtract literal from FSR FSR f k gt FSR f E9Ck SUBULNK k Subtract literal from FSR2 and return FSR2 k gt FSR2 TOS PC A _ A _ _ __ _ _ ___ _ _ __ _ _ _ _ ___ _ _ ____ _ _ _ _ _ _ ___________________au nn DS33014K page 265 O 2009 Microchip Technology Inc Assembler Linker Librarian User s Guide NOTES DS33014K page 266 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Appendix B Useful Tables B 1 INTRODUCTION Some useful tables are included for reference here The tables are e ASCII Character Set e Hexadecimal to Decimal Conversion B 2 ASCII CHARACTER SET Most Significant Nibble EAN E EE E E E EN 0 NUL DLE p Space 0 P i 1 SOH DC1 1 A Q a q 2 STX DC2 2 B R b r 3 ETX DC3 3 C S c s 2 4 EOT DC4 4 D T d t 2 5 ENQ NAK 5 E U e u E 6 ACK SYN amp 6 F V f v 5 7 Bell ETB 7 G W g w 8 BS CAN 8 H x h x 3 9 HT EM 9 l Y i y A LF SUB E J Z j Z B V
254. lobal Int s bsf INTCON TOIE Enable Timer0 Int Two other routines also use banksel to access the Option register OPTION REG For more on Code this directive see Section 4 7 banksel Generate Bank Selecting DS33014K page 128 O 2009 Microchip Technology Inc Assembler Examples Tips and Tricks 5 3 7 Interrupts The Delay 1 routine in this program uses the Timer 0 overflow interrupt as a timing mechanism Once the interrupt occurs the program branches to the interrupt vector Here code is located to jump to a location where interrupt handling code is found intrpt code 0x04 Interrupt Vector goto ServInt Jump to service interrupt The interrupt handling code also known as the interrupt service routine or ISR is generated by the programmer to handle the specific requirements of the peripheral interrupt and the program In this case Timer 0 is stopped and its flag bit is cleared so it may be run again Then the program defined flag bit is cleared Finally retfie takes the program back to the instruction that was about to be executed when the interrupt occurred isr code 0x08 Interrupt Service Routine ServInt banksel OPTION_REG Select Option Reg Bank 1 bsf OPTION REG TOCS Stop Timer0 banksel INTCON Select INTCON Bank 0 bcf INTCON TOIF Clear overflow flag bcf DFLAG DFLO Clear flag bit retfie Return from interrupt When the program code begins to execute again the cl
255. lue for indirect addressing of register files destination Literals k Literal field constant data or label k 4 bit kk 8 bit kkk 12 bit Offsets Increments Decrements n The relative address 2 s complement number for relative branch instructions or the direct address for Call Branch and Return instructions The mode of the TBLPTR register for the table read and table write instructions Only used with table read TBLRD and table write TBLWT instructions No Change to register Post Increment register Post Decrement register Pre Increment register Bits a RAM access bit a 0 RAM location in Access RAM BSR register is ignored a 1 RAM bank is specified by BSR register default b Bit address within an 8 bit file register 0 to 7 d Destination select bit d 0 store result in WREG d 1 store result in file register f default Fast Call Return mode select bit s 0 do not update into from shadow registers default s 1 certain registers loaded into from shadow registers Fast mode 1 1 Bit values as opposed to Hex value Named Registers BSR Bank Select Register Used to select the current RAM bank FSR File Select Register PCL Program Counter Low Byte DS33014K page 260 2009 Microchip Technology Inc Instruction Sets Field Description PCH Program Counter Hi
256. ly set the program start address but allows the linker to place the code appropriately Since the linker places addressed code first and then attempts to place the relocatable code based on size the likely program memory usage is shown below 2009 Microchip Technology Inc DS33014K page 127 Assembler Linker Librarian User s Guide FIGURE 5 2 PIC16F877A PROGRAM MEMORY MAP e rst 0x0000 intrpt 0x0004 Page0 lt isr 0x0008 code Start 0x0010 gt 0x0800 Page 1 lt Page 2 2 decdly Delay2 0x1000 A 0x1800 Page 3 lt vi Ox1FFF Since the actual location of the main code code section is unknown pagesel directives must be used to ensure that program branches to other sections are correct rst code 0x00 Reset Vector pagesel Start goto Start code Start Program pagesel Delay2 Select Delay2 Page call Delay2 Wait pagesel Loop Select Loop Page goto Loop Repeat For more on this directive see Section 4 53 pagesel Generate Page Selecting Code PIC10 12 16 MCUs 5 3 6 Banking In this example Port B must be configured causing a switch to data memory bank 1 to access the T RISB register This change to bank 1 and subsequent return to bank 0 is easily accomplished using the banksel directive banksel TRISB Select TRISB Bank 1 clrf TRISB Set PortB as output banksel INTCON Select INTCON Bank 0 bsf INTCON GIE Enable G
257. m location 0000h to 01F Fh The remaining program memory starting at location 0200h is available for relocatable application code and data lookup tables Other PIC18F microcontrollers offer larger boot block regions and will require slightly different linker script modifications than what is represented in this example However the concepts shown here can be migrated to these other PIC microcontrollers For this example program memory sections specified by the code and linker script are compared below Specific sections highlighted in this sample application SA3 example are noted TABLE 13 6 PROGRAM MEMORY MAP PIC18F8720 SA3 Program Linker Script Section Source Code Section Memory Address 0x000000 vectors Reset Interrupts Vectors IntH IntL 0x000029 gt 0x00002A boot_code Boot Loader Boot 0x0001FF 0x000200 page Remapped Vectors R_vectors R_IntH R_IntL 0x1FFFFF User Code Data Tables user_code 13 5 2 2 ASSEMBLER LINKER SCRIPT To protect the boot block and vector memory regions the linker script file uses modified CODEPAGE directives to establish these memory regions and uses the PROTECTED modifier to prevent the linker from assigning any relocatable code that is not explicitly assigned to these regions The section of modified generic linker script below shows how the linker can assign the relocatable application code to the user code memory region page that is not protected The other
258. many macros in it 4 32 4 See Also macro noexpand 4 32 5 Simple Example Code example Define a macro to add two numbers add macro numl num2 movlw numl movwf result movlw num2 addwf result endm expand Use macro add add JOO gt s90 2009 Microchip Technology Inc DS33014K page 77 Assembler Linker Librarian User s Guide 4 33 extern Resulting listing file 00029 expand 00030 add 100 90 0010 3064 M movlw 100 0011 00A0 M movwf result 0012 305A M movlw 90 0013 07A0 M addwf result 00031 DECLARE AN EXTERNALLY DEFINED LABEL 4 33 1 Syntax extern label label 4 33 2 Description This directive declares symbol names that may be used in the current module but are defined as global in a different module The extern statement must be included before the 1abe1 is used At least one label must be specified on the line If 1abe1 is defined in the current module MPASM assembler will generate a duplicate label error 4 33 3 Usage This directive is used in the following types of code relocatable For information on types of code see Section 1 6 Assembler Operation As soon as you have more than one file in your project you may use this directive extern will be used in a file when a label usually a variable is used by that file global will be used in another file so that the label may be seen by other files You must use both directives as specified or the label will not be visible
259. mation on types of code see Section 1 6 Assembler Operation This directive is similar to udata except that it is used only for PIC18 devices and will only place variables in access RAM PIC18 devices have an area of RAM known as access RAM Variables in access memory can be used no matter where the bank select register BSR is pointing It is very useful for frequently used and global variables 4 63 4 See Also extern global idata udata udata_ovr udata_shr 4 63 5 Simple Example udata_acs Varl res 1 Double res 2 4 63 6 Application Example udata_acs This program demonstrates the udata_acs directive This directive declares the beginning of a section of uninitialized data include p18f452 inc Include standard header file for the selected device groupl udata_acs 0x20 groupl data stored at access RAM locations starting at 0x20 groupl varl res 1 groupl_varl located at 0x20 groupl var2 res 1 groupl var2 located at 0x21 group2 udata acs Declaration of group2 data The addresses for data under this section are allocated jautomatically by the linker group2_varl res 1 All addresses be will allocated group2 var2 res 1 in access RAM space only RST CODE 0x0 The code section named RST jis placed at program memory location 0x0 The instruction goto start is placed in code section RST goto start Jumps to the location labelled i Start PGM CODE This is the beginning of the code se
260. me in string table Could not open Coff file filename for reading Could not open Coff file filename for writing Could not read archive magic string in library file filename Unable to find aux_file name in string table Unable to find section name in string table Unable to find symbol name in string table 14 6 OTHER ERRORS WARNINGS AND MESSAGES If you are using the linker with any of the utilities i e MPLIB librarian or you have not used the linker options w or x then you may need to look in the utility troubleshooting sections for your error e MPLIB Librarian Chapter 17 Errors e MP2COD and or MP2HEX Chapter 19 Errors and Warnings 14 7 COMMON PROBLEMS Although set up listing file properties with MPASM assembler directives none of these properties is appearing in my listing file Although MPASM assembler is often used with MPLINK object linker MPASM assembler directives are not supported in MPLINK linker scripts See Section 10 3 Command Line Interface for control of listing and hex file output 2009 Microchip Technology Inc DS33014K page 231 Assembler Linker Librarian User s Guide NOTES DS33014K page 232 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Part 3 MPLIB Object Librarian Chapter 15 MPLIB Librarian Overview sisi 235 Chapter 16 Librarian Interfaces esse 239 Chapter 17 Errors iccocoiicrasrai ae 241
261. mode as opposed to release or production mode _DEBUGCODESTART To set the start in program memory of the debug executive i e u_DEBUGCODESTART address _DEBUGCODELEN To set the size of the debug executive i e Ju DEBUGCODELEN hexvalue _DEBUGDATASTART To set the start of data memory reserved registers i e u_DEBUGDATASTART address _DEBUGDATALEN To set the amount of data memory reserved i e Ju DEBUGCODELEN hexvalue 11 8 3 Supporting Directives The DEFINE directive may be used to define a macro or define it and set its value The ERROR directive can be used within an if else clause 11 8 3 1 DEFINE Through this directive you can define an macro and associate a numerical value to it The value can only be calculated using an f or operator over two previously defined macros Complex calculations must be constructed using combination of multiple DEFINE directives ok The following syntaxes are accepted DEFINE newmacromacrol macro2 DEFINE newmacromacrol macro2 DEFINE newmacromacrol macro2 DEFINE newmacromacrol macro2 newmacro may not be a previously defined macro macrol1 and macro2 are previously defined macros The numerical values associated to these macros will be used to calculate a numerical value for newmacro 11 8 3 2 ERROR An ERROR directive has been added to MPLINK linker This directive allows you to s
262. mulator The external emulator box that contains emulation memory trace memory event and cycle timers and trace breakpoint logic Power on Reset Emulation A software randomization process that writes random values in data RAM areas to simulate uninitialized values in RAM upon initial power application PRO MATE Il A device programmer from Microchip Programs most PIC1X microcontrollers as well as most memory and Keelog devices Can be used with MPLAB IDE or stand alone Profile For MPLAB SIM simulator a summary listing of executed stimulus by register Program Counter The location that contains the address of the instruction that is currently executing Program Memory The memory area in a device where instructions are stored Also the memory in the emulator or simulator containing the downloaded target application firmware Project A set of source files and instructions to build the object and executable code for an application Prototype System A term referring to a user s target application or target board PWM Signals Pulse Width Modulation Signals Certain PIC MCU devices have a PWM peripheral Qualifier An address or an address range used by the Pass Counter or as an event before another operation in a complex trigger Radix The number base hex or decimal used in specifying an address RAM Random Access Memory Data Memory Memory in which information can be accessed in any order Raw Data The bina
263. n LIBRARIAN and library file MPLINK linker LINKER and linker script file LINKER output files Utility and output file SIMULATORS EMULATORS DEBUGGERS PROGRAMMERS The linker can select this file for you 2009 Microchip Technology Inc DS33014K page 11 Assembler Linker Librarian User s Guide In this MPLAB IDE project an assembly source file prog asm is shown with its associated assembler MPASM assembler MPLAB IDE will use this information to generate the object file prog o for input into the MPLINK object linker For more information on the assembler see the MPASM assembler documentation The C source file main c is also shown with its associated MPLAB C18 C compiler MPLAB IDE will use this information to generate an object file main o for input into the MPLINK object linker For more information on the compiler see the MPLAB C18 C compiler documentation listed in Recommended Reading In addition precompiled object files precomp o may be included in a project with no associated tool required MPLAB C18 requires the inclusion of a precompiled standard code module c018i 0 for example For more information on available Microchip precompiled object files see the MPLAB C18 C compiler documentation Some library files math 1ib are available with the compiler Others may be built using the librarian tool MPLIB object librarian For more information on the librarian see the MPLIB l
264. n includes the name of the section its type beginning address whether the section resides in program or data memory and its size in bytes There are four types of sections code e initialized data idata e uninitialized data udata e initialized ROM data romdata The following table is an example of the section table in a map file Section Info Section Type Address Location Size Bytes Reset code 0x000000 program 0x000002 cinit romdata 0x000021 program 0x000004 code code 0x000023 program 0x000026 udata udata 0x000020 data 0x000005 The second table Program Memory Usage lists program memory addresses that were used and provides a total usage statistic For example Program Memory Usage Start End 0x000000 0x000005 0x00002a 0x00002b 0x0000bc 0x001174 0x001176 0x002895 10209 out of 32786 program addresses used program memory utilization is 31 The third table in the map file Symbols Sorted by Name provides information about the symbols in the output module The table is sorted by the symbol name and includes the address of the symbol whether the symbol resides in program or data memory whether the symbol has external or static linkage and the name of the file where defined The following table is an example of the symbol table sorted by symbol name in a map file Symbols Sorted by Name Name Address Location Storage File 0x000026 program static C PROGRA 1 MPLAB ASMFOO sampobj asm 0x00002e p
265. n issues see the MPASM assembler readme file Readme for MPASM Assembler htm or the MPLINK object linker MPLIB object librarian readme file Readme for MPLINK Linker htm These ASCII text files may be found in the Readme folder of the MPLAB IDE installation directory On line Help Files Comprehensive help files are available for MPASM assembler and MPLINK object linker MPLIB object librarian In addition debug output format COFF information is also available in help C Compiler User s Guides and Libraries The MPLINK linker and MPLIB librarian also work with the MPLAB C Compiler for PIC18 MCUs formerly MPLAB C18 For more information on the compiler see MPLAB C Compiler for PIC18 MCUs Getting Started DS51295 MPLAB C Compiler for PIC18 MCUs User s Guide DS51288 MPLAB C Compiler for PIC18 MCUs Libraries DS51297 MPLAB IDE Documentation Information on the integrated development environment MPLAB IDE may be found in MPLAB IDE User s Guide DS51519 Comprehensive user s guide e On line help file The most up to date information on MPLAB IDE PIC MCU Data Sheets and Application Notes Data sheets contain information on device operation as well as electrical specifications Applications notes demonstrate how various PIC MCU s may be used Find both of these types of documents for your device on the Microchip website 2009 Microchip Technology Inc DS33014K page 5 Assembler Linker Librarian User
266. n of devices Single Step This command steps though code one instruction at a time After each instruction MPLAB IDE updates register windows watch variables and status displays so you can analyze and debug instruction execution You can also single step C compiler source code but instead of executing single instructions MPLAB IDE will execute all assembly level instructions generated by the line of the high level C statement Skew The information associated with the execution of an instruction appears on the processor bus at different times For example the executed Opcodes appears on the bus as a fetch during the execution of the previous instruction the source data address and value and the destination data address appear when the Opcodes is actually executed and the destination data value appears when the next instruction is executed The trace buffer captures the information that is on the bus at one instance Therefore one trace buffer entry will contain execution information for three instructions The number of captured cycles from one piece of information to another for a single instruction execution is referred to as the skew Skid When a hardware breakpoint is used to halt the processor one or more additional instructions may be executed before the processor halts The number of extra instructions executed after the intended breakpoint is referred to as the skid Source Code DS33014K page 278 2009 Microchip Tech
267. name does not have a proper line info table e Cod file filename does not have a proper local vars table e Cod file filename does not have a proper long symbol table Cod file filename does not have a proper memory map table e Cod file filename does not have a proper name table e Cod file filename does not have a proper symbol table e Cod file filename does not have a properly formed first directory e Cod file filename does not have a properly formed linked directory e Could not open Cod file filename for reading e Could not open Cod file filename for writing e Could not write blockname block in Cod file filename e Could not write directory in Cod file filename DS33014K page 248 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Part 5 Appendices Appendix A Instruction Sets iio 251 Appendix B Useful Tables cocina iii iia 267 O 2009 Microchip Technology Inc DS33014K page 249 Assembler Linker Librarian User s Guide NOTES DS33014K page 250 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Appendix A Instruction Sets A 1 INTRODUCTION PIC1X MCU instruction sets are used in developing applications with MPASM assembler MPLINK object linker and MPLIB object librarian Instructions listed here are grouped either by instruction width or device numbe
268. nancnana ninos 38 Examples Application A Pe eet eet 66 130 134 vele cai iba 122 o ehh d Bes eM Mi ne 66 130 DANKISE ccccceccccceeeceeeeeessecceeeeeeeeteneeees 49 50 SA 51 52 123 132 COIOCK SENS Ter e seu eL cd 53 COS ASE EE 54 123 CONSTANT rer restons ii 118 130 dara dde tee 59 Aala ON 61 o o EE 63 dE E 65 Aina 87 le EE 122 lee 53 le EE 87 el DEE 94 132 210o NA NIN hee ecg BE E 119 OQ ee ccessthtededenateiadesseshesttocsacchaesdepesaztandeaeis 108 123 le TEE 72 rrorleVel jasc a se 74 DS33014K page 284 2009 Microchip Technology Inc IM e Ie 76 A eege Ee 78 Mita ii 80 81 global mute deities See N 78 134 136 A era tte 83 T L RAM ht AR ee AN Re E A 87 Merit 88 89 MS a 105 134 loa EREE EE tad 93 Mac a eet 94 132 MOSSO EE 97 ONG EAEE E A AET ee E 99 100 A taseesta iardins nini 103 123 Ala ai aa 105 A A N 106 123 134 136 BEL EEE EEEE E EEE 108 130 Udala aies uni 110 123 134 136 le EE 112 le EE cathe ia 114 data Sr E node 115 Variable caia 118 130 Wil clics tal atts a natok cabbie che 119 Examples Simple badram 47 Dad Moira as 48 COM WEE 56 A est ete M nade alee bedenke 85 AM un EE 47 AMA O Mii ic 48 HMC ica 66 lee EE EN FUN Me iii 117 Dan ici nai 48 Da iii 50 0e e10 SE 53 eine dat 54 Code le 55 CONS WEE 58 datar EE 60 UE A aa 63 0 ER e tege eege ME bh se 64 sde nee Ge ge en dt dur e 67 e UE 68
269. nce the project is created select Project gt Build Options gt Project to open the Build Options for Project dialog For MPLAB C compiler for PIC18 MCUs sample applications click the Directories tab and enter CompilerInstallationPath lib under Library Path where CompilerInstallationPath is the location where the C compiler is installed on your system Click the MPLINK Linker tab and then click the Generate map file checkbox to select it 3 Select from the Build Configuration list see below whether you will be develop ing your application Debug or are ready to program it into a device Release Setting this control will set the value for the macro _DEBUG found in the linker script file Other macros in the linker script e g CCRUNTIME are automatically set by MPLAB IDE 4 Select Project gt Build All to build the application If your project contains a single assembly file with no linker script file you will be asked if you want to build absolute code or relocatable code The sample applications should be built as relocatable code 5 Ifthe application fails to build check that the environment variables discussed in the next section were set correctly during tool installation DS33014K page 196 2009 Microchip Technology Inc Sample Applications 13 2 1 2 EXAMPLE As an example consider Sample Application 3 C code mixed boot loader application To build an application with MP
270. nclude lt p18cxxx h gt define RM RESET VECTOR 0x000800 define relocated vector addresses define RM HIGH INTERRUPT VECTOR 0x000808 define RM LOW INTERRUPT VECTOR 0x000818 ER VECTOR MAPPING SSA pragma code HIGH INTERRUPT VECTOR 0x000008 void high ISR void pragma code LOW INTERRUPT VECTOR 0x000018 void low ISR void ER BOOT LOADER CODE ESA _asm goto RM HIGH INTERRUPT VECTOR _endasm T _asm goto RM_LOW_INTERRUPT_VECTOR _endasm pragma code void main void Check Bootload Mode Entry Condition if PORTBbits RB4 1 If not pressed User Mode Else continue with bootloader code here _asm goto RM RESET VECTOR _endasm pragma code user RM RESET VECTOR This address defined as 0x800 above or can be defined in header file ER END OF BOOT LOADER NA 13 5 1 3 EXAMPLE 2 C COMPILER APPLICATION This example shows a section of linker script modified to accommodate the application code Application Linker Script The boot loader linker script file may be used when building the C compiler application source code files The linker will use this configuration to link the compiled source code into the pagel program memory region above the protected boot loader region DS33014K page 208 2009 Microchip Technology Inc Sample Applications Application Source Code The C compiler application code can be composed of one or more aggregate relocatabl
271. nd main hex will be produced if no errors occur during the link process DS33014K page 180 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 11 Linker Scripts INTRODUCTION Linker script files are used by the linker to generate application code You no longer need to add a device specific linker script file to the command line or your MPLAB IDE project the linker will find the appropriate file for you as long as a device has been specified However if you want to use a non standard linker script file you will have to add that manually Depending on the hardware debug tool you want to use you may need to set certain conditional symbols on the command line see Example 11 8 4 or to select the Build Configuration as Debug in MPLAB IDE Linker script files are the command files of the linker They specify e Program and data memory regions for the target part e Stack size and location for MPLAB C18 e A mapping of logical sections in source code into program and data regions Linker script directives form the command language that controls the linker s behavior There are four basic categories of linker script directives Each of these directives plus some useful linker script caveats are discussed in the topics listed below Note Linker script comments are specified by If i e any text between a and the end of a line is ignored Topics covered in this
272. ndicated by See the standard header p18 452 inc for a complete list of symbols MPASM 03 70 Released SOURCE ASM 4 5 2004 15 40 00 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 list p 18f452 00002 include p18f452 inc 00001 LIST 00002 P18F452 INC Standard Header File Version 1 4 00845 LIST 0000000B 00003 Dest equ Ox0B 00004 000000 00005 org 0x0000 000000 EF10 F000 00006 goto Start 000020 00007 org 0x0020 000020 OEOA 00008 Start movlw Ox0A 000022 6E0B 00009 movwf Dest 000024 960B 00010 bcf Dest 3 This line uses 2 op 000026 EF10 F000 00011 goto Start 00012 end MPASM 03 70 Released SOURCE ASM 4 5 2004 15 40 00 PAGE 2 SYMBOL TABLE LABEL VALUE A 00000000 ACCESS 00000000 _XT_OSC_1H 000000F9 _ 18F452 00000001 MPASM 03 70 Released SOURCE ASM 4 5 2004 15 40 00 PAGE 12 MEMORY USAGE MAP X Used Unused 00 00 2 OVA L SSS Se AD SS Sas XXXXXXXXXX All other memory blocks unused Program Memory Bytes Used 14 Program Memory Bytes Free 32754 EE 2009 Microchip Technology Inc DS33014K page 29 Assembler Linker Librarian User s Guide Errors 0 Warnings 0 reported 0 suppressed Messages 0 reported 0 suppressed 1 7 4 Error File err The MPASM assembler by default generates an error file This file can be useful when debugging your code The MPLAB IDE will display the error information in the Output window The format of the messages in the
273. ng of your code more difficult The most common usage for this directive is to suppress MESSAGE 302 Operand Not in bank O check to ensure bank bits are correct See the Simple Example for how to do this 4 30 4 See Also list error 2009 Microchip Technology Inc DS33014K page 73 Assembler Linker Librarian User s Guide 4 30 5 Simple Example errorlevel 302 Turn off banking message known tested good code errorlevel 302 Enable banking message untested code and 4 30 6 Application Example errorlevel This program demonstrates the errorlevel assembler directive which sets the type of messages that are printed in the listing file and error file include p16f877a inc Include standard header file for the selected device errorlevel 0 Display print messages warnings and errors messg CAUTION This program has errors display on build This message will display print for error level 0 errorlevel 1 Display print only warnings and errors messg CAUTION This program has errors display message This message will NOT display print for error level 1 or 2 groupl udata 0x20 groupl varl res 1 Label of this directive is not at column 1 This will generate ja warning number 207 Warning 207 will display print for error level O or 1 errorlevel 207 This disables warning whose number is 207 groupl var2 res 1 label of this directive is also not at column 1 but
274. ng the if will assemble Otherwise subsequent code is skipped until an else directive or an endif directive is encountered An expression that evaluates to zero is considered logically FALSE An expression that evaluates to any other value is considered logically TRUE The if and while directives operate on the logical value of an expression A relational TRUE expression is guaranteed to return a nonzero value FALSE a value of zero if s may be nested up to 16 deep 4 39 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is not an instruction but used to control how code is assembled not how it behaves at run time Use this directive for conditional assembly or to check for a condition such as to generate an error message 4 39 4 See Also else endif DS33014K page 86 2009 Microchip Technology Inc Directives 4 39 5 Simple Example if version 100 check current version movlw 0x0a movwf io 1 else movlw 0x0la movwf io 2 endif 4 39 6 Application Example if else endif This program demonstrates the utility of if else and endif assembly directives include p16f877a inc Include standard header file for the selected device variable cfab Variable used to define required configuration of PORTA amp PORTB cfab set 1 Set config to decimal 1 RST CODE 0x0 The code
275. nine bits kk PC 9 bits 0009 RETFIE Return from Interrupt TOS gt PC 1 gt GIE 34kk RETLW kk Return with literal in W kk WREG TOS gt PC 0008 RETURN Return from subroutine TOS PC Note 1 Operation in 14 bit extended instruction set but not 14 bit instruction set 2009 Microch ip Technology Inc DS33014K page 257 Assembler Linker Librarian User s Guide TABLE A 13 14 BIT INHERENT OPERATIONS Hex Mnemonic Description Function 0064 CLRWDT Clear watchdog timer 0 gt WDT and Prescaler if assigned 0000 NOP No operation 0062 OPTION Load OPTION register WREG gt OPTION Register 0001 RESET Software device reset TOS gt PC 0063 SLEEP Go into Standby Mode 0 gt WDT stop oscillator 006r TRIS i Tristate port r WREG gt WO control reg r Note 1 Operation in 14 bit extended instruction set but not 14 bit instruction set TABLE A 14 14 BIT C COMPILER OPTIMIZED OPERATIONS Hex Mnemonic Description Function 31 0 nk ADDFSR n k Add Literal to FSRn FSR n k gt FSR n 001 0 mn MOVIW mmn Move INDFn to W with pre post inc dec INDFn gt W 001 0 nm n mm Move INDFn to W with pre post inc dec 3F 0 nk k n Move INDFn to W Indexed Indirect 001 1 mn MOVWI mmn Move W to INDFn with pre post inc dec W gt INDFn 001 1 nm n mm Move W to INDFn with pre post inc dec 3F 1 nk k n Move W to INDFn Indexed Indirect
276. nked RAM Banked 6Fh 70h General Purpose RAM Unbanked 7Fh RAM Memory Declarations for PIC16F877A Banked Memory Special Function Registers in Banks 0 3 DATABANK NAME sfr0 START 0x0 END 0x1F PROTECTED DATABANK NAME sfrl START 0x80 END 0x9F PROTECTED DATABANK NAME sfr2 START 0x100 END 0x10F PROTECTED DATABANK NAME sfr3 START 0x180 END 0x18F PROTECTED General Purpose RAM in Banks 0 3 DATABANK NAME gpr0 START 0x20 END 0x6F DATABANK NAME gpr1 START 0XxA0 END 0xEF DATABANK NAME gpr2 START 0x110 END 0x16F DATABANK NAME gpr3 START 0x190 END 0x1EF RAM Memory Declarations for PIC16F877A Unbanked Memory General Purpose RAM available in all banks SHAREBANK NAME gprnobnk START 0x70 END 0x7F SHAREBANK NAME gprnobnk START 0xF0 END 0xFF SHAREBANK NAME gprnobnk START 0x170 END 0x17F SHAREBANK NAME gprnobnk START 0x1F0 END 0x1FF DS33014K page 184 O 2009 Microchip Technology Inc 11 5 2 Defining ROM Memory Regions Linker Scripts The CODEPAGE directive is used for program code initialized data values constant data values and external memory It has the following format CODEPAGE NAME memName START addr where END addr PROTECTED FILL fillvalue memName is any ASCII string used to identify a CODEPAGE addr is a decimal or hexadecimal number specifying an address fillValue
277. nncccccnonoccccnanaccnnnannacccnnnnannnnnnn nos 146 6 7 Accessing Labels From Other Modules oooooocccccoccccccconccccccnonancnonanancnnnannnnos 146 6 8 Paging and Banking Issues ositos 147 6 9 Generating the Object Module AAA 148 ECKE 148 2009 Microchip Technology Inc DS33014K page v Assembler Linker Librarian User s Guide Chapter 7 Macro Language A le lee EE 1 2 Macro Syntax acces 7 3 Macro Directives Defined ccccooonnccocconccnnccooocncnnononnononinanonnnnonos 7 4 Macro Definition 7 5 Macro INVOCATION snaa a a 7 6 Macro Code Examples sise sans asenhienee menti Chapter 8 Errors Warnings Messages and Limitations se RIRN ou ele ee RE 8 2 ASSembler rel 8 3 Assembler Warnings oooooconnnnnnonccccnnonnnnnnnnnncncnnnnnannanennnnnnnnnnnnas 8 4 Assembler Messages sisi aies dns ere 8 5 Assembler Limitations ooccccccconncnnccccocnnnncnonoconnnonocononnononnnnnonos Part 2 MPLINK Object Linker Chapter 9 MPLINK Linker Overview EN dee EON EE 9 2 MPLINK Linker Defined opzetrieden ees el 9 3 How MPLINK Linker WORKS uso it liada 9 4 How MPLINK Linker Helps You 9 5 Linker Platforms Supported soii n 9 6 Linker Operation di ne ASS nette 9 7 Linker Input Output Files coin ii Chapter 10 Linker Interfaces 10 1 Introduction ccccccocncccccocnncnccnoncnnnnnoncnnnnnoncononnnnnononononononnonennonos 10 2 MPLAB IDE Interface occcccccnonccnc
278. nnnnnssssesnnrrnrrerrossssrrrrrrrresesssnrnnrrrerernn 46 UE 70 DACIOM iaa 47 Mi aida talca 86 Bank Selecting AA 50 Idei is a EP EE et EEE 88 Bank Selecting Indirect 48 NCCU ioe ete ate EE EE 89 Bani WEE 128 147 Vue UE 118 bankiSel coi alicia 48 Conditional Linker Statements oooonnnnnnncninanaconnnnos 187 Danko as 50 147 COMO tala 57 O 2009 Microchip Technology Inc DS33014K page 283 Assembler Linker Librarian User s Guide Configuration Dis 55 57 146 CONSTANT 2 age E T E TES 58 Constant Compare 154 Constants Block Of 2 32 ra ere nn fr stat 52 69 Declare strass anti wali 58 Deleite it pi 71 GontrolDirectiVES iii ias 44 define coococcccnccnccnonnnccnnnonnncnononononrnnnnnnnnnnonanonanonos 65 elle EE 90 FUNDO EE 116 CONSTANT o a tner a M ne ots ee A 58 elle EE 69 QUito 71 lte BEE 99 Processor iii nt en nr er 104 E el SE A A ab ea se sand Rite 105 SEI Aeddi ge 108 Variable teria siees 117 Create Numeric and Text Data 60 Customer Notification Service 6 Customer Support 7 D AA ids wie SE RS ER ER D ieee Ait 59 Data Mee ne drone ne ER se 62 EEPROM Byte iiien nenei 64 o se II en Sue 68 dina dad 37 60 Data Directives 00nonnnnnnnuesooesnennnnrnrrersrsnrrnrrrreree 44 Lee Tu EE 46 PERE lun ENT 47 ACOMIQ sais ceili nthe eet 55 El O E adn tence 55 ee ee tals 85 A A 95 MAXOM iaa 96 COIOCKS EE 52 COM illa obio dt 57
279. no warning is displayed printed errorlevel 207 This enables warning whose number is 207 group2 udata errorlevel 2 Display print only errors group2 varl res 1 label of this directive is not at column 1 This will generate ja warning number 207 DS33014K page 74 2009 Microchip Technology Inc Directives Warning 207 will NOT display print for error level 2 errorlevel 1 Display print warnings and errors group2 var2 res 1 label of this directive is not at column 1 This will generate a warning number 207 RST CODE 0x0 The code section named RST jis placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start start INTRT CODE 0x4 The code section named INTRT is placed at 0x4 The next two instructions are placed in code section INTRT pagesel service int Label service_int is not goto service int defined Hence this generates error 113 Error 113 will always display print regardless of error level PGM CODE This is the beginning of the code section named PGM It isa relocatable code section since no absolute address is given along with directive CODE start movwf groupl varl goto Go to current line loop here end 4 31 exitm EXIT FROM A MACRO 4 31 1 Syntax exitm 4 31 2 Description Force immediate return from macro expansion dur
280. nologies including computing and communications Interrupt A signal to the CPU that suspends the execution of a running application and transfers control to an Interrupt Service Routine ISR so that the event may be processed Interrupt Handler A routine that processes special code when an interrupt occurs Interrupt Request An event which causes the processor to temporarily suspend normal instruction execution and to start executing an interrupt handler routine Some processors have several interrupt request events allowing different priority interrupts Interrupt Service Routine User generated code that is entered when an interrupt occurs The location of the code in program memory will usually depend on the type of interrupt that has occurred IRQ See Interrupt Request ISO See International Organization for Standardization ISR See Interrupt Service Routine Librarian See Archiver Library See Archive Linker A language tool that combines object files and libraries to create executable code resolving references from one module to another Linker Script Files Linker script files are the command files of a linker They define linker options and describe available memory on the target platform 2009 Microchip Technology Inc DS33014K page 273 Assembler Linker Librarian User s Guide Listing Directives Listing directives are those directives that control the assembler listing file format They
281. nology Inc Glossary The form in which a computer program is written by the programmer Source code is written in some formal programming language which can be translated into or machine code or executed by an interpreter Source File An ASCII text file containing source code Special Function Registers The portion of data memory RAM dedicated to registers that control I O processor functions I O status timers or other modes or peripherals Stack Hardware Locations in PIC microcontroller where the return address is stored when a function call is made Stack Software Memory used by an application for storing return addresses function parameters and local variables This memory is typically managed by the compiler when developing code in a high level language Static RAM or SRAM Static Random Access Memory Program memory you can Read Write on the target board that does not need refreshing frequently Status Bar The Status Bar is located on the bottom of the MPLAB IDE window and indicates such current information as cursor position development mode and device and active tool bar Step Into This command is the same as Single Step Step Into as opposed to Step Over follows a CALL instruction into a subroutine Step Over Step Over allows you to step over subroutines This command executes the code in the subrountine and then stops execution at the return address to the subroutine When stepping over a C
282. ntL kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Vectors VReset Int VIn Int VIn DH y Boo Boo H tH tL code bra code bra code bra code t_Start 0x0000 Boot_Start 0x0008 RVIntH Re map Interrupt vector 0x0018 RVIntL Re map Interrupt vector kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk 0x002A Define explicit Bootloader location Determine if bootloader should execute or branch to user s code bra RVReset Branch to user s application code Else Bootloader execution starts here kkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkk END 2009 Microchip Technology Inc DS33014K page 215 Assembler Linker Librarian User s Guide main_r asm This is asample version of a main source code file that uses the GLOBAL directive to make the relocatable reset and interrupt vector labels available to the boot loader kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk main_r asm kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk LIST P 18F8720 include P18cxxx inc Define labels here but used outside this module global RVReset RVIntH RVIntL kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk R_vectors code 0x200 RVReset Re mapped RESET vector bra main R_IntH code 0x208 Re map
283. o lngth and wdth cannot be reassigned But perimeter has been declared jas variable and so can be reassigned area 1ngth wdth end 4 68 while PERFORM LOOP WHILE CONDITION IS TRUE 4 68 1 Syntax Preferred while expr sit Supported while expr endw 4 68 2 Description The lines between the while and the endw are assembled as long as expr evaluates to TRUE An expression that evaluates to zero is considered logically FALSE An expression that evaluates to any other value is considered logically TRUE A relational TRUE expression is guaranteed to return a non zero value FALSE a value of zero DS33014K page 118 O 2009 Microchip Technology Inc Directives A while loop can contain at most 100 lines and be repeated a maximum of 256 times while loops can be nested up to 8 deep 4 68 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is not an instruction but used to control how code is assembled not how it behaves at run time Use this directive for conditional assembly 4 68 4 See Also endw if 4 68 5 Simple Example while is not executed at run time but produces assembly code based on a condition View the list file 1st or disassembly window to see the results of this example test_mac macro count variable i d 2D while i lt count movlw i 1 1
284. o 69 4 25 endif End Conditional Assembly Block oooooccccnnnncccc nococccccononaccnnnnancnnn 70 4 26 endm End a Macro Definition 70 4 27 endw End awhi Le Loop iaaea E E 71 4 28 equ Define an Assembler Constant c ccccccccsssesseeeeeeeeesssseseeeeeeeeees 71 4 29 error Issue an Error Message eeseccceeeeeeeeeeeeeeeeeeeeeeesesseeeeneeeneees 72 4 30 errorlevel Set Message Level EE 13 4 31 exitm Exit from a Macro vccccccecctecceccecceveuesslehsteedcetanssetscexseaateceseeededeeesaeets 75 4 32 expand Expand Macro Listing seins eee 77 4 33 extern Declare an Externally Defined Label 78 4 34 111 Specify Program Memory Fill Value 80 d erleben Export a Label ccs cece a 82 4 36 idata Begin an Object File Initialized Data Section 82 4 37 idata_acs Begin an Object File Initialized Data Section in Access RAM PIC18 MOUS ota indias 84 4 38 idlocs Set Processor ID Locations 85 4 39 if Begin Conditionally Assembled Code Block 86 4 40 ifdef Execute If Symbol has Been Defined ooooooocccccnccccccccconccccnananccnns 88 4 41 ifndef Execute If Symbol has not Been Defined eee 89 4 42 include Include Additional Source File ooooocccnnnnccccnnnnccccccnocanccnnannnnns 90 4 43 list Listing Options quart ii a 91 4 44
285. o has the ability to generate a relocatable object module that can be linked with other modules using Microchip s MPLINK linker to form the final executable code This method is very useful for creating reusable modules 0000000 main hex N main asm MPASM o o o o o 8 assembler o o o o o o Men o o o o 00000000 more asm more o Related modules can be grouped and stored together in a library using Microchip s MPLIB librarian Required libraries can be specified at link time and only the routines that are needed will be included in the final executable MPASM MPLIB uniti asm assembler librarian unit2 asm MPASM MPLIB units lil assembler librarian ES unit3 asm MPASM MPLIB assembler librarian unit3 o Refer to Chapter 6 Relocatable Objects for more information on the differences between absolute and relocatable object assembly _ QQ Q_uz__ ___ gt eo Er o gt R_ o Q e __ RR Q R o nz QR o OO O 2009 Microchip Technology Inc DS33014K page 25 Assembler Linker Librarian User s Guide 1 7 ASSEMBLER INPUT OUTPUT FILES These are the default file extensions used by the assembler and the associated utility functions TABLE 1 1 INPUT FILES Source Code asm Default source file extension input to assembler Include File inc Include header fi
286. o set port pins to outputs A loop named Loop is entered where the value of each port is increased indefinitely until the program is halted Finally the program is finished with an end 5 2 2 Commented Code Listing Toggles Port pins with count on PIC18F8720 PortA pins on POR RA5 RA3 0 analog inputs RA6 RA4 digital inputs PortB pins on POR RB7 0 digital inputs include p18f8720 inc Include file needed to reference data sheet names clrf PORTA Clear output data latches on Ports clrf PORTB movlw 0x0F Configure Port A for digital 1 0 movwf ADCON1 clrf TRISA Set data direction of Ports as outputs clrf TRISB Loop incf PORTA F Read PORTA add 1 and save back incf PORTB F Read PORTB add 1 and save back goto Loop Do this repeatedly count end All programs must have an end directive DS33014K page 122 O 2009 Microchip Technology Inc Assembler Examples Tips and Tricks 5 3 EXAMPLE OF PORT B TOGGLE AND DELAY ROUTINES Directives highlighted in this example are udata res equ code banksel pagesel Items covered in this example are e Program Functional Description Commented Code Listing Header Files Register and Bit Assignments Program Memory CODE Sections and Paging Banking Interrupts 5 3 1 Program Functional Description This program continually alternates the output on the Port B pins from 1 s to 0 s Two delay routines using interrupts provide
287. ocations will be filled with two words 16 bit numbers each representing ASCI equivalent of two characters The last character will be taken as NULL in case odd number of Characters are specified Directive data produces two words 434Dh and 0055h 434Dh represents C and M tb1 dra data Oxffff 0xaa55 Places ffff and aa55 in two consecutive program memory locations end 4 16 db DECLARE DATA OF ONE BYTE 416 1 Syntax label db expr expr expr 4 16 2 Description db Data Byte Reserve program memory words with 8 bit values Multiple expressions continue to fill bytes consecutively until the end of expressions Should there be an odd number of expressions the last byte will be zero unless in a PIC18 code_pack section 4 16 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation When generating a linkable object file this directive can also be used to declare initialized data values Refer to the idata directive for more information For PIC18 devices use code_pack with db since it is desired to not have bytes padded with zeroes See the description of code_pack for more information 4 16 4 See Also data de dt dtm dw idata code pack DS33014K page 62 2009 Microchip Technology Inc Directives 4 16 5 Simple Examples Example1 PIC16 Devices db OxOf t
288. om outside the module in which it is defined 2009 Microchip Technology Inc DS33014K page 271 Assembler Linker Librarian User s Guide External Symbol A symbol for an identifier which has external linkage This may be a reference or a definition External Symbol Resolution A process performed by the linker in which external symbol definitions from all input modules are collected in an attempt to resolve all external symbol references Any external symbol references which do not have a corresponding definition cause a linker error to be reported External Input Line An external input signal logic probe line TRIGIN for setting an event based upon external signals External RAM Off chip Read Write memory File Registers On chip data memory including general purpose registers GPRs and special function registers SFRs Filter Determine by selection what data is included excluded in a trace display or data file Flash A type of EEPROM where data is written or erased in blocks instead of bytes FNOP Forced No Operation A forced NOP cycle is the second cycle of a two cycle instruction Since the PIC microcontroller architecture is pipelined it prefetches the next instruction in the physical address space while it is executing the current instruction However if the current instruction changes the program counter this prefetched instruction is explicitly ignored causing a forced NOP cycle GPR General P
289. on bits DS33014K page 56 2009 Microchip Technology Inc Directives 4 12 config Example 3 PIC18 Devices include p18c452 inc Include standard header file for the selected device code protect disabled __CONFIG _CONFIGO CP OFF_0 Oscillator switch disabled RC oscillator with OSC2 as I O pin __ CONFIG _CONFIG1 OSCS OFF 1 amp RCIO OSC 1 Brown OutReset enabled BOR Voltage is 2 5v __ CONFIG _CONFIG2 BOR ON 2 amp BORV 25 2 Watch Dog Timer enable Watch Dog Timer PostScaler count 1 128 __ CONFIG _CONFIG3 _WDT ON 3 amp WDTPS 128 3 CCP2 pin Mux enabled __CONFIG _CONFIG5 _CCP2MX_ON_5 Stack over underflow Reset enabled _ CONFIG _CONFIG6 _STVR_ON 6 SET PROCESSOR CONFIGURATION BITS PIC18 MCUs 4 12 1 Syntax config setting value setting value 4 12 2 Description Defines a list of configuration bit setting definitions This list sets the PIC18 processor s configuration bits represented by setting to a value described by value Refer to individual PIC18 microcontroller data sheets for a description of the configuration bits Available settings and values maybe found in both the standard processor include inc files and the P C18 Configuration Settings Addendum DS51537 Multiple settings may be defined on a single line separated by commas Settings for a single configuration byte may also be defined on separate lines Before this directive is used a PIC18 MCU must be de
290. on for file and path names in the debug COD file produced by MPASM assembler This can cause problems when assembling single files with long file names and or path names Work arounds Shorten your file name or move your file into a directory closer to the root directory shorten the path name and try assembling your file again Create a mapped drive for the long directory chain Use the linker with the assembler and not the assembler alone to generate your output There is no character restriction with MPLINK linker e The command line version of the assembler mpasm exe has the following limitations File names are limited to 8 3 format config directive not supported 2009 Microchip Technology Inc DS33014K page 167 Assembler Linker Librarian User s Guide NOTES DS33014K page 168 2009 Microchip Technology Inc S ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Part 2 MPLINK Object Linker Chapter 9 MPLINK Linker Overview nnenennnnennnss 171 Chapter 10 Linker Interfaces nes 179 Chapter 11 Linker SCripts ee sssssanensanarauneasanunnerumarennanueennnenieveuenses 181 Chapter 12 Linker Processing ss isssssnennnernnnes 191 Chapter 13 Sample Applications sense 195 Chapter 14 Errors Warnings and Common Problems 223 2009 Microchip Technology Inc DS33014K page 169 Assembler Linker Librarian User s Guide NOTES DS33014K page 170 2009 Microchip Technology Inc ASSEMBLE
291. on will cause a halt Breakpoint Software O 2009 Microchip Technology Inc DS33014K page 269 Assembler Linker Librarian User s Guide An address where execution of the firmware will halt Usually achieved by a special break instruction Build Compile and link all the source files for an application Cc A general purpose programming language which features economy of expression modern control flow and data structures and a rich set of operators Calibration Memory A special function register or registers used to hold values for calibration of a PIC1X microcontroller on board RC oscillator or other device peripherals COFF Common Object File Format An object file of this format contains machine code debugging and other information Command Line Interface A means of communication between a program and its user based solely on textual input and output Compiler A program that translates a source file written in a high level language into machine code Configuration Bits Special purpose bits programmed to set PIC1 X microcontroller modes of operation A configuration bit may or may not be preprogrammed Control Directives Directives in assembly language code that cause code to be included or omitted based on the assembly time value of a specified expression Cross Reference File A file that references a table of symbols and a list of files that references the symbol If the symbol is defined the first
292. onstant value 171 address specified is not in access ram range of 0x60 OxFF When making use of Access RAM addressing must occur within the specified Access Bank range 172 PCL TOSL TOSH or TOSU cannot be destination of MOVFF or MOVSF These registers cannot be written to with movff or movsf commands 174 CONFIG directives must be listed in ascending order List config directive configuration registers in ascending order i e __ CONFIG _CONFIGO CP OFF_0 __CONFIG _CONFIG1 _OSCS OFF 1 amp _RCIO OSC 1 __ CONFIG _CONFIG2 BOR ON 2 BORV 25 2 175 _IDLOCS directives must be listed in ascending order List _idlocs directive ID registers in ascending order i e __idlocs _IDLOCO 0x1 __idlocs _IDLOC1 0x2 _ idlocs _IDLOC2 0x3 176 CONFIG Directive Error An error was found in the config directive syntax 177 _ CONFIG directives cannot be used with CONFIG directives Do not mix _ config directives and config directives when assigning configuration bits in your code 178 CONFIG Directive Error An error was found in the __ config directive syntax 2009 Microchip Technology Inc DS33014K page 161 Assembler Linker Librarian User s Guide 179 Instruction is not supported on this device This error would occur when an instruction is used in code which is not supported on the particular family architecture 180 RES directive cannot reserve odd number of bytes in PIC18 absolute mode
293. opment environment and all Microchip PIC1X MCU development systems currently in production The MPASM assembler supports a clean and consistent method of specifying radix see Section 3 4 Numeric Constants and Radix You are encouraged to develop using the radix and other directive methods described within this document even though certain older syntaxes may be supported for compatibility reasons 1 6 ASSEMBLER OPERATION The MPASM assembler can be used in two ways e To generate absolute code that can be executed directly by a microcontroller e To generate relocatable code that can be linked with other separately assembled or compiled modules 1 6 1 Generating Absolute Code Absolute code is the default output from the MPASM assembler This process is shown below code asm MPASM code hex assembler Programmer 0000000 When a source file is assembled in this manner all variables and routines used in the source file must be defined within that source file or in files that have been explicitly included by that source file If assembly proceeds without errors a hex file will be generated containing the executable machine code for the target device This file can then be used with a debugger to test code execution or with a device programmer to program the microcontroller DS33014K page 24 O 2009 Microchip Technology Inc MPASM Assembler Overview 1 6 2 Generating Relocatable Code The MPASM assembler als
294. or is non existent 229 extended mode is not in effect overridden by command line A command line option has disabled extended mode operation 230 __ CONFIG has been deprecated for PIC18 devices Use directive CONFIG Although you may still use the config directive for PIC18 MCU devices it is strongly recommended that you use the config directive no leading underscores instead For PIC18FXXJ MCUs you must user the config directive 231 No memory has been reserved by this instruction This warning would appear if an instruction which is meant to reserve memory cannot actually reserve that memory For example org 0x0 a res 1 end The above PIC18 assembly program is attempting to reserve one byte a res 1 but this is not valid for a PIC18 MCU as each word size is two bytes 232 STATUS register has no IRP or RP1 or RPO bits For PIC16 extended instruction devices you are trying to access a non existent bit of the STATUS register IRP or RP1 or RPO bits UNKNOWN WARNING An internal application error has occurred is the value of the last defined warning plus 1 However it is not severe enough to keep your code from assembling i e itis a warning not an error DS33014K page 164 2009 Microchip Technology Inc Errors Warnings Messages and Limitations 8 4 ASSEMBLER MESSAGES MPASM assembler messages are listed numerically below 301 MESSAGE User definable message invoked with the messg dire
295. ormation and the number of errors warnings and messages generated This file may be viewed in MPLAB IDE by 1 selecting File gt Open to launch the Open dialog selecting List files Ist from the Files of type drop down list locating the desired list file clicking on the list file name clicking Open Both the MPASM assembler and the MPLINK linker can generate listing files For information on the MPASM assembler listing file see Section 1 7 3 Listing File Ist An alternative to a listing file would be to use the information in the Disassembly window View gt Disassembly in MPLAB IDE The MPLINK linker uses the mp2cod exe utility to generate the linker list file from the COF file To prevent linker list file generation use the w option aR oN DS33014K page 174 2009 Microchip Technology Inc MPLINK Linker Overview EXAMPLE 9 1 MPLINK LINKER LISTING FILE The MP2COD utility version and list file generation data appear at the top of each page The first column contains the base address in memory where the code will be placed The second column is reserved for the machine instruction This is the code that will be executed by the PIC MCU The third column displays disassembly code The fourth column lists the associated source code line The fifth column lists the file associated for the source code line Note Due to page width restrictions some comments have been shortened indi cated
296. ow demonstrates the modifications required to the generic linker script when building the C compiler boot loader source code files The MPLINK linker will use this configuration to link the compiled source code into the boot program memory region starting at OO2Ah The vector locations will be specified in the boot loader source code using the appropriate pragma code directives NAME vectors NAME boot IFDEF _DEBUGCODESTART CODEPAGE CODEPAGE ELSE CODEPAGE FI CODEPAGE CODEPAGE CODEPAGE CODEPAGE START 0x0 START 0x2A END 0x29 END 0x7FF NAME page START 0x800 END _CODEEND NAME debug START _DEBUGCODESTART END _CEND PROTECTED NAME page START 0x800 END 0x1FFFF NAME idlocs START 0x200000 END 0x200007 PROTECTED NAME config START 0x300000 END 0x30000D PROTECTED NAME devid START 0x3FFFFE END 0x3FFFFF PROTECTED NAME eedata START 0xF00000 END 0xF003FF O 2009 Microchip Technology Inc DS33014K page 207 Assembler Linker Librarian User s Guide Boot Loader Source Code The C compiler boot loader code can be composed of one or more aggregate relocatable C source files that are compiled and linked together during build time In this example the source code file uses the pragma code directive to instruct the linker to place the interrupt vectors at memory locations 0008h and 0018h A main function must be included as this is called from the C compiler startup code that is added during link process i
297. p18f452 inc Include standard header file for the selected device org 0x0000 The following code will be programmed in reset address 0 A __ _ _ _ _ _ _ _ _ _ _ _ __ __ _ _ _ _ _ _ _ _ _ __ _ _ _ __ _ GS DS33014K page 100 O 2009 Microchip Technology Inc Directives Jump to an address whose label is Main The following code will be programmed in high priority interrupt address 8 Jump to an address whose label is int hi The following code will be programmed in low priority interrupt address 18h Jump to an address whose label is pinte Zei The following code section will be programmed starting from address 20H Write your main program here Loop back to Main The following code section will be programmed starting from address 100H Write your high priority interrupt service routine here Return from interrupt The following code section will be programmed starting from address 200H Write your low priority interrupt service routine here Return from interrupt You can create a data or Character table starting from any address in program memory In this case the address is 1000h db PICwithFLASH goto Main org 0x0008 goto int hi org 0x0018 goto int_lo org 0x0020 Main goto Main org 0x0100 int hi retfie org 0x0200 int_lo retfie org 0x1000 ch _tb11 end 4 52 page INSERT LISTING PAGE
298. pace is used to separate pieces of a source line White space should be used to make your code easier for people to read Unless within character constants any white space means the same as exactly one space oo DS33014K page 26 2009 Microchip Technology Inc MPASM Assembler Overview EXAMPLE 1 1 ABSOLUTE MPASM ASSEMBLER SOURCE CODE SHOWS MULTIPLE OPERANDS Mnemonics Directives Labels Macros Operands Comments list p 18f452 Hinclude p18f452 inc Dest equ 0x0B Define constant org 0x0000 Reset vector goto Start org 0x0020 Begin program Start movlw Ox0A movwf Dest bcf Dest 3 This line uses 2 operands goto Start end 1 7 1 1 LABELS A label is used to represent a line or group of code or a constant value It is needed for branching instructions Example 1 1 Labels should start in column 1 They may be followed by a colon space tab or the end of line Labels must begin with an alpha character or an under bar _ and may contain alphanumeric characters the under bar and the question mark Labels must not e begin with two leading underscores e g config e begin with a leading underscore and number e g 2NDLOOP e be an assembler reserved word see Section 3 3 Reserved Words and Section Names Labels may be up to 32 characters long By default they are case sensitive but case sensitivity may be overridden by a command line option c If a colon is used when defining a label it is t
299. pe A relocation type was specified that is not currently supported by the linker 14 4 LINKER WARNINGS MPLINK linker warnings are listed alphabetically below Fill pattern for memory memName doesn t divide evenly into unused section locations Last value was truncated If a fill pattern is specified for a ROM section but the free space in that section isn t evenly divisible by the fill pattern size this warning will be issued to warn of incomplete patterns a command line option ignored with x x prevents the generation of a hex file Therefore specifying the format of hex output file with a is irrelevant n command line option ignored with w w prevents the generation of a Jet file Therefore specifying the number of lines per listing page with n is irrelevant 14 5 COFF FILE ERRORS All the COFF errors listed below indicate an internal error in the file s contents Please contact Microchip support if any of these errors are generated e Coff file filename could not read file header e Coff file filename could not read line numbers e Coff file filename could not read optional file header e Coff file filename could not read raw data Coff file filename could not read relocation info Coff file filename could not read section header Coff file filename could not read string table Coff file filename could not read string table length Coff file fi
300. ped HI priority interrupt vector RVIntH High priority interrupt vector code here aii retfie R_IntL code 0x218 Re mapped LOW priority interrupt vector RVIntL Low priority interrupt vector code here Sek A retfie user code code 0x22A main Entry into application code starts here RES act end of main code section kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk END DS33014K page 216 2009 Microchip Technology Inc Sample Applications 13 6 SAMPLE APPLICATION A CONFIGURING EXTERNAL MEMORY Most of the larger pin count PIC microcontrollers have the ability to interface to external 8 or 16 bit data FLASH or SRAM memories through the External Memory Bus EMB The PIC18F8722 for example has 128K bytes of internal program memory 00000h 1FFFFh But when configured for Extended Microcontroller mode external program memory space from locations 20000h through 1FFFFFh becomes externally addressable through the EMB created from the I O pins The use of a linker script file can be extended to other external memory mapped devices such as programmable I O peripherals real time clocks or any device that has multiple configuration or control registers that can be accessed through an 8 or 16 bit data bus 13 6 1 C Compiler Usage This section discusses how to use the MPLAB C Compiler for PIC18 MCUs the C compiler when developing external memory application code The C
301. placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start starts PGM CODE This is the beginning of the code section named PGM It is a relocatable code section since no absolute address is given along with directive CODE start clrw goto Go to current line loop here CODE This is a relocatable code nop section since no address is specified The section name will be by default code end DS33014K page 54 O 2009 Microchip Technology Inc Directives 4 10 code pack BEGIN AN OBJECT FILE PACKED CODE SECTION PIC18 MCUs 4 10 1 Syntax label code pack ROM address 4 10 2 Description This directive declares the beginning of a section of program code or ROM data where a padding byte of zero is not appended to an odd number of bytes If 1abe1 is not specified the section is named code The starting address is initialized to ROM_address or will be assigned at link time if no address is specified If ROM_address is specified it must be word aligned If padded data is desired use db Note Two sections in a source file may not have the same name 4 10 3 Usage This directive is used in the following types of code relocatable For information on types of code see Section 1 6 Assembler Operation This directive is commonly used when storing data into program memory use with db
302. ppear in the listing file Topics covered in this chapter e Assembler Errors e Assembler Warnings e Assembler Messages e Assembler Limitations 8 2 ASSEMBLER ERRORS MPASM assembler errors are listed numerically below 101 ERROR User error invoked with the error directive 102 Out of memory Not enough memory for macros define s or internal processing 103 Symbol table full No more memory available for the symbol table 104 Temp file creation error Could not create a temporary file Check the available disk space 2009 Microchip Technology Inc DS33014K page 155 Assembler Linker Librarian User s Guide 105 Cannot open file Could not open a file If it is a source file the file may not exist If it is an output file the old version may be write protected To check for write protect right click on the file named by MPLAB IDE in Windows Choose Properties and see if read only is checked If it is it cannot be modified by MPLAB IDE and will generate this error message This often happens when you save your project to a CD R or similar write once media as a backup and then copy the data to your computer Copying to a CD marks all files as read only they cannot be changed on a CD R and when you copy the files the attributes move with them making them all read only on your hard drive A good way to prevent this is to archive all of the files in one file such as a ZIP and then restore them f
303. r pus Devices Supported 12 Bit PIC10F2XX PIC12C5XX PIC12CE5XX PIC16X5X PIC16C505 14 Bit PIC12C67X PIC12CE67X PIC12F629 675 PIC16X 16 Bit PIC18X Topics covered are e Key to 12 14 Bit Instruction Width Instruction Sets 12 Bit Instruction Width Instruction Set 14 Bit Instruction Width Instruction Set 14 Bit Instruction Width Extended Instruction Set 12 Bit 14 Bit Instruction Width Pseudo Instructions e Key to PIC18 Device Instruction Set PIC18 Device Instruction Set PIC18 Device Extended Instruction Set A 2 KEY TO 12 14 BIT INSTRUCTION WIDTH INSTRUCTION SETS Field Description Register Files dest Destination either the WREG register or the specified register file location See d Register file address 5 bit 7 bit or 8 bit n FSR or INDF number 0 or 1 p Peripheral register file address 5 bit r Port for TRIS x Don t care 0 or 1 The assembler will generate code with x 0 It is the recommended form of use for compatibility with all Microchip software tools Literals k Literal field constant data or label k 4 bit kk 8 bit kkk 12 bit mm Pre post increment decrement mode selection 2009 Microchip Technology Inc DS33014K page 251 Assembler Linker Librarian User s Guide Field Description
304. r macro Declaration of macro add_incr local incr Local assembler variable incr The same name incr is used in the main code where its value is set to 2 incr set 3 Local incr is set to 3 in contrast to incr value Of 2 in main code clrw w register is set to zero addlw incr w register is added to incr and result placed back endm jin w register RST CODE 0x0 The code section named RST jis placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start start PGM CODE This is the beginning of the code section named PGM It is a relocatable code section since no absolute address is given along with directive CODE start clrw W register set to zero addlw incr W register is added with the value of incr which is now equal EO 2 add_incr W register is added with the value of incr which is now equal to 3 value set locally in the macro add incr clrw W register is set to zero again addlw incr jincr is added to W register and result placed in W register incr value is again 2 not affected by the value set in the macro goto Go to current line loop here end 2009 Microchip Technology Inc DS33014K page 93 Assembler Linker Librarian User s Guide 4 45 macro DECLARE MACRO DEFINITION 4 45 1 Syntax label macro arg arg 4 45 2 Description
305. rary filename must end with o or 1ib respectively Illegal lt filename gt for INCLUDE in cmdfile line A linker command filename must end with 1kr Illegal lt libpath gt for LIBPATH in cmdfile line The libpath must be a semicolon delimited list of directories Enclose directory name which have embedded spaces in double quotes Illegal lt lkrpath gt for LKRPATH in cmdfile line The krpath must be a semicolon delimited list of directories Enclose directory names which have embedded spaces in double quotes Invalid attributes for memory in cmdfile line A CODEPAGE DATABANK or SHAREBANK directive does not specify a NAME START or END attribute or another attribute is specified which is not valid Invalid attributes for SECTION in cmdfile line A SECTION directive must have a NAME and either a RAM or ROM attribute 2009 Microchip Technology Inc DS33014K page 223 Assembler Linker Librarian User s Guide Invalid attributes for STACK in cmdfile line A STACK directive does not specify a SIZE attribute or another attribute is specified which is not valid k switch requires lt pathlist gt A semicolon delimited path must be specified Enclose directory names containing embedded spaces with double quotes For example k C mylkr c program files microchip mpasm suite lkr I switch requires lt pathlist gt A semicolon delimited path must be specified Enclose directory names
306. re Defaults Restore tab default settings Use Alternate Settings Text Box Enter options in a command line non GUI format Memory Model Category Generate Command Line Code Model Select a code program memory ROM model Choose from small lt 64K bytes or large gt 64K bytes Data Model Select a data data memory RAM model Choose from large all RAM banks or small access RAM only Stack Model Select a stack model Choose from single bank or multiple bank Restore Defaults Restore tab default settings Use Alternate Settings Text Box Enter options in a command line non GUI format Optimization Category Generate Command Line Disable Disable optimization Debug Enable optimizations for debugging Enable All Enable all optimizations Custom Enable optimization and select individual optimizations Procedural Abstraction For Enable All and Custom optimizations set the desired num passes ber of passes for procedural abstraction Restore Defaults Restore tab default settings Use Alternate Settings Text Box Enter options in a command line non GUI format 2009 Microchip Technology Inc DS33014K page 15 Assembler Linker Librarian User s Guide Build Options Dialog MPLINK Linker Tab Select a category and then set up linker options For additional options see MPLINK object linker documentation Chapter 10 Linker Inte
307. reated as a label operator and not part of the label itself 1 7 1 2 MNEMONICS DIRECTIVES AND MACROS Mnemonics tell the assembler what machine instructions to assemble For example addition add branches goto or moves movwf Unlike labels that you create yourself mnemonics are provided by the assembly language Mnemonics are not case sensitive Directives are assembler commands that appear in the source code but are not usually translated directly into opcodes They are used to control the assembler its input output and data allocation Directives are not case sensitive Macros are user defined sets of instructions and directives that will be evaluated in line with the assembler source code whenever the macro is invoked O 2009 Microchip Technology Inc DS33014K page 27 Assembler Linker Librarian User s Guide Assembler instruction mnemonics directives and macro calls should begin in column two or greater If there is a label on the same line instructions must be separated from that label by a colon or by one or more spaces or tabs 1 7 1 8 OPERANDS Operands give information to the instruction on the data that should be used and the storage location for the instruction Operands must be separated from mnemonics by one or more spaces or tabs Multiple operands must be separated by commas 1 7 1 4 COMMENTS Comments are text explaining the operation of a line or lines of code The MPASM assembler treats an
308. rectives 4 22 5 Simple Example if rate lt 50 incf speed F else decf speed F endif 4 22 6 Application Example if else endif See this example under if 4 23 end END PROGRAM BLOCK 4 23 1 Syntax end 4 23 2 Description Indicates the end of the program 4 23 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation You will need at least one end directive in any assembly program to indicate the end of a build In a single assembly file program one and only one end must be used Be careful not to include files which contain end as assembly will be prematurely stopped 4 23 4 See Also org 4 23 5 Simple Example include p18f452 inc executable code end end of instructions 4 24 endc END AN AUTOMATIC CONSTANT BLOCK 4 24 1 Syntax ende 4 242 Description endc terminates the end of a cblock list It must be supplied to terminate the list 4 243 Usage This directive is used in the following types of code absolute For information on types of code see Section 1 6 Assembler Operation For every cblock directive used there must be a corresponding endc 4 24 4 See Also cblock O 2009 Microchip Technology Inc DS33014K page 69 Assembler Linker Librarian User s Guide 4 24 5 Examples See the examples under cblock 4 25 endif END CONDITIONAL ASSEMBLY BLOCK 4 25 1 S
309. rfaces All Options Category Generate Command Line Hex file format Choose the linker hex file format or suppress output of the hex file Generate map file Create a map file A map file provides information on the absolute location of source code symbols in the final output It also provides information on memory use indicating used unused memory Output file root Enter a root directory for saving output files Restore Defaults Restore tab default settings Use Alternate Settings Text Box Enter options in a command line non GUI format Build Options Dialog MPASM C17 C18 Suite Tab Select a category and then set up output build options All Options Category Generate Command Line Build normal target The files in the project will be built for normal output using the invoke MPLINK MPLINK linker hex file etc To set linker options see Build Options Dialog MPLINK Linker Tab Build library target The files in the project will be built into a library using the MPLIB invoke MPLIB librarian lib file For a library build a generic device family library for the selected device may be built e g for the selected device PIC18F8720 the generic device family library would be PIC18 For more on libraries see MPLIB object librarian documentation Chapter 16 Librarian Interfaces A _ ______ _ ___ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
310. rg 0x5 goto 0x2 generates a warning call 0x3 generates a warning org OxA moviw 5 generates a warning 4 6 bankisel GENERATE INDIRECT BANK SELECTING CODE PIC12 16 MCUs 4 6 1 Syntax bankisel label 4 6 2 Description This directive is an instruction to the assembler or linker to generate the appropriate bank selecting code for an indirect access of the register address specified by label Only one 1abe1 should be specified No operations can be performed on label This label must have been previously defined The linker will generate the appropriate bank selecting code For 14 bit instruction width most PIC12 PIC16 devices the appropriate bit set clear instruction on the IRP bit in the STATUS register will be generated But for PIC16 extended instructions FSROH is modified instead of IRP bit as there is no IRP bit If the indirect address can be specified without these instructions no code will be generated 4 6 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive may be used with 14 bit instruction width PIC1X devices This excludes 12 bit instruction width devices and PIC18 devices 4 6 4 See Also banksel pagesel 4 6 5 Simple Example movlw Varl movwf FSR Load the address of Varl info FSR bankisel Varl Select the correct bank for Varl movwf INDF Indirectly write to Varl DS
311. rlf perimeter Multiply register 20H by 2 Carry bit may be affected rlf perimeter 1 Again increment register 21H if carry was generated goto Go to current line loop here end 2009 Microchip Technology Inc DS33014K page 53 Assembler Linker Librarian User s Guide 49 code BEGIN AN OBJECT FILE CODE SECTION 4 9 1 Syntax label code ROM address 4 9 2 Description This directive declares the beginning of a section of program code If label is not specified the section is named code The starting address is initialized to the specified address or will be assigned at link time if no address is specified Note Two sections in a source file may not have the same name 4 9 3 Usage This directive is used in the following types of code relocatable For information on types of code see Section 1 6 Assembler Operation There is no end code directive The code of a section ends automatically when another code or data section is defined or when the end of the file is reached 4 9 4 See Also extern code pack global idata udata udata_acs udata_ovr udata_shr 4 9 5 Simple Example RESET code 0x01FF goto START 4 9 6 Application Example code This program demonstrates the code directive which declares the beginning of a section of program code include p16f877a inc Include standard header file for the selected device RST CODE 0x0 The code section named RST jis
312. rnings and Common Problems 14 3 LINKER ERRORS MPLINK linker errors are listed alphabetically below Absolute code section secName must start at a word aligned address Program code sections will only be allocated at word aligned addresses MPLINK will give this error message if an absolute code section address is specified that is not word aligned Configuration settings have been specified for address 0x300001 in more than one object module Found in foo o previously found in bar o This error is issued when MPLAB C18 s pragma config directive has been used in two separate c files e g foo c and bar cl with settings specified from the same configuration byte Set configuration bits for a given byte in a single c file Conflicting types for symbol symName Symbol symName is defined in different locations as different types Could not find definition of symbol symName in file filename A symbol symName is used without being defined in file filename Could not find file filename An input object or library file was specified which does not exist or cannot be found in the linker path Could not open map file filename for writing Verify that if filename exists it is not a read only file Could not resolve section reference symName in file filename The symbol symName is an external reference No input module defines this symbol If the symbol is defined in a librar
313. rochip Technology Inc Instruction Sets A3 12 BIT INSTRUCTION WIDTH INSTRUCTION SET TABLE A 1 Microchip s baseline 8 bit microcontroller family uses a 12 bit wide instruction set All instructions execute in a single instruction cycle unless otherwise noted Any unused opcode is executed as a NOP The instruction set is grouped into the following categories byte oriented file register operations bit oriented file register operations and core literal and control operations Instructions Additionally instructions that apply to both 12 bit and 14 bit devices are shown in Section A 6 12 Bit 14 Bit Instruction Width Pseudo Instructions Instruction opcode is show in hex by making certain assumptions either listed in the key or as a footnote For more information on the opcode bit values for each instruction as well as the number of cycles per instruction status bits affected and complete instruction details see the relevant device data sheet 12 BIT BYTE ORIENTED FILE REGISTER OPERATIONS Hex Mnemonic Description Function 1Ef ADDWF fid Add W and f WREG f gt dest 16f ANDWF f d AND W and f WREG AND f gt dest 06f CLRF e Clear f 0 gt f 040 CLRW Clear W 0 gt WREG 26f COMF d Complement f NOT f gt dest OEf DECF f d Decrement f f 1 gt dest 2Ef DECFSZ fjd Decrement f skip if zero f 1 gt dest skip if zero 2Af INCF d Incremen
314. rogram static C MPASM assemblerV2 MUL8X8 ASM 0x000024 program static C PROGRA 1 MPLAB ASMFOO sampobj asm 0x000028 program extern C MPASM assemblerV2 MUL8X8 ASM 0x000023 program static C PROGRA 1 MPLAB ASMFOO sampob asm 0x000022 data extern C MPASM assemblerV2 MUL8X8 ASM 0x000023 data extern C MPASM assemblerV2 MUL8X8 ASM 0x000024 data static C MPASM assemblerV2 MUL8X8 ASM 0x000020 data extern C MPASM assemblerV2 MUL8X8 ASM 0x000021 data extern C MPASM assemblerV2 MUL8X8 ASM DS33014K page 176 2009 Microchip Technology Inc MPLINK Linker Overview The fourth table in the map file Symbols Sorted by Address provides the same information that the third table provides but it is sorted by symbol address rather than symbol name If a linker error is generated a complete map file can not be created However if the m option was supplied an error map file will be created The error map file contains only section information no symbol information is provided The error map file lists all sections that were successfully allocated when the error occurred This file in conjunction with the error message should provide enough context to determine why a section could not be allocated 2009 Microchip Technology Inc DS33014K page 177 Assembler Linker Librarian User s Guide NOTES DS33014K page 178 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUID
315. rom CD The archive will preserve the original file attributes 106 String substitution too complex A string substitution was attempted that was too complex Check for nesting of define s 107 Illegal digit An illegal digit in a number Valid digits are 0 1 for binary 0 7 for octal 0 9 for decimal and 0 9 a f and A F for hexadecimal 108 Illegal character An illegal character in a label Valid characters for labels are alphabetic a f A F numeric 0 9 the underscore _ and the question mark Labels may not begin with a numeric 109 Unmatched An open parenthesis did not have a matching close parenthesis For example DATA 1 2 110 Unmatched An close parenthesis did not have a matching open parenthesis For example DATA 1 2 111 Missing symbol An equ or set directive did not have a symbol to which to assign the value 112 Missing operator An arithmetic operator was missing from an expression For example DATA 1 2 A __ ____ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _______ _ _z__________ Ro DS33014K page 156 O 2009 Microchip Technology Inc Errors Warnings Messages and Limitations 113 Symbol not previously defined A symbol was referenced that has not yet been defined Check the spelling and location of the declaration of any symbols used in your code Only addresses may be used as forward references Constants and variables must be declared before t
316. ry are reserved for the label perimeter Addresses of the memory locations will be allocated by the linker length res 1 One location of memory is reserved for the label length Address of the memory location will be allocated by the linker width res 1 One location of memory is reserved for the label width Address of the memory location will be allocated by the linker Start COD EA 0x0000 Following code will be placed in address 0 Here the directive code has the same effect as org But org is used with MPASM assembler to generate absolute code and code is used with MPLINK linker to generate an object file code is also different in that an address is not normally specified the linker handles the allocation of space both in program Flash and data RAM memory goto PER CAL Jump to label PER CAL CODE CODE directive here dictates that the following lines of code will be placed in program memory but the starting address will be decided by the linker PER_CAL clrf perimeter 1 Clear the high byte of the label perimeter movf length w Move the data present in the register addressed by length SEO Uw addwf width w Add data in w with data in the register addressed by width STATUS register carry bit C may be affected movwf perimeter Move w to the perimeter low byte at address 20H Carry bit is unaffected rlf perimeter 1 Increment register 21H
317. ry representation of code or data associated with a section 2009 Microchip Technology Inc DS33014K page 277 Assembler Linker Librarian User s Guide Real Time When released from the halt state in the emulator or MPLAB ICD mode the processor runs in real time mode and behaves exactly as the normal chip would behave In real time mode the real time trace buffer of MPLAB ICE is enabled and constantly captures all selected cycles and all break logic is enabled In the emulator or MPLAB ICD the processor executes in real time until a valid breakpoint causes a halt or until the user halts the emulator In the simulator real time simply means execution of the microcontroller instructions as fast as they can be simulated by the host CPU Recursion The concept that a function or macro having been defined can call itself Great care should be taken when writing recursive macros it is easy to get caught in an infinite loop where there will be no exit from the recursion ROM Read Only Memory Program Memory Memory that cannot be modified Run The command that releases the emulator from halt allowing it to run the application code and change or respond to I O in real time Scenario For MPLAB SIM simulator a particular setup for stimulus control SFR See Special Function Registers Shell The MPASM assembler shell is a prompted input interface to the macro assembler Simulator A software program that models the operatio
318. s EE 230 145 COFF File EMOS ta ai 230 14 6 Other Errors Warnings and Messages ccccoooococccononcccononcccnnanncnncnanancncnnnns 231 14 7 Common Problems bucal asa cia ral 231 Part 3 MPLIB Object Librarian Chapter 15 MPLIB Librarian Overview Sa Wie deele e LEE 235 15 2 What is MPLIB Librarian issus 235 15 3 How MPLIB Librarian WorkS 235 154 How MPLIB Librarian Helps YOU esoo 236 15 5 Lbrar an Opera EEN 236 15 6 Librarian Input Output Files cuina is 237 Chapter 16 Librarian Interfaces Un le ite lei e ANE EE 239 16 2 MPLAB IDE Interface umi ad 239 16 3 Command Line Options iia dei 240 16 4 Command Line Examples and TipS c oooocccccccccnconnooonncnnnnnnononannnonnnnnnnonananono 240 Chapter 17 Errors LAA le real e LEE 241 17 2 Librarian Parse Errors ccccccccesscceeceseeeeceaeeseeeseeeseeesaeeneeesetensesensaaeseenes 241 17 3 Library EE 241 1 7 4 GOFF Fil Ee 242 2009 Microchip Technology Inc DS33014K page vii Assembler Linker Librarian User s Guide Part 4 Utilities Chapter 18 Utilities Overview and Usage 181 Introducido 245 18 2 What are Utilities sisi 245 18 3 Utilities Op ration corista it loader 245 18 4 mp2hex exe Utility iii 246 18 5 mp2cod exe Utility See 246 Chapter 19 Errors and Warnings 19 Mile elei e EE 247 19 2 Hex File Errors iii dieser 247 19 3 COFF To COD Conversion Errors sers 247 19 4 COFF To COD Converter Warnings AE 247 19 5 COD Fil Eege oct ads leeches cols See tec
319. s Guide THE MICROCHIP WEB SITE Microchip provides online support via our web site at www microchip com This web site is used as a means to make files and information easily available to customers Accessible by using your favorite Internet browser the web site contains the following information e Product Support Data sheets and errata application notes and sample programs design resources user s guides and hardware support documents latest software releases and archived software General Technical Support Frequently Asked Questions FAQs technical support requests online discussion groups Microchip consultant program member listing Business of Microchip Product selector and ordering guides latest Microchip press releases listing of seminars and events listings of Microchip sales offices distributors and factory representatives DEVELOPMENT SYSTEMS CUSTOMER CHANGE NOTIFICATION SERVICE Microchip s customer notification service helps keep customers current on Microchip products Subscribers will receive e mail notification whenever there are changes updates revisions or errata related to a specified product family or development tool of interest To register access the Microchip web site at www microchip com click on Customer Change Notification and follow the registration instructions The Development Systems product group categories are Compilers The latest information on Microchip C compilers an
320. s and libraries can be combined with new source modules and placed efficiently into available memory at link time Accelerated Development Since tested modules and libraries don t have to be recompiled each time a change is made in your code compilation time may be reduced 9 5 LINKER PLATFORMS SUPPORTED MPLINK linker is distributed as a Windows 32 console application suitable for Windows 95 98 and Windows NT 2000 XP platforms 9 6 LINKER OPERATION The MPLINK linker combines multiple input object modules and library files per the linker script file into a single output COF file Utilities can be used to generate executable code hex or a linker listing file 1st from the COF file A map file can also be generated to aid in debugging FIGURE 9 1 MPLINK LINKER OPERATION Object script file library file Output flee The linker can select this file for you DS33014K page 172 2009 Microchip Technology Inc MPLINK Linker Overview The linker is executed after assembling or compiling relocatable object modules with the MPASM assembler and or MPLAB C18 C compiler The actual addresses of data and the location of functions will be assigned when the MPLINK linker is executed This means that you may instruct the linker via a linker script to place code and data somewhere within named regions of memory or if not specified to place into any available memory The linker script
321. s are being set with the LCALL or LGOTO pseudo op 308 Warning level superseded by command line value The warning level was specified on the command line as well as in the source file The command line has precedence 309 Macro expansion superseded by command line Macro expansion was specified on the command line as well as in the source file The command line has precedence 310 Superseding current maximum RAM and RAM map The _maxram directive has been used previously 311 Operand of HIGH operator was larger than H FFFF High byte of address returned by high directive was greater than OxFFFF 312 Page or Bank selection not needed for this device No code generated If a device contains only one ROM page or RAM bank no page or bank selection is required and any pagesel banksel or bankisel directives will not generate any code 313 CBLOCK constants will start with a value of 0 If the first cblock in the source file has no starting value specified this message will be generated 314 LFSR instruction is not supported on some versions of the 18Cxx2 devices See message 315 for more information 315 Please refer to Microchip document DS80058A for more details A downloadable PDF of this document PIC18CXX2 Silicon Data Sheet Errata is available from the Microchip website 316 W Register modified The working W register has been modified 317 W Register not modified BSF BCF STATUS instructions used instea
322. s code was adapted from application note AN617 Please see the Microchip website for a downloadable PDF of this application note EXAMPLE 6 9 ABSOLUTE CODE Input fixed point arguments in AARGBO and BARGBO Output product AARGXBARG in AARGBO AARGB1 Other comments truncated See AN617 PRR RRR RRR KKK KERR KKK KK RK KR RK RK RRR kkk kk kkk kkk kkk k kkk kkk k kkk k kkk kkk kkk k k k include p16f877a inc Use any PIC16 device you like LOOPCOUNT EQU 0x20 7 loops needed to complete routine AARGBO EQU 0x21 MSB of result out AARGB1 EQU 0x22 operand A in 8 bits BARGBO EQU 0x23 LSB of result out Operand B in 8 bits TestCode clrf AARGB1 Clear partial product before testing movlw D 11 movw AARGBO movlw D 30 movwf BARGBO call UMULO808L After loading AARGBO and BARGBO Call routine goto Result now in AARGBO AARGB1 where BO is MSB END UMULO808L movlw 0x08 movwf LOOPCOUNT mov AARGBO W LOOPUMO808A LEE BARGBO F btfsc STATUS C goto LUMO808NAP decfsz LOOPCOUNT F goto LOOPUMO808A clrf AARGBO retlw 0x00 LUMO 808NAP bcf STATUS C goto LUMO808NA DS33014K page 148 O 2009 Microchip Technology Inc Relocatable Objects LOOPUMO808 rrf BARGBO F btfsc STATUS C addwf AARGBO F LUMO808NA ree AARGBO F PUE AARGB1 F decfsz LOOPCOUNT F goto LOOPUMO808 retlw 0 END EXAMPLE 6 10 RELOCATABLE CODE CALLING FILE Input fixed point arguments in AARGBO and BA
323. s like named input sections into a single output section The linker allocation algorithm is described in Section 12 3 Linker Allocation Algorithm Once the linker has allocated all sections from all input modules into target memory it begins the process of symbol relocation The symbols defined in each input section have addresses dependent upon the beginning of their sections The linker adjusts the symbol addresses based upon the ultimate location of their allocated sections After the linker has relocated the symbols defined in each input section it resolves external symbols The linker attempts to match all external symbol references with a corresponding symbol definition If any external symbol references do not have a corresponding symbol definition an attempt is made to locate the corresponding symbol definition in the input library files If the corresponding symbol definition is not found an error is generated If the resolution of external symbols was successful the linker then proceeds to patch each section s raw data Each section contains a list of relocation entries which associate locations in a section s raw data with relocatable symbols The addresses of the relocatable symbols are patched into the raw data The process of relocating symbols and patching section is described in Section 12 4 Relocation Example After the linker has processed all relocation entries it generates the executable output module 2
324. s nine bits kk PC 9 bits Dkk IORLW kk Incl OR literal and W kk OR WREG gt WREG Ckk MOVLW kk Move Literal to W kk WREG 002 OPTION Load OPTION Register WREG gt OPTION Register 8kk RETLW kk Return with literal in W kk WREG TOS gt PC 003 SLEEP Go into Standby Mode 0 2 WDT stop oscillator oor TRIS Tristate port r WREG gt WO control reg r Fkk XORLW kk Exclusive OR literal and W kk XOR WREG gt WREG AA 14 BIT INSTRUCTION WIDTH INSTRUCTION SET Microchip s midrange 8 bit microcontroller family uses a 14 bit wide instruction set This instruction set consists of 36 instructions each a single 14 bit wide word Most instructions operate on a file register f and the working register WREG accumulator The result can be directed either to the file register or the WREG register or to both in the case of some instructions A few instructions operate solely on a file register BSF for example The instruction set is grouped into the following categories byte oriented file register operations bit oriented file register operations and core literal and control operations Additionally instructions that apply to both 12 bit and 14 bit devices are shown in Section A 6 12 Bit 14 Bit Instruction Width Pseudo Instructions Instruction opcode is show in hex by making certain assumptions either listed in the key or as a footnote For more information on the opcode bit values for each instruction as well as the number of cyc
325. s of changing the radix Use the radix directive or the list directive option r to change the radix in your code 4 56 4 See Also list 4 56 5 Simple Example radix dec 4 56 6 Application Example radix This example shows the usage of the radix directive for data presentation If not declared then the default radix is in hex adecimal list r dec Set the radix as decimal include p16f877a inc Include standard header file for the selected device movlw 50H 50 is in hex movlw 0x50 Another way of declaring 50 hex movlw 500 50 is in octal movlw 50 50 is not declared as hex or octal or decimal So by default jit is in decimal as default radix jis declared as decimal radix oct Use radix to declare default radix as octal movlw 50H 50 is in hex movlw 0x50 Another way of declaring 50 hex movlw 50 50 is in decimal 2009 Microchip Technology Inc DS33014K page 105 Assembler Linker Librarian User s Guide movlw 50 50 is not declared as hex or octal or decimal So by default sit is in octal as default radix jis declared as octal radix hex Now default radix is in hex movlw 50 50 is declared in decimal movlw 500 50 is declared in octal movlw 50 50 is not declared as hex or octal or decimal So by default sit is in hex as default radix is declared as hex end 4 57 res RESERVE MEMORY 4 57 1 Syntax label res mem_units 4 57 2 Description Causes the memory loc
326. s provided at the end of the file The File Name column lists the names of the files that use the symbol The Source File References column lists the line number of the corresponding file in the File Name column where the symbol is defined referenced An asterisk means a definition To prevent cross reference file generation use the x option 17 7 Object File Loi The assembler creates a relocatable object file from source code This object file does not yet have addresses resolved and must be linked before it can be used as an executable To generate a file that will execute after being programmed into a device see 1 7 5 Hex File Formats hex hxl hxh To prevent object file generation use the o option DS33014K page 32 O 2009 Microchip Technology Inc ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Chapter 2 Assembler Interfaces INTRODUCTION There are several interfaces with which you may use the MPASM assembler depending on the assembler version These interfaces are discussed here When MPLAB IDE is installed the MPASM assembler mpasmwin exe is also installed In addition the assembler may be obtained with the regular and demo version of the MPLAB C18 C compiler Topics covered in this chapter MPLAB IDE Interface e Windows Interface e Command Line Interface MPLAB IDE INTERFACE The MPASM assembler is most commonly used with the MPLINK linker in an MPLAB
327. same address RST CODE 0x0 The code section named RST jis placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start 7 Start PGM CODE This is the beginning of the code section named PGM It is a relocatable code section since no absolute address is given along with directive CODE start banksel varl Any operation on varl affects movlw OxFF var2 also since both variables movwf varl are overlaid comf var2 goto Go to current line loop here end DS33014K page 114 O 2009 Microchip Technology Inc Directives 4 65 udata shr BEGIN AN OBJECT FILE SHARED UNINITIALIZED DATA SECTION PIC12 16 MCUs 4 65 1 Syntax label udata_shr RAM address 4 65 2 Description This directive declares the beginning of a section of shared uninitialized data If 1abe1 is not specified the section is named udata_shr The starting address is initialized to the specified address or will be assigned at link time if no address is specified This directive is used to declare variables that are allocated in RAM that is shared across all RAM banks i e unbanked RAM No code can be generated in this segment The res directive should be used to reserve space for data Note Two sections in the same source file are not permitted to have the same name 4 65 3 Usage This directive is used in the following types of co
328. section named RST is placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start start PGM CODE This is the beginning of the code section named PGM It is a relocatable code section since no absolute address is given along with directive CODE start banksel TRISA 1f cfab 0x0 If config 0x0 is true clrw assemble the mnemonics up to movwf TRISA the directive else Set up PORTA movlw Oxff as output movwf TRISB else clrw If config 0x0 is false movwf TRISB assemble the mnemonics up to movlw Oxff the directive endif Set up PORTB movwf TRISA jas output endif goto Go to current line loop here end 2009 Microchip Technology Inc DS33014K page 87 Assembler Linker Librarian User s Guide 4 40 ifdef EXECUTE IF SYMBOL HAS BEEN DEFINED 4 40 1 Syntax Preferred ifdef label Supported ifdef label 4 40 2 Description If 1abe1 has been previously defined usually by issuing a define directive or by setting the value on the MPASM assembler command line the conditional path is taken Assembly will continue until a matching else or endif directive is encountered 4 40 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is not an instruction but used
329. shared data varies by device Consult your device data sheet for more information udata Uninitialized data This is the most common type of data section Locations reserved in this section are not initialized and can be accessed only by the labels defined in this section or by indirect accesses See 4 62 udata Begin an Object File Uninitialized Data Section udata_acs Uninitialized access data This data section is used for variables that will be placed in access RAM of PIC18 devices Access RAM is used as quick data access for specified instructions See 4 63 udata_acs Begin an Object File Access Uninitialized Data Section PIC18 MCUs udata_ovr Uninitialized overlaid data This data section is used for variables that can be declared at the same address as other variables in the same module or in other linked modules A typical use of this section is for temporary variables See 4 64 udata_ovr Begin an Object File Overlaid Uninitialized Data Section udata_shr Uninitialized shared data This data section is used for variables that will be placed in RAM of PIC 12 16 devices that is unbanked or shared across all banks See 4 65 udata_shr Begin an Object File Shared Uninitialized Data Section PIC12 16 MCUs idata Initialized data The linker will generate a lookup table that can be used to initialize the variables in this section to the specified values When linked with MPLAB C17 or C18 code these loca
330. space name is Example mew the project name is Example mcp and all the project files are listed under their respective file type For more on workspaces and projects see MPLAB IDE documentation FIGURE 3 EXAMPLE PROJECT TREE i Example mew lol Example mcp E Source Files Example asm Example2 asm Header Files Object Files Library Files Linker Scripts Other Files O 2009 Microchip Technology Inc DS33014K page 17 Assembler Linker Librarian User s Guide Set Build Options Select Project gt Build Options gt Project to open the Build Options dialog 1 Click on the MPASM Assembler tab For Categories General check that the Default Radix is set to Hexadecimal For Categories Output check that the Diagnostics level includes all errors warnings and messages Then check the checkbox for Generate cross reference file 2 Click on the MPLINK Linker tab For Categories All Options check that the Hex File Format is set to INHX32 Then check the checkbox for Generate map file 3 Click on the MPASM C17 C18 Suite tab For Categories All Options check that the Build normal target invoke MPLINK is selected 4 Click OK on the bottom of the dialog to accept the build options and close the dialog 5 Select Project gt Save Project to save the current configuration of the Example project Build the Project Select Project gt
331. supported in MPLINK linker scripts See MPLINK object linker documentation for more information on linker options to control listing and hex file output Topics covered are Example of Displaying Count on Ports Example of Port B Toggle and Delay Routines Example of Calculations with Variables and Constants Example of a 32 Bit Delay Routine Example of SPI Emulated in Firmware Example of Hexadecimal to ASCII Conversion Other Sources of Examples Tips and Tricks 2009 Microchip Technology Inc DS33014K page 121 Assembler Linker Librarian User s Guide 5 2 EXAMPLE OF DISPLAYING COUNT ON PORTS Directives highlighted in this example are include end 5 2 1 Program Functional Description This simple program continually increases the count on PORTA and PORTB This count may be displayed in software in the SFR or watch window of MPLAB IDE or in hardware on connected LEDs or a scope The count may be slowed down using a delay routine see other examples Once the count has increased to OxFF it will roll over to 0x00 and begin again The application is written as absolute code e you use only the assembler to generate the executable not the assembler and linker The standard header file for the processor selected is included using include The port output data latches are then cleared Port A must be set up for digital I O as on power up several pins are analog Data direction registers TRISx are cleared t
332. t HEX nibble to ASCII andlw OxOF addlw A A Ox0A return nN ________ ______ _ _ DS33014K page 136 2009 Microchip Technology Inc Assembler Examples Tips and Tricks PRR RR RRR RE KKK EEE EEK KERR KR RR kkk kkk kkk kkk kkk kkk kkk kkk kk kkk kkk kkk kkk k k k global Hex2ASC ASCIIH ASCIIL END 5 8 OTHER SOURCES OF EXAMPLES Short examples of use for each directive are listed under each directive topic See Chapter 4 Directives Examples of use for multiple directives are available from the following sources e readme asm Serial EEPROM Support e Application Notes Technical Briefs Website http www microchip com e Code Examples and Templates MPLAB IDE installation directory Website http www microchip com 5 9 TIPS AND TRICKS To reduce costs designers need to make the most of the available program memory in MCUs Program memory is typically a large portion of the MCU cost Optimizing the code helps to avoid buying more memory than needed Here are some ideas that can help reduce code size For more information see Tips n Tricks DS40040 e TIP 1 Delay Techniques e TIP 2 Optimizing Destinations e TIP 3 Conditional Bit Set Clear e TIP 4 Swap File Register with W e TIP 5 Bit Shifting Using Carry Bit e TIP 6 Using External Memory 5 9 1 TIP 1 Delay Techniques e Use GOTO Next Instruction instead of two NOPs e Use CALL Rtrn as quad 1 instruction NOP where Rt rn is
333. t Project In the Build Options dialog click on the MPASM C17 C18 Suite tab Click the radio button next to Build library target invoke MPLIB Then click OK Now when you build your project you will be building a library file 2009 Microchip Technology Inc DS33014K page 239 Assembler Linker Librarian User s Guide 16 3 COMMAND LINE OPTIONS MPLIB librarian is invoked with the following syntax mplib q ctdrx LIBRARY MEMBER Options Option Description Deiail Je Create library creates a new LIBRARY with the listed MEMBER s d Delete member deletes MEMBER s from the LIBRARY if no MEMBER is specified the LIBRARY is not altered Jo Quiet mode no output is displayed Jr Add replace member if MEMBER s exist in the LIBRARY then they are replaced otherwise MEMBER is appended to the end of the LIBRARY t List members prints a table showing the names of the members in the LIBRARY x Extract member if MEMBER s exist in the LIBRARY then they are extracted If no MEMBER is specified all members will be extracted 16 4 COMMAND LINE EXAMPLES AND TIPS Example of Use Suppose you wanted to create a library named dsp 1ib from three object modules named fft o fir o and iir o The following command line would produce the desired results mplib c dsp lib fft o fir o iir o To display the names of the object modules contained in a library file named dsp 1ib the following comman
334. t a valid library file or it is corrupted Could not open library file filename for reading Verify that filename exists and can be read Could not open library file filename for writing Verify that if filename exists it is not read only Could not write archive magic string in library file filename The file may be corrupted Could not write member header for memberName in library file filename The file may be corrupted File filename is not a valid library file Library files must end with 1ib 2009 Microchip Technology Inc DS33014K page 241 Assembler Linker Librarian User s Guide Library file filename has a missing member object file The file not a valid object file or it may be corrupted memberName is not a member of library filename memberName can not be extracted or deleted from a library unless it is a member of the library Symbol symName has multiple external definitions A symbol may only be defined once in a library file 17 4 COFF FILE ERRORS For a list of COFF File Errors see MPLINK linker Section 14 5 COFF File Errors _ _ __ gt 5 gt gt o Oo o q gg g 0Q0Q0qQm0gqu05gqu05gqD05 gm 05qD0 gq 0 gg g q O q o o o o gt n O 2009 Microchip Technology Inc DS33014K page 242 ASSEMBLER LINKER LIBRARIAN MICROCHIP USER S GUIDE Part 4 Utilities Chapter 18 Utilities Overview and Usage nr 245 Chapter 19 Errors and Warnings nes
335. t be listed in ascending order Although this directive may be used to set configuration bits for PIC18 MCU devices it is recommended that you use the config directive no underline characters For PIC18FXXJ devices you must use the config directive Note Do not mix __ config and config directives in the same code 4 113 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is placed in source code so that when the code is assembled into a hex file the configuration values are preset to desired values in your application This is useful when giving your files to a third party programming house as this helps insure the device is configured correctly when programmed Place configuration bit assignments at the beginning of your code Use the configuration options names in the standard include inc file These names can be bitwise ANDed together using amp to declare multiple configuration bits 4 11 4 See Also config _ idlocs list processor 4 11 5 Simple Examples Example 1 PIC16 Devices include p16f877a inc include file with config bit definitions _ config HS OSC amp WDT OFF amp LVP OFF Set oscillator to HS watchdog time off low voltage prog off Example 2 PIC17X Devices include p17c42 inc include file with config bit definitions _ config OxFFFF default configurati
336. t f f 1 gt dest 3Ef INCFSZ f d Increment f skip if zero f 1 gt dest skip if zero 12f IORWF d Inclusive OR W and f WREG OR f gt dest 22f MOVF f d Move f f gt dest 02f MOVWF Move W to f WREG gt f 000 NOP No operation 36f RLF f d Rotate left f register f C Le T tines 0 ra 32 RRF f d Rotate right f Pacers Dada 0 OAf SUBWF d Subtract W from f f WREG dest 3Af SWAPF f d Swap halves f 1 0 3 o f 4 7 gt dest 1Af XORWF d Exclusive OR W andf WREG XOR f gt dest Assuming default bit value for d TABLE A 2 12 BIT BIT ORIENTED FILE REGISTER OPERATIONS Hex Mnemonic Description Function 4bf BCF f b Bit clear f 0 gt f b 5bf BSF f b Bit set f 1 gt f b cbf BTFSC 415 Bit test skip if clear skip if f b 0 7bf BTFSS f b Bit test skip if set skip if f b 1 2009 Microchip Technology Inc DS33014K page 253 Assembler Linker Librarian User s Guide TABLE A 3 12 BIT LITERAL AND CONTROL OPERATIONS Hex Mnemonic Description Function Ekk ANDLW kk AND literal and W kk AND WREG gt WREG 9kk CALL kk Call subroutine PC 1 TOS kk PC 004 CLRWDT Clear watchdog timer 0 gt WDT and Prescaler if assigned Akk GOTO kk Goto address k i
337. tart Jumps to the location labelled goto start pesta rt PGM CODE This is the beginning of the code section named PGM It is ja relocatable code section since no absolute address is given along with directive CODE start banksel groupl_varl This directive generates code to set clear bank select bits RPO RP1 of STATUS register depending upon the address of groupl vari clrf groupl varl clrf groupl var2 banksel group2_varl This directive generates code to set clear bank select bits RPO RP1 of STATUS register depending upon the address of group2 varl clrf group2_varl clrf group2_var2 goto Go to current line loop here end O 2009 Microchip Technology Inc DS33014K page 51 Assembler Linker Librarian User s Guide 4 8 4 7 7 Application Example 2 banksel include p16f877a inc Include standard header file for the selected device banksel TRISB Since this register is in bank 1 not default bank 0 banksel is used to ensure bank bits are correct GLET TRISB Clear TRISB Sets PORTB to outputs banksel PORTB banksel used to return to bank 0 where PORTB is located movlw 0x55 Set PORTB value movwf PORTB goto end All programs must have an end cblock DEFINE A BLOCK OF CONSTANTS 4 8 1 Syntax cbhlock expr label increment label increment endc 4 8 2 Description Defines a list of named sequential symbols The purpose of this directive
338. te or relocatable For information on types of code see Section 1 6 Assembler Operation You should use the include directive once to include that standard header file for your selected processor This file contains defined register bit and other names for a specific processor so there is no need for you to define all of these in your code DS33014K page 90 2009 Microchip Technology Inc Directives 4 42 4 See Also define undefine 4 42 5 Simple Example include p18f452 inc standard include file include c Program Files mydefs inc user defines 4 43 list LISTING OPTIONS 4 43 1 Syntax list list option list option 4 43 2 Description Occurring on a line by itself the list directive has the effect of turning listing output on if it had been previously turned off Otherwise one of a list of options can be supplied to control the assembly process or format the listing file 4 43 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation TABLE 4 1 LIST DIRECTIVE OPTIONS Option Default Description b nnn 8 Set tab spaces C nnn 132 Set column width f format INHX8M Set the hex file output format can be INHX32 INHX8M or INHX8S Note Hex file format is set in MPLAB IDE Build Options dialog free FIXED Use free format parser Provid
339. the badram directive Once the ___maxram directive is used strict RAM address checking is enabled using the RAM map specified by badram ___maxram Can be used more than once in a source file Each use redefines the maximum valid RAM address and resets the RAM map to all locations 2009 Microchip Technology Inc DS33014K page 95 Assembler Linker Librarian User s Guide 4 46 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is not commonly used in user code as RAM and ROM details are handled by the include files inc or linker script files 1kx 4 46 4 See Also __badram 4 46 5 Simple Example See the examples for badram 4 47 maxrom DEFINE MAXIMUM ROM LOCATION Note maxrom is preceded by two underline characters 4 47 1 Syntax __maxrom expr 447 2 Description The __ maxrom and badrom directives together flag accesses to unimplemented registers __maxrom defines the absolute maximum valid ROM address and initializes the map of valid ROM addresses to all addresses valid at and below expr expr must be greater than or equal to the maximum ROM address of the target device This directive is designed for use with the __badrom directive Once the maxrom directive is used strict ROM address checking is enabled using the ROM map specified by badrom __ ma
340. the exit label from existing subroutine PRR RR RARE kkk kkk kkk kk kkk kkk kk kk kkk kkk kk kkk kkk k kkk k NOP NOP 2 instructions 2 cycles PRR RRR kkk k kkk kkk kkk k kkk k k k k k k k k kkk k k k k k k k k kkk k kkk k GOTO 1 1 instruction 2 cycles PRR RRR RRR KKK KERR KKK KR KE EEK kk k kk k k kkk k kk k k kk k kkk k kkk k Call Rtrn 1 instruction 4 cycles Rtrn RETURN PRR RR RRR KKK KEK RK KK KK KE kkk kkk kk kk kkk kkk kk kkk KEKE kkk k MCUs are commonly used to interface with the outside world by means of a data bus LED s buttons latches etc Because the MCU runs at a fixed frequency it will often need delay routines to meet setup hold times of other devices pause for a handshake or decrease the data rate for a shared bus 2009 Microchip Technology Inc DS33014K page 137 Assembler Linker Librarian User s Guide Longer delays are well suited for the DECFSZ and INCFSZ instructions where a variable is decremented or incremented until it reaches zero when a conditional jump is executed For shorter delays of a few cycles here a few ideas to decrease code size For a two cycle delay it is common to use two NOP instructions which uses two program memory locations The same result can be achieved by using GOTO 1 The represents the current program counter value in MPASM assembler When this instruction is encountered the MCU will jump to the next memory location This is what it would have done
341. tility Using this option will prevent the generation of a hex file There is no required order for the command line arguments however changing the order can affect the operation of the linker Specifically additions to the library object directory search path are appended to the end of the current library object directory search path as they are encountered on the command line and in command files Library and object files are searched for in the order in which directories occur in the library object directory search path Therefore changing the order of directories may change which file is selected The o option is used to supply the name of the generated output COFF file for MPLAB IDE debugging Also generated is an Intel format hex file for programming This file has the same name as the output COFF file but with the file extension hex If the o option is not supplied the default output COFF file is named a out and the corresponding hex file is named a hex 10 4 COMMAND LINE EXAMPLE An example of an MPLINK linker command line is shown below mplink 18f452 1lkr main o funct o math lib m main map Jo main out This instructs MPLINK linker to use the 18 452 1kr linker script file to link the input modules main o funct o and the precompiled library math 1ib It also instructs the linker to produce a map file named main map main o and funct o must have been previously compiled or assembled The output files main cof a
342. tion DATTBL unsigned rom data DATA SIZE Hpragma romdata Set back to default romdata section Configuration Bits Setup The Hpragma config directive specifies the processor specific configuration settings i e configuration bits to be used by the application For more on this directive see the MPLAB C18 C Compiler User s Guide DS51288 Hpragma config OSCS ON OSC LP Enable OSC switching and LP pragma config PWRT ON Enable POR pragma config BOR ON BORV 42 Enable BOR at 4 2v pragma config WDT OFF Disable WDT pragma config MODE EM Use Extended MCU mode Main application code for default CODE section void main void while 1 end while end main 13 4 2 Assembler Source Code eeprom2 asm eeprom2 asm list p 18f8720 include p18f8720 inc INTHAND code place interrupt handling code in here end DS33014K page 204 O 2009 Microchip Technology Inc Sample Applications CODEPAGE CODEPAGE ELSE CODEPAGE FI 13 4 3 Linker Script eeprom lkr The linker script file eeprom 1kr is a modified version of the generic linker script file 18 8720 g 1kr Modify the generic linker script as follows to create eeprom 1kr Add EEPROM codepage information IFDEF _DEBUGCODESTART EEPROM codepage CODEPAGE CODEPAGE CODEPAGE CODEPAGE CODEPAGE NAME page START 0x0 END _CODEEND NAME debug START _DEBUGCODESTART END _CEND PROTEC
343. tions will be initialized during execution of the startup code The locations reserved by this section can be accessed only by the labels defined in this section or by indirect accesses See 4 36 idata Begin an Object File Initialized Data Section The following example shows how a data declaration might be created EXAMPLE 6 4 RAM ALLOCATION Absolute Code Use cblock to define variable register locations See 4 8 cblock Define a Block of Constants Variable values will need to be specified in code cblock 0x20 HistoryVector Must be initialized to 0 InputGain OutputGain Control loop gains Templ Temp2 Temp3 Used for internal calculations endc Equivalent Relocatable Code Use data declarations to define register locations and initialize idata HistoryVector db 0 Initialized to 0 udata InputGain res 1 Control loop gains OutputGain res 1 udata_ovr Templ res 1 Used for internal calculations Temp2 res 1 Temp3 res 1 2009 Microchip Technology Inc DS33014K page 145 Assembler Linker Librarian User s Guide If necessary the location of the section may be fixed in memory by supplying the optional address parameter If more than one of each section type is specified each section must have a unique name If aname is not provided the default section names are idata udata udata_acs udata_shr and udata_ovr When defining initialized data in an idata section the directives db dw an
344. tives may be found alphabetically in the following sections or by type Section 4 2 Directives by Type Note Directives are not case sensitive e g colock may be executed as CBLOCK cblock Cblock etc 4 2 DIRECTIVES BY TYPE There are six basic types of directives provided by the assembler Control Directives Conditional Assembly Directives Data Directives Listing Directives Macro Directives Object File Directives OP OV OO 2009 Microchip Technology Inc DS33014K page 43 Assembler Linker Librarian User s Guide 4 2 1 Control Directives Control directives control how code is assembled e define Define a Text Substitution Label p 65 e include Include Additional Source Pie p 90 e undefine Delete a Substitution Label p 116 bankisel Generate Indirect Bank Selecting Code PIC12 16 MCUs p 48 e banksel Generate Bank Selecting Code ssssssesssessreessreeseerrreen p 50 e constant Declare Symbol Constant p 58 epad End Program BlOCK cercar rines p 69 e equ Define an Assembler Constant p 71 org Set Program Origin ss p 99 e pagesel Generate Page Selecting Code PIC10 12 16 MCUS p 102 pageselw Generate Page Selecting Code Using WREG Commands PIC10 12 16 MCUs is p 103 processor Set Processor Type sssesssessesrssrsssrnesrnernnssnneensrnensrnne p 104 e radix Specify Default Hadir p 105 e set Define an Assembler Var
345. to other files 4 33 4 See Also global idata udata udata_acs udata_ovr udata_shr 4 33 5 Simple Example extern Function call Function 4 33 6 Application Example extern global The program main asm along with sub asm demonstrate the global and extern directives which make it possible to use symbols in modules other than where they are defined This allows a project to be split up into multiple files two in this example for code reuse PRR RRR RRR KKK KR KKK EEK EEK EEK EEK kkk kkk k kkk kkk kkk k kkk kkk k kk k main asm PRR RRR RRR KERR KR kkk kkk kkk kkk kkk kkk kkk kk kkk kkk kkk kkk kkk k kkk include p16f877a inc Include standard header file for the selected device UDATA delay value res 1 GLOBAL delay value The variable delay value declared GLOBAL in this DS33014K page 78 O 2009 Microchip Technology Inc Directives EXTERN delay RST CODE 0x0 pagesel start goto start PGM CODE start movlw D 10 movwf delay value xorlw 0x80 call delay goto start end module is included in an EXTERN directive in the module sub asm The variable delay declared EXTERN in this module is declared GLOBAL in the module sub asm The code section named RST is placed at program memory location 0x0 The next two instructions are placed in code section RST Jumps to the location labelled Start This is the beginning of the code section named PGM It is
346. tom of each page in front of the page number The numbering convention for the DS number is DSXXXXXA where XXXXX is the document number and A is the revision level of the document For the most up to date information on development tools see the MPLAB IDE on line help Select the Help menu and then Topics to open a list of available on line help files INTRODUCTION This chapter contains general information that will be useful to know before using Assembler Linker Librarian User s Guide Items discussed include e Document Layout e Conventions Used e Recommended Reading e The Microchip Web Site e Development Systems Customer Change Notification Service e Customer Support DOCUMENT LAYOUT This document describes how to use the MPASM assembler the MPLINK object linker and the MPLIB object librarian to develop code for PIC microcontroller MCU applications All of these tools can work within the MPLAB Integrated Development Environment IDE For a detailed discussion about basic MPLAB IDE functions refer to MPLAB IDE documentation PIC1X MCU Language Tools Overview provides an overview of how to use all of the tools in this manual together under the MPLAB IDE This is how most developers will use these tools O 2009 Microchip Technology Inc DS33014K page 1 Assembler Linker Librarian User s Guide Part 1 MPASM Assembler Chapter 1 MPASM Assembler
347. top the linker and emit the message in front of it on the standard output The syntax of this directive is ERROR msg This directive is used in the generic linker scripts to calculate the begin and end of the debug sections in code and data memory DS33014K page 188 2009 Microchip Technology Inc Linker Scripts 11 8 4 Examples of Use In these examples the generic linker script for PIC18F6722 is used to demonstrate how different options for building a project can be selected 1 Building a C project Extended mode mplink exe p18F6722 u_CRUNTIME u_EXTENDEDMODE lt other flags gt 2 Building aC project for PIC18F6722 with debug sections for code at 0x1fd80 and for data at Oxef4 Traditional non extended mode mplink exe p18F6722 u_CRUNTIME u DEBUG u_DEBUGCODESTART 0x1fd80 u_DEBUGCODELEN 0x280 u_DEBUGDATATART 0xef4 u_DEBUGDATALEN 0xc lt other flags gt 3 Building a Assembly project no debug mplink exe p18f6722 lt other flags gt Generic Linker Script 18f6722_g Ikr File 18 6722 g lkr Generic linker script for the PIC18F6722 processor DEFINE CODEEND _DEBUGCODESTART 1 DEFINE _CEND DEBUGCODESTART _DEBUGCODELEN DEFINE _DATAEND _DEBUGDATASTART 1 DEFINE DEND DEBUGDATASTART _DEBUGDATALEN LIBPATH IFDEF _CRUNTIME IFDEF _EXTENDEDMODE FILES c018i e o FILES clib e lib FILES p18f6722 e lib ELSE FILES c018i o FILES clib lib FILES p18f6722 1ib
348. trademarks of Microchip Technology Incorporated in the U S A Analog for the Digital Age Application Maestro CodeGuard dsPICDEM dsPICDEM net dsPICworks dsSPEAK ECAN ECONOMONITOR FanSense In Circuit Serial Programming ICSP ICEPIC Mindi MiWi MPASM MPLAB Certified logo MPLIB MPLINK mTouch nanoWatt XLP PICkit PICDEM PICDEM net PICtail PIC3 logo PowerCal Powerlnfo PowerMate PowerTool REAL ICE rfLAB Select Mode Total Endurance TSHARC WiperLock and ZENA are trademarks of Microchip Technology Incorporated in the U S A and other countries SQTP is a service mark of Microchip Technology Incorporated in the U S A All other trademarks mentioned herein are property of their respective companies 2009 Microchip Technology Incorporated Printed in the U S A All Rights Reserved gt Printed on recycled paper Microchip received ISO TS 16949 2002 certification for its worldwide headquarters design and wafer fabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in California and India The Company s quality system processes and procedures are for its PIC MCUs and dsPIC DSCs KEELOQ code hopping devices Serial EEPROMs microperipherals nonvolatile memory and analog products In addition Microchip s quality system for the design and manufacture of development systems is ISO 9001 2000 certified DS33014K page ii 2009 Microchip Technology Inc ASSEMBLER
349. true the source code between the while directive and the endw directive will be repeatedly expanded in the assembly source code stream This directive may be used inside a regular program block or macro 4 27 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation For every while directive used there must be a corresponding endw while and endw are not instructions but used for code assembly only 4 27 4 See Also while 4 27 5 Examples See the example under while 4 28 equ DEFINE AN ASSEMBLER CONSTANT 4 28 1 Syntax label equ expr 4 28 2 Description The value of expr is assigned to label 4 28 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation In a single assembly file program equ is commonly used to assign a variable name to an address location in RAM Do not use this method for assigning variables when building a linked project use a res directive inside a data section directive idata udata 4 28 4 See Also set cblock res idata udata udata_acs udata_ovr udata_shr O 2009 Microchip Technology Inc DS33014K page 71 Assembler Linker Librarian User s Guide 4 28 5 Simple Example four equ 4 assigned the numeric value of 4 to label four 4 28 6 Application Example set equ See th
350. ules created using either MPASM assembler or MPLAB C1X C compilers MPLINK Object Linker 2009 Microchip Technology Inc DS33014K page 275 Assembler Linker Librarian User s Guide MPLINK linker is an object linker for the Microchip MPASM assembler and the Microchip MPLAB C17 or C18 C compilers MPLINK linker also may be used with the Microchip MPLIB librarian MPLINK linker is designed to be used with MPLAB IDE though it does not have to be MRU Most Recently Used Refers to files and windows available to be selected from MPLAB IDE main pull down menus Nesting Depth The maximum level to which macros can include other macros Node MPLAB IDE project component Non Real Time Refers to the processor at a breakpoint or executing single step instructions or MPLAB IDE being run in simulator mode Non Volatile Storage A storage device whose contents are preserved when its power is off NOP No Operation An instruction that has no effect when executed except to advance the program counter Object Code The machine code generated by an assembler or compiler Object File A file containing machine code and possibly debug information It may be immediately executable or it may be relocatable requiring linking with other object files e g libraries to produce a complete executable program Object File Directives Directives that are used only when creating an object file Off Chip Memory Off chip memory refers to
351. urpose Register The portion of device data memory RAM available for general use Halt A stop of program execution Executing Halt is the same as stopping at a breakpoint Hex Code Executable instructions stored in a hexadecimal format code Hex code is contained in a hex file Hex File An ASCII file containing hexadecimal addresses and values hex code suitable for programming a device High Level Language A language for writing programs that is further removed from the processor than assembly ICD In Circuit Debugger MPLAB ICD 2 is Microchip s in circuit debugger ICE In Circuit Emulator MPLAB ICE 2000 and 4000 are Microchip s in circuit emulators IDE DS33014K page 272 2009 Microchip Technology Inc Glossary Integrated Development Environment MPLAB IDE is Microchip s integrated development environment Import Bring data into the MPLAB IDE from an outside source such as from a hex file Instruction Set The collection of machine language instructions that a particular processor understands Instructions A sequence of bits that tells a central processing unit to perform a particular operation and can contain data to be used in the operation Internal Linkage A function or variable has internal linkage if it can not be accessed from outside the module in which it is defined International Organization for Standardization An organization that sets standards in many businesses and tech
352. ute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive saves you from having to manually code page bit changes Also since it automatically generates code the code is much more portable If you are using relocatable code and your device has more than 2k program memory or 0 5K for 12 bit instruction width devices it is recommended that you use this directive especially when code must jump between two or more code sections If you wish to indicate the start address of a RETLW table or a jump table for computed GOTOs you must use the pageselw directive 4 53 4 See Also bankisel banksel 4 53 5 Simple Example pagesel GotoDest goto GotoDest pagesel CallDest call CallDest DS33014K page 102 2009 Microchip Technology Inc Directives 4 53 6 Application Example pagesel This program demonstrates the pagesel directive which generates the appropriate code to set clear PCLATH bits This allows easier use of paged memory such as found on PIC16 devices Hinclude p16f877a inc Include standard header file for the selected device RST CODE 0x0 The code section named RST jis placed at program memory location 0x0 The next two instructions are placed in code section RST pagesel start Jumps to the location labelled goto start start PGMO CODE 0x500 The code section named PGM1 is placed at 0x500 start pagesel pagel pgm address bits 12
353. utput files Reference Section 1 7 Assembler Input Output Files Case Sensitivity Enable disable case sensitivity H enabled the assembler will distinguish between upper and lower case letters Tab Size Set the list file tab size Reference Section 1 7 3 Listing File Ist Macro Expansion Override any source file macro expansion settings Reference Section 4 32 expand Expand Macro Listing DS33014K page 34 2009 Microchip Technology Inc Assembler Interfaces Option Description Processor Override any source file processor settings Extended Mode Enable PIC18F extended instruction support Extra Options Any additional command line options Reference Section 2 4 Command Line Interface Save Settings on Exit Save these settings in mplab ini They will be used the next time you run mpasmwin exe 2 4 COMMAND LINE INTERFACE MPASM assembler can be invoked through the command line interface command prompt as follows mpasmwin option1 optionN filename where option refers to one of the command line options filename is the file being assembled For example if test asm exists in the current directory it can be assembled with following command mpasmwin e 1 test asm If the source filename is omitted the appropriate shell interface is invoked i e a Windows OS interface is displayed which includes a Help button Option Default Descr
354. variables with values in code It is recommended that you always initialize your variables Relying on RAM initialization can cause problems especially when using an emulator as behavioral differences between the emulator and the actual part may occur 4 37 4 See Also extern global udata udata_acs udata_ovr udata_shr DS33014K page 84 2009 Microchip Technology Inc Directives 4 37 5 Simple Example idata_acs LimitL dw 0 LimitH dw D 300 Gain dw D S Flags db 0 String db Hi there 438 _idlocs SET PROCESSOR ID LOCATIONS Note idlocs is preceded by two underline characters 4 38 1 Syntax __idlocs expr __idlocs addr expr PIC18 Only 4 38 2 Description For PIC12 and PIC16 devices idlocs sets the four ID locations to the hexadecimal value of expr For example if expr evaluates to 1AF the first lowest address ID location is zero the second is one the third is ten and the fourth is fifteen For PIC18 devices idlocs sets the two byte device ID at location addr to the hexadecimal value of expr Before this directive is used the processor must be declared through the command line the List directive or the processor directive 4 38 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is not commonly used but does provide an easy method of serializing devices
355. where scnname is generated by the assembler and will be distinct from every name previously generated in this context 4 51 3 Usage This directive is used in the following types of code absolute For information on types of code see Section 1 6 Assembler Operation org is commonly used in single file assembly programs whenever code needs to be placed at a particular location Commonly used values are 0x0 reset 0x4 PIC16 device interrupt vector 0x8 PIC18 device high priority interrupt vector and 0x18 PIC18 device low priority interrupt vector 4 51 4 See Also fill res end 4 51 5 Simple Example int_1 org 0x20 Vector 20 code goes here int 2 org int 1 0x10 Vector 30 code goes here 4 51 6 PIC16 Application Example org This example shows the usage of the org directive Code generation begins at an address specified by org address The origin of a data table also can be specified by this directive A data table may be placed either in a program memory region or in an EE data memory region as in case of a PIC1X device with EE data FLASH include p16f877a inc Include standard header file for the selected device org 0x0000 The following code will be placed in reset address 0 goto Main Jump to an address whose label is Main org 0x0004 The following code will be placed in interrupt address 4 2009 Microchip Technology Inc DS33014K page 99 Assembler Linker Librarian User s Gu
356. with an interrupt In addition the assembler has the following reserved section names TABLE 3 2 RESERVED SECTION NAMES Section Name Purpose access Ovr Default section name for access_ovr directive code Default section name for code directive idata Default section names for idata and idata_acs directives idata_acs respectively udata Default section names for udata udata_acs udata_ovr and udata_acs udata_shr directives respectively udata ovr udata ehr 3 4 NUMERIC CONSTANTS AND RADIX MPASM assembler supports the following radix forms for constants hexadecimal decimal octal binary and ASCII The default radix is hexadecimal the default radix determines what value will be assigned to constants in the object file when a radix is not explicitly specified by a base descriptor Note Theradix for numeric constants can be made different from the default radix specified with the directives radix or list r Also allowable default radices are limited to hexadecimal decimal and octal Constants can be optionally preceded by a plus or minus sign If unsigned the value is assumed to be positive Note Intermediate values in constant expressions are treated as 32 bit unsigned integers Whenever an attempt is made to place a constant in a field for which it is too large a truncation warning will be issued eee 2009 Microchip Technology Inc DS33014K page 39 Assembler Linker
357. xrom Can be used more than once in a source file Each use redefines the maximum valid ROM address and resets the ROM map to all locations 4 47 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive is not commonly used in user code as RAM and ROM details are handled by the include files inc or linker script files 1kx 4 47 4 See Also __badrom 4 47 5 Simple Example See the examples for__ badrom 4 48 messg CREATE USER DEFINED MESSAGE 4 48 1 Syntax messg message text DS33014K page 96 O 2009 Microchip Technology Inc Directives 4 48 2 Description Causes an informational message to be printed in the listing file The message text can be up to 80 characters Issuing a messg directive does not set any error return codes 4 48 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation This directive may be used to generate any desired message It can be useful with conditional assembly to verify in the assembled program which code was built 4 48 4 See Also error 4 48 5 Simple Example mssg macro macro messg mssg_macro 001 invoked without argument endm 4 48 6 Application Example messg This program demonstrates the messg assembler directive which sets a messag
358. y bits 0 through 7 of the expression will be used If high is used only bits 8 through 15 of the expression will be used If upper is used only bits 16 through 21 of the expression will be used Operator Definition low Return low byte of operand high Return high byte of operand upper Return upper byte of operand scnsz low Return low byte of section size scnsz high Return high byte of section size scnsz upper Return upper byte of section size scnend_low Return low byte of section end operand scnend_high Return high byte of section end operand scnend_upper Return upper byte of section end operand scnstart_low Return low byte of section start operand scnstart high Return high byte of section start operand scnstart upper Return upper byte of section start operand Operator precedence information may be found in 3 5 Arithmetic Operators and Precedence DS33014K page 142 2009 Microchip Technology Inc Relocatable Objects There are some restrictions involving these operators with relocatable symbols For example the low high and upper operators must be of the form low high upper relocatable_symbol constant_offset where e relocatable symbol is any label that defines a program or data memory address constant_offset is an expression that is resolvable at assembly time to a value between 32768 and 32767 Either relocatable symbol Of constant offset may be om
359. y module ensure that the library module is included on the command line or in the linker command file using the FILES directive Could not resolve symbol symName in file filename The symbol symName is an external reference No input module defines this symbol If the symbol is defined in a library module ensure that the library module is included on the command line or in the linker command file using the FILES directive Duplicate definition of memory memName All CODEPAGE and DATABANK directives must have unique NAME attributes Duplicate definitions of SECTION secName Each SECTION directive must have unique NAME attributes Remove duplicate definitions File filename section secName performs a call to symbol symName which is not in the lower half of a page For 12 bit devices the program counter PC bit 8 is cleared in the CALL instruction or any modify PCL instruction Therefore all subroutine calls or computed jumps are limited to the first 256 locations of any program memory page 512 words long 2009 Microchip Technology Inc DS33014K page 225 Assembler Linker Librarian User s Guide Inconsistent length definitions of SHAREBANK memName All SHAREBANK definitions which have the same NAME attribute must be of equal length Internal Coff output file is corrupt The linker cannot write to the COFF file Memory memName overlaps memory memName All CODEPAGE blocks
360. yntax Preferred endif Supported Hendif endif ET 4 25 2 Description This directive marks the end of a conditional assembly block endif may be used inside a regular program block or macro 4 25 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation For every if directive used there must be a corresponding endif if and endif are not instructions but used for code assembly only 4 25 4 See Also else if 4 25 5 Examples See the examples under if 4 26 endm END A MACRO DEFINITION 4 26 1 Syntax endm 4 26 2 Description Terminates a macro definition begun with macro 4 26 3 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation For every macro directive used there must be a corresponding endm 4 26 4 See Also macro exitm 4 26 5 Simple Example make table macro argl arg2 dw argl O null terminate table name res arg2 reserve storage endm DS33014K page 70 2009 Microchip Technology Inc Directives 4 26 6 Application Example macro endm See this example under macro 4 27 endw END A while LOOP 4 27 1 Syntax Preferred endw Supported endw 4 27 2 Description endw terminates a while loop As long as the condition specified by the while directive remains
361. yntax Preferred local label label Supported Local label label 4 442 Description Declares that the specified data elements are to be considered in local context to the macro label may be identical to another label declared outside the macro definition there will be no conflict between the two If the macro is called recursively each invocation will have its own local copy 4 443 Usage This directive is used in the following types of code absolute or relocatable For information on types of code see Section 1 6 Assembler Operation If you use a macro more than once and there is a label in it you will get a Duplicate Label error unless you use this directive 4 44 4 See Also endm macro 4 44 5 Simple Example lt main code segment gt len equ 10 global version size equ 20 note that a local variable may now be created and modified test macro size local len label local len and label len set size modify local len label res len reserve buffer len set len 20 endm end macro DS33014K page 92 2009 Microchip Technology Inc Directives 4 44 6 Application Example local This code demonstrates the utility of local directive which declares that the specified data elements are to be considered in local context to the macro include p16f877a inc Include standard header file for the selected device incr equ 2 Assembler variable incr is set equal to 2 add_inc
362. ything after a semicolon as a comment All characters following the semicolon are ignored through the end of the line String constants containing a semicolon are allowed and are not confused with comments 1 7 2 Include File inc An assembler include or header file is any file containing valid assembly code Usually the file contains device specific register and bit assignments This file may be included in the code so that it may be reused by many programs As an example to add the standard header file for the PIC18F452 device to your assembly code use include p18f452 inc Standard header files are located in C Program Files Microchip MPASM Suite 1 7 3 Listing File Ist An MPASM assembler listing file provides a mapping of source code to object code It also provides a list of symbol values memory usage information and the number of errors warnings and messages generated This file may be viewed in MPLAB IDE by 1 selecting File gt Open to launch the Open dialog 2 selecting List files Ist from the Files of type drop down list 3 locating the desired list file 4 clicking on the list file name 5 clicking Open Both the MPASM assembler and the MPLINK linker can generate listing files For information on the MPLINK linker listing file see 9 7 6 Listing File Ist To prevent assembler list file generation use the 1 option or use with MPLINK linker The linker list file overwrites the
Download Pdf Manuals
Related Search
Related Contents
BENDIX TCH-003-048 User's Manual V2/0614 Diagnosing Software Faults in Stellaris App Note 52 - SERDS - Newport Corporation Backup Pro – Admin / Reseller Manual MANUALE OPERATIVO ATTENTION! Kit Type: AMPRO User`s Manual eDofE user guide for DofE centres Copyright © All rights reserved.
Failed to retrieve file