PIC MICROCONTROLLER Rodolfo Rodriguez Kevin Zhang MJ Gellada 1 Overview • • • • • Microcontroller and Architecture Basics Variants among families ISA Programming overview Hardware interface/Developmental boards 2 Description • PIC – “Peripheral Interface Controller” • Made by Microchip Technology • Most popular by industry developers and hobbyists – Low cost (cents to dollars) – Availability – Extensive application notes – Serial programming 3 v http://www.microchip.com/stellent/images/mchpsiteimages/en537986.jpg 4 8-bit Core Architecture • Harvard (separate code and data space) • RISC • One accumulator – W Register • Small addressable data space (256 bytes) – Banking • RAM http://www.microchip.com/_images/BaselineArch_large.jpg – PC, special purpose registers 5 Advantages & Limitations to 8-bit Architecture • • • • • • Small ISA to learn Built in oscillator with selectable speeds Development made easy Inexpensive Device variants Wide range of interfaces (I2C, SPI, etc.) • One accumulator • Bank switching • Hardware call stack unaddressable (no multi-tasking) 6 16-bit and 32-bit Architecture • • • • • More working registers No bank switching Assignable interrupt vector table More flash memory Cache (32-bit architecture) 7 Application Notes • Very extensive – 16758 items • Description of documentation • PDF documenation • Source code http://www.microchip.com/TechDoc.aspx?type=appnotes http://www.microchip.com/TechDoc.aspx?type=appnotes 8 Baseline Architecture Mid-Range Architecture Enhanced Mid-Range Architecture PIC18 Architecture Pin Count 6-40 8-64 8-64 Interrupts No Single interrupt capability Single interrupt Multiple interrupt capability capability with with hardware context save hardware context save Performance 5 MIPS 5 MIPS 8 MIPS Up to 16 MIPS Instructions 33, 12-bit 35, 14-bit 49, 14-bit 83, 16-bit Program Memory Up to 3 KB Up to 14 KB Up to 28 KB Up to 128 KB Data Memory Up to 138 Bytes Up to 368 Bytes Up to 1.5 KB Up to 4 KB Features •Comparator •8-bit ADC •Data Memory •Internal Oscillator In addition to Baseline: •SPI/I²C™ •UART •PWMs •LCD •10-bit ADC •Op Amp In addition to Mid-Range: •Multiple Communication Peripherals •Linear Programming Space •PWMs with Independent Time Base In addition to Enhanced Mid-Range: •8x8 Hardware Multiplier •CAN •CTMU •USB •Ethernet •12-bit ADC Families PIC10, PIC12, PIC16 PIC12, PIC16 PIC12FXXX, PIC16F1XX PIC18 8-bit architecture 18-100 INSTRUCTION PIC16 ISA: 35 Instructions, 14-bit Data Transfer Instructions INSTRUCTION MOVLW k MOVWF f MOVF f,d DESCRIPTION OPERATION Move constant to W k -> w Move W to f Move f to d W -> f f -> d DESCRIPTION OPERATION MOVLW k Move constant to W k -> w MOVWF f Move W to f W -> f MOVF f,d Move f to d f -> d CLRW Clear W 0 -> W CLRF f Clear f 0 -> f SWAPF f,d Swap nibbles in f f(7:4),(3:0) -> f(3:0),(7:4) ADDLW k Add W and constant W+k -> W ADDWF f,d Add W and f W+f -> d SUBLW k Subtract W from constant k-W -> W SUBWF f,d Subtract W from f f-W -> d ANDLW k Logical AND with W with constant W AND k -> W ANDWF f,d Logical AND with W with f W AND f -> d ANDWF f,d Logical AND with W with f W AND f -> d IORLW k Logical OR with W with constant W OR k -> W IORWF f,d Logical OR with W with f W OR f -> d XORWF f,d Logical exclusive OR with W with constant W XOR k -> W XORLW k Logical exclusive OR with W with f W XOR f -> d INCF f,d Increment f by 1 f+1 -> f DECF f,d Decrement f by 1 f-1 -> f RLF f,d Rotate left f through CARRY bit RRF f,d Rotate right f through CARRY bit COMF f,d Complement f f -> d BCF f,b Clear bit b in f 0 -> f(b) BSF f,b Clear bit b in f 1 -> f(b) BTFSC f,b Test bit b of f. Skip the following instruction if clear. Skip if f(b) = 0 BTFSS f,b Test bit b of f. Skip the following instruction if set. Skip if f(b) = 1 DECFSZ f,d Decrement f. Skip the following instruction if clear. f-1 -> d skip if Z = 1 INCFSZ f,d Increment f. Skip the following instruction if set. f+1 -> d skip if Z = 0 GOTO k Go to address k -> PC CALL k Call subroutine PC -> TOS, k -> PC RETURN Return from subroutine TOS -> PC RETLW k Return with constant in W k -> W, TOS -> PC RETFIE Return from interrupt TOS -> PC, 1 -> GIE NOP No operation TOS -> PC, 1 -> GIE CLRWDT Clear watchdog timer 0 -> WDT, 1 -> TO, 1 -> PD Data Transfer Instructions Arithmetic-logic Instructions Bit-oriented Instructions Program Control Instructions CLRW Clear W 0 -> W CLRF f Clear f 0 -> f SWAPF f,d Swap nibbles in f f(7:4),(3:0) -> f(3:0),(7:4) W: Working register(Accumulator) Registers: Memory locations Other instructions SLEEP Go into sleep mode 0 -> WDT, 1 -> TO, 0 -> PD INSTRUCTION DESCRIPTION OPERATION MOVLW k Move constant to W k -> w MOVWF f Move W to f W -> f MOVF f,d Move f to d f -> d CLRW Clear W 0 -> W CLRF f Clear f 0 -> f SWAPF f,d Swap nibbles in f f(7:4),(3:0) -> f(3:0),(7:4) ADDLW k Add W and constant W+k -> W ADDWF f,d Add W and f W+f -> d SUBLW k Subtract W from constant k-W -> W SUBWF f,d Subtract W from f f-W -> d ANDLW k Logical AND with W with constant W AND k -> W ANDWF f,d Logical AND with W with f W AND f -> d ANDWF f,d Logical AND with W with f W AND f -> d IORLW k Logical OR with W with constant W OR k -> W IORWF f,d Logical OR with W with f W OR f -> d XORWF f,d Logical exclusive OR with W with constant W XOR k -> W XORLW k Logical exclusive OR with W with f W XOR f -> d INCF f,d Increment f by 1 f+1 -> f DECF f,d Decrement f by 1 f-1 -> f RLF f,d Rotate left f through CARRY bit RRF f,d Rotate right f through CARRY bit COMF f,d Complement f f -> d BCF f,b Clear bit b in f 0 -> f(b) BSF f,b Clear bit b in f 1 -> f(b) BTFSC f,b Test bit b of f. Skip the following instruction if clear. Skip if f(b) = 0 BTFSS f,b Test bit b of f. Skip the following instruction if set. Skip if f(b) = 1 DECFSZ f,d Decrement f. Skip the following instruction if clear. f-1 -> d skip if Z = 1 INCFSZ f,d Increment f. Skip the following instruction if set. f+1 -> d skip if Z = 0 GOTO k Go to address k -> PC CALL k Call subroutine PC -> TOS, k -> PC RETURN Return from subroutine TOS -> PC RETLW k Return with constant in W k -> W, TOS -> PC RETFIE Return from interrupt TOS -> PC, 1 -> GIE NOP No operation TOS -> PC, 1 -> GIE CLRWDT Clear watchdog timer 0 -> WDT, 1 -> TO, 1 -> PD Data Transfer Instructions Arithmetic-logic Instructions (partial) ADDLW k ADDWF f,d INCF f,d DECF f,d RLF f,d RRF f,d Add W and constant Add W and f Increment f by 1 Decrement f by 1 W+k -> W W+f -> d f+1 -> f f-1 -> f Rotate left f through CARRY bit Rotate right f through CARRY bit Arithmetic-logic Instructions Bit-oriented Instructions Program Control Instructions COMF f,d Complement f SUBLW, SUBWF ANDLW, ANDWF IORLW, IORWF XORLW, XORWF f -> d Other instructions SLEEP Go into sleep mode 0 -> WDT, 1 -> TO, 0 -> PD INSTRUCTION DESCRIPTION OPERATION MOVLW k Move constant to W k -> w MOVWF f Move W to f W -> f MOVF f,d Move f to d f -> d CLRW Clear W 0 -> W CLRF f Clear f 0 -> f SWAPF f,d Swap nibbles in f f(7:4),(3:0) -> f(3:0),(7:4) ADDLW k Add W and constant W+k -> W ADDWF f,d Add W and f W+f -> d SUBLW k Subtract W from constant k-W -> W SUBWF f,d Subtract W from f f-W -> d ANDLW k Logical AND with W with constant W AND k -> W ANDWF f,d Logical AND with W with f W AND f -> d ANDWF f,d Logical AND with W with f W AND f -> d IORLW k Logical OR with W with constant W OR k -> W IORWF f,d Logical OR with W with f W OR f -> d XORWF f,d Logical exclusive OR with W with constant W XOR k -> W XORLW k Logical exclusive OR with W with f W XOR f -> d INCF f,d Increment f by 1 f+1 -> f DECF f,d Decrement f by 1 f-1 -> f RLF f,d Rotate left f through CARRY bit RRF f,d Rotate right f through CARRY bit COMF f,d Complement f f -> d BCF f,b Clear bit b in f 0 -> f(b) BSF f,b Clear bit b in f 1 -> f(b) BTFSC f,b Test bit b of f. Skip the following instruction if clear. Skip if f(b) = 0 BTFSS f,b Test bit b of f. Skip the following instruction if set. Skip if f(b) = 1 DECFSZ f,d Decrement f. Skip the following instruction if clear. f-1 -> d skip if Z = 1 INCFSZ f,d Increment f. Skip the following instruction if set. f+1 -> d skip if Z = 0 GOTO k Go to address k -> PC CALL k Call subroutine PC -> TOS, k -> PC RETURN Return from subroutine TOS -> PC RETLW k Return with constant in W k -> W, TOS -> PC RETFIE Return from interrupt TOS -> PC, 1 -> GIE NOP No operation TOS -> PC, 1 -> GIE CLRWDT Clear watchdog timer 0 -> WDT, 1 -> TO, 1 -> PD Data Transfer Instructions Program Control Instructions BTFSC f,b BTFSS f,b DECFSZ f,d INCFSZ f,d GOTO k CALL k RETURN RETLW k RETFIE Test bit b of f. Skip the following instruction if clear. Test bit b of f. Skip the following instruction if set. Decrement f. Skip the following instruction if clear. Increment f. Skip the following instruction if set. Go to address Call subroutine Return from subroutine Return with constant in W Return from interrupt Arithmetic-logic Instructions Skip if f(b) = 0 Skip if f(b) = 1 f-1 -> d skip if Z = 1 f+1 -> d skip if Z = 0 Bit-oriented Instructions k -> PC Program Control Instructions PC -> TOS, k -> PC TOS -> PC k -> W, TOS -> PC TOS -> PC, 1 -> GIE Other instructions SLEEP Go into sleep mode 0 -> WDT, 1 -> TO, 0 -> PD INSTRUCTION DESCRIPTION OPERATION MOVLW k Move constant to W k -> w MOVWF f Move W to f W -> f MOVF f,d Move f to d f -> d CLRW Clear W 0 -> W CLRF f Clear f 0 -> f SWAPF f,d Swap nibbles in f f(7:4),(3:0) -> f(3:0),(7:4) ADDLW k Add W and constant W+k -> W ADDWF f,d Add W and f W+f -> d SUBLW k Subtract W from constant k-W -> W Bit-oriented Instructions SUBWF f,d Subtract W from f f-W -> d ANDLW k Logical AND with W with constant W AND k -> W BCF f,b Clear bit b in f 0 -> f(b) ANDWF f,d Logical AND with W with f W AND f -> d ANDWF f,d Logical AND with W with f W AND f -> d BSF f,b Set bit b in f 1 -> f(b) IORLW k Logical OR with W with constant W OR k -> W IORWF f,d Logical OR with W with f W OR f -> d XORWF f,d Logical exclusive OR with W with constant W XOR k -> W XORLW k Logical exclusive OR with W with f W XOR f -> d INCF f,d Increment f by 1 f+1 -> f DECF f,d Decrement f by 1 f-1 -> f RLF f,d Rotate left f through CARRY bit RRF f,d Rotate right f through CARRY bit COMF f,d Complement f f -> d BCF f,b Clear bit b in f 0 -> f(b) BSF f,b Clear bit b in f 1 -> f(b) BTFSC f,b Test bit b of f. Skip the following instruction if clear. Skip if f(b) = 0 BTFSS f,b Test bit b of f. Skip the following instruction if set. Skip if f(b) = 1 DECFSZ f,d Decrement f. Skip the following instruction if clear. f-1 -> d skip if Z = 1 INCFSZ f,d Increment f. Skip the following instruction if set. f+1 -> d skip if Z = 0 GOTO k Go to address k -> PC CALL k Call subroutine PC -> TOS, k -> PC RETURN Return from subroutine TOS -> PC RETLW k Return with constant in W k -> W, TOS -> PC RETFIE Return from interrupt TOS -> PC, 1 -> GIE NOP No operation TOS -> PC, 1 -> GIE CLRWDT Clear watchdog timer 0 -> WDT, 1 -> TO, 1 -> PD Data Transfer Instructions Arithmetic-logic Instructions Other instructions NOP CLRWDT SLEEP No operation Clear watchdog timer Go into sleep mode TOS -> PC, 1 -> GIE 0 -> WDT, 1 -> TO, 1 -> PD 0 -> WDT, 1 -> TO, 0 -> PD Bit-oriented Instructions Program Control Instructions Other instructions SLEEP Go into sleep mode 0 -> WDT, 1 -> TO, 0 -> PD PIC 16F887 layout Analog I/O PORTA I2C UART http://www.mikroe.com/eng/chapters/view/74/pic-basic-book-chapter-1world-of-microcontrollers/ 14 Programming a PIC • Microchip provides the free MPLAB: – – – – – Assembler and linker Application development Hardware emulation Debugging C or assembly compatible • Compiler http://www.microchip.com/pagehandler/ en-us/family/mplabx/ – Can be C-based or Basic – A free one is the CCS C Compiler for PIC12/24/26/18 (not compatible with all PICS) or the HI-TECH PICC-Lit 15 Programming Tools • Basic based environments are available, but don’t offer the functionality of C • Third party IDE’s might be preferred due to an enhanced software library or debugging tools http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dD ocName=en019469&part=SW007002 16 Device Programmer • Need device to store machine code into PIC’s memory (EEPROM or Flash) • Can be external device, but ICSP is easier: – Don’t have to remove chip from its circuit – Provides interface between computer (USB) and PIC – Specific to circuit (due to interconnect scheme and surrounding circuit) – Communication protocol requires 5 signals http://en.wikipedia.org/wiki/PIC_microcontroller 17 Device Programmer Five Signals: • Vpp (programming voltage) • Vdd (power) • Vss (ground) • IC SPCLK (clock) • IC SPDAT (data) http://en.wikipedia.org/wiki/PIC_microcontroller 18 Necessary Connections (PIC16F877A) • PIC can be bread-boarded, with the following important connections: – Power – Ground – Reset signal – Crystal (oscillator) http://www.mikroe.com/eng/chapters/view/74/pic-basic-book-chapter-1-world-ofmicrocontrollers/ 19 LED example: code //LED example program written for //PIC programming tutorial. From //(http://seniord.ece.iastate.edu/dec0604/index_files/tutorialDec0604.pdf) //standard include files #include <stdlib.h> #include <pic.h> #include “delay.h” //main function void main() { PORTA = 0x00; //set RA0-RA5 low TRISA = 0x00; //set PORTA to output //superloop while(1) { PORTA = ~PORTA; DelayMs(250); } } 20 Development Boards • Prepackaged boards come with a multitude of peripherals for development and debugging: – – – – – Programmer User I/O: buttons, port pinouts, LED’s Displays: LCD and seven segment Power Serial connection interface 21 Easy PIC v7 from MikroElectronika USB Port Programmer PIC Power Supply LEDs and buttons Port Pinouts http://www.mikroe.com/eng/chapters/view/74/pic-basic-book-chapter-1world-of-microcontrollers/ 22 Additional Peripherals Touch Screen ADC converter 23 Questions? 24 References • http://www.microchip.com/ • http://en.wikipedia.org/wiki/PIC_microcontroller • http://www.mikroe.com/eng/chapters/view/10/c hapter-9-instruction-set/ • http://www.mikroe.com/eng/chapters/view/74/ pic-basic-book-chapter-1-world-ofmicrocontrollers/ • http://www.slideshare.net/element14/microchip s-16bit-and-32bit-pic-mcus-7267006 • http://www.ladyada.net/library/picvsavr.html 25