Starting to Program – An Introduction to Assembler Chapter Four Dr. Gheith Abandah1
Outline Introduction The PIC 16 Series Instruction Set Byte-oriented file register operations Bit-oriented file register operations Literal and control operations Instruction Formats Operation Types MPASM Assembler Example Dr. Gheith Abandah2
Introduction Dr. Gheith Abandah3 Micro-controller Programming Options: 1.Machine Code Assembly Language: needs an assembler addwf NUM, w 3.High-Level Language: needs a compiler for (i=0; i<10; i++) sum += a[i];
Development Process Dr. Gheith Abandah4
ALU Data Flow Dr. Gheith Abandah5
The PIC 16 Series Instruction Set Dr. Gheith Abandah6 35 instructions Three Groups: 1.Byte-oriented file register operations 2.Bit-oriented file register operations 3.Literal and control operations Operation Types: – Arithmetic– Logic – Data movement– Control – Misc
1. Byte-oriented file register operations Format: op f, d – op : operation – f : number of file or register – d : destination (0: working register, 1: file register) Example: addwfPORTA, 0 Adds the contents of the working register and register PORTA, puts the result in the working register. Dr. Gheith Abandah7
2. Bit-oriented file register operations Format: op f, b – op : operation – f : number of file or register – b : bit number, 0 through 7 Example: bsfSTATUS, 5 Sets to 1 Bit 5 of register STATUS. Dr. Gheith Abandah8
3. Literal and control operations Format: op k – op : operation – k : literal, an 8-bit if data or 11-bit if address Examples: addlw5 Adds to the working register the value 5. call9 Calls the subroutine at address 9. Dr. Gheith Abandah9
10 Instruction Formats
Arithmetic Operations MnemonicOperandsDescriptionCycles Status Affected ADDWFf, dAdd W and f1C,DC,Z COMFf, dComplement f1Z DECFf, dDecrement f1Z INCFf, dIncrement f1Z SUBWFf, dSubtract W from f1C,DC,Z ADDLWkAdd literal and W1C,DC,Z SUBLWkSubtract W from literal1C,DC,Z Dr. Gheith Abandah11
Logic Operations MnemonicOperandsDescriptionCycles Status Affected ANDWFf, dAND W with f1Z IORWFf, dInclusive OR W with f1Z XORWFf, dExclusive OR W with f1Z ANDLWkAND literal with W1Z IORLWkInclusive OR literal with W1Z XORLWkExclusive OR literal with W1Z Dr. Gheith Abandah12
Data Movement Operations MnemonicOperandsDescriptionCycles Status Affected MOVFf, dMove f1Z MOVWFfMove W to f1 SWAPFf, dSwap nibbles in f1 MOVLWkMove literal to W1 Dr. Gheith Abandah13
Control Operations MnemonicOperandsDescriptionCycles Status Affected DECFSZf, dDecrement f, Skip if 01 (2) INCFSZf, dIncrement f, Skip if 01 (2) BTFSCf, bBit Test f, Skip if Clear1 (2) BTFSSf, bBit Test f, Skip if Set1 (2) CALLkCall subroutine2 GOTOkGo to address2 RETFIE-Return from interrupt2 RETLWkReturn with literal in W2 RETURN-Return from Subroutine2 Dr. Gheith Abandah14
Miscellaneous Operations MnemonicOperandsDescriptionCycles Status Affected CLRFfClear f1Z CLRW-Clear W1Z NOP-No Operation1 RLFf, dRotate Left f through Carry1C RRFf, d Rotate Right f through Carry 1C BCFf, bBit Clear f1 BSFf, bBit Set f1 CLRWDT-Clear Watchdog Timer1TO',PD' SLEEP-Go into standby mode1TO',PD' Dr. Gheith Abandah15
Assembler Format Dr. Gheith Abandah16
Assembler Directives Assembler directive Summary of action listImplement a listing option #includeInclude additional source file orgSet program origin equ Define an assembly constant; this allows us to assign a value to a label endEnd program block Dr. Gheith Abandah17
Number Representation in MPASM RadixExample DecimalD255 HexadecimalH8d or 0x8d OctalO574 BinaryB ASCIIG or AG Dr. Gheith Abandah18
Example: move push button to LED Dr. Gheith Abandah19
Example – Page 1 ;*************************************************** ;ELECTRONIC PING-PONG DATA MOVE ;This program moves push button switch values from ;Port A to the leds on Port B ;TJW Tested ;*************************************************** ; ;Configuration Word: WDT off, power-up timer on, ; code protect off, RC oscillator ; list p=16F84A Dr. Gheith Abandah20
Example – Page 2 ; ;specify SFRs status equ 03 porta equ 05 trisa equ 05 portb equ 06 trisb equ 06 ; Dr. Gheith Abandah21
Example – Page 3 ; org 00 ;Initialise start bsf status,5 ;select memory bank 1 movlw B movwf trisa ;set port A direction movlw 00 movwf trisb ;all port B bits output bcf status,5 ;select bank 0 Dr. Gheith Abandah22
Example – Page 4 ; ;The "main" program starts here clrf porta ;clear all bits in ports A loop movf porta,0 ;move port A to W register movwf portb ;move W register to port B goto loop end Dr. Gheith Abandah23
Summary Assembler is a programming language that is part of the toolset used in embedded systems programming. It comes with its own distinct set of rules and techniques. It is essential to adopt and learn an IDE when developing programs. The MPLAB IDE is an excellent tool for PIC microcontrollers, both for learners and professionals. And it cant be beaten on price! While some people are eager to get programs into the hardware immediately, it is extremely useful to learn the features of a simulator. The simulator in MPLAB allows the user to test program features with great speed, and is an invaluable learning tool. Dr. Gheith Abandah24