Академический Документы
Профессиональный Документы
Культура Документы
FAMILIA
PIC16F87X
Computer on a chip
PIC10 Architecture
PIC16 Architecture
PIC18 Architecture
MEMORY CPU
I/O
Semiconductor memory
Random-access memory (RAM): Read/write Read-only memory (ROM): can only be read but not written to by the processor
Random-access memory Dynamic random-access memory (DRAM): need periodic refresh Static random-access memory (SRAM): no periodic refresh is required
Read-only memory Mask-programmed read-only memory (MROM): programmed when being manufactured Programmable read-only memory (PROM): can be programmed by the end user
Semiconductor memory
Erasable programmable ROM (EPROM) 1. electrically programmable many times 2. erased by ultraviolet light (through a window) 3. erasable in bulk (whole chip in one erasure operation) Electrically erasable programmable ROM (EEPROM) 1. electrically programmable many times 2. electrically erasable many times 3. can be erased one location, one row, or whole chip in one operation Flash memory 1. electrically programmable many times 2. electrically erasable many times 3. can only be erased in bulk (either a block or the whole chip)
Harvard Architecture
Separation of data memory and program memory makes possible the simultaneous access of data and instruction. - Data memory are used as general-purpose registers or special function registers - On-chip Data EEPROM are provided in some PIC18 MCUs
Instruction subcycles
Q1.
instruction decod. subcycle Q2. read data subcycle Q3. process subcycle Q4. write data subcycle
clock diagram
10
oscilator configuration
11
12
2-Word instructions
- The standard PIC18 instruction set has four two-word instructions: CALL, MOVFF, GOTO and LSFR. - In all cases, the second word of the instructions always has 1111 as its four Most Significant bits - If the instruction is executed in proper sequence, immediately after the first word, the data in the second word is accessed and used by the instruction sequence. If the first word is skipped for some reason and the second word is executed by itself, a NOP is executed instead
13
Banked RAM
- Most instructions use 8 bits to specify a data register (f field). - Eight bits can specify only 256 registers. This limitation forces the PIC18 to divide data registers into banks. - Only one bank is active at a time. When operating on a data register in a different bank, bank switching is needed. The active bank is specified by the BSR register. - Bank switching incurs overhead and may cause program errors. - Access bank is created to minimize the problems of bank switching. - Access bank consists of the lowest 96 bytes in general-purpose registers and the highest 160 bytes of special function registers. - When operands are in the access bank, no bank switching is needed.
Banked RAM
BSR<3:0> = 0000 Access RAM Bank 0 GPRs GPRs
1FFh 200h 000h 05Fh 060h 0FFh 100h
= 0001
Bank 1
= 0010
Bank 2
GPRs
2FFh 300h Access Bank Access RAM low 3FFh 400h Access RAM high SFRs 000h 05Fh 060h 0FFh
= 0011
Bank 3
GPRs
GPRs
DFFh E00h
Bank 14
GPRs Unused
EFFh F00h F5Fh F60h FFFh
= 1111
Bank 15 SFRs
Note. 1. BSR is the 4-bit bank select register. Figure 1.4 Data memory map for PIC18 devices (redraw with permission of Microchip)
14
Access bank
movwf f ,a When 'a' = 0: The BSR is ignored and the Access Bank is used. The first 96 bytes are general purpose RAM (from Bank 0). The remaining 160 bytes are Special Function Registers (from Bank 15). When 'a' = 1: The BSR specifies the bank used by the instruction
15
1. addwf 2. subwf
0x20,F,A
; add the data register at 0x20 in access bank with WREG ; register and store the sum in 0x20.
3. addwf
0x40,W,A
; add the WREG register with data register at 0x40 in ; access bank and leaves the sum in WREG.
( A = 0, BANKED = 1, W = 0, F = 1)
16
Status register
17
- Direct: specifies source and/or destination address - Indirect: Access a location without giving a fixed address in the instruction. Use FSR as pointers.
ADDWF f, d, a
The destination of the operations results is determined by the destination bit d. d = 1, the results are stored back in the source register, overwriting its original contents. d = 0, the results are stored in the W register. Instructions without the d argument have a destination that is implicit in the instruction
18
Indirect addressing
19
Fundamentals of assembler
20
Assembler directives
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
#include <include_file> #include <p18f2525.inc> This directive includes additional source file. 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. [<label>] org <expr> Reset ORG 0000h This directive sets the program origin for subsequent code at the address defined in <expr>.
21
22
Instruction Format
- Format for byte oriented instructions
15 opcode
10
9 d
8 a
7 f
d = 0 for result destination to be WREG register. d = 1 for result destination to be file register (f) a = 0 to force Access Bank a = 1 for BSR to select bank f = 8-bit file register address Figure 1.8 Byte-oriented file register operations (redraw with permission of Microchip)
23
Instruction Format
Byte-to-byte Operations
15 opcode 15 1111 12 11 f (destination file register) 12 11 f (source file register) 0 0
f = 12-bit file register address Figure 1.9 Byte to byte move operations (2 words) (redraw with permission of Microchip)
b = 3-bit position of bit in the file register (f). a = 0 to force Access Bank a = 1 for BSR to select bank f = 8-bit file register address Figure 1.10 Bit-oriented file register operations (redraw with permission of Microchip)
Instruction Format
Literal operations - A literal is a number to be operated on directly by the CPU
15 opcode k = 8-bit immediate value Figure 1.11 Literal operations (redraw with permission of Microchip) 8 7 k 0
Control operations - These instructions are used to change the program execution sequence and making subroutine calls.
24
Instruction Format
15 opcode 15 1111 n = 20-bit immediate value 15 opcode 15 1111 S = fast bit 15 opcode 15 opcode 8 7 n<7:0> (literal) 11 10 n<10:0> (literal) 0 BC label 0 BRA label 8 S 8 7 n<19:8> (literal) 7 n<7:0> (literal) 0 CALL funct_name 0 8 7 n<19:8> (literal) 8 7 n<7:0> (literal) 0 GOTO label 0
Instruction Set
25
Instruction Set
Instruction Set
26
Assembler instructions
f/W distinction
Accumulator architecture.
;Move NUM2 to W
;NUM1 = NUM1 + W
27
Case issue
- The PIC18 instructions can be written in either uppercase or lowercase. - MPASM allows the user to include p18Fxxxx.inc file to provide register definitions for the specific processor. - All special function registers and bits are defined in uppercase. - The convention followed in this text is: using lowercase for instructions and directives, using uppercase for special function registers.
0x0000 ; program starting address after power on reset start 0x08 ; isr code here ; high-priority interrupt service routine 0x18
; isr code here
28
29
cpfseq cpfsgt cpfslt decfsz dcfsnz incfsz infsnz tstfsz btfsc btfss
f,a f,a f,a f,d,a f,d,a f,d,a f,d,a f,a f,b,a f,b,a
; compare register f with WREG, skip if equal ; compare register f with WREG, skip if greater than ; compare register f with WREG, skip if less than ; decrement f, skip if 0 ; decrement f, skip if not 0 ; increment f, skip if 0 ; increment f, skip if not 0 ; test f, skip if 0 ; test bit b of register f, skip if 0 ; test bit b of register f, skip if 1
btfsc STATUS,Z goto Zset Zclear ... goto Zdone Zset Zdone ... ...
; flag Z test
30
Loops. Example1
Example 1 i_cnt i_loop equ clrf movlw cpfseq goto PRODL ; use PRODL as loop count i_cnt,A ; i_cnt is incremented in the loop n i_cnt,A ; compare i_cnt with WREG and skip if equal i_loop ; executed when i_cnt loop limit
Loops. Example2
20 0x10 n lp_cnt
; prepare to repeat the loop for n times ; program loop ; lp_cnt,F,A ; decrement lp_cnt and skip if equal to 0 loop ; executed if lp_cnt 0
31
equ equ equ movlw movwf movlw movwf movlw movwf nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop decfsz goto decfsz goto decfsz goto
; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle ; 1 instruction cycle lp_cnt2,F,A ; 1 instruction cycle (2 when [lp_cnt1] = 0) loop2 ; 2 instruction cycle lp_cnt1,F,A loop1 lp_cnt0,F,A loop0 ; 1 sec delay. (assume instruction clock period is 100ns, fOSC = 40 MHz):
32