31029A.frm Manual
User Manual:
Open the PDF directly: View PDF
.
Page Count: 48
| Download | |
| Open PDF In Browser | View PDF |
M Section 29. Instruction Set HIGHLIGHTS This section of the manual contains the following major topics: 29.1 29.2 29.3 29.4 29.5 29.6 29.7 29.8 Introduction ..................................................................................................................29-2 Instruction Formats ......................................................................................................29-4 Special Function Registers as Source/Destination ......................................................29-6 Q Cycle Activity............................................................................................................29-7 Instruction Descriptions................................................................................................29-8 Design Tips ................................................................................................................29-45 Related Application Notes..........................................................................................29-47 Revision History .........................................................................................................29-48 29 Instruction Set 1997 Microchip Technology Inc. DS31029A page 29-1 PICmicro MID-RANGE MCU FAMILY 29.1 Introduction Each midrange instruction is a 14-bit word divided into an OPCODE which specifies the instruction type and one or more operands which further specify the operation of the instruction. The midrange Instruction Set Summary in Table 29-1 lists the instructions recognized by the MPASM assembler. The instruction set is highly orthogonal and is grouped into three basic categories: • Byte-oriented operations • Bit-oriented operations • Literal and control operations Table 29-2 gives the opcode field descriptions. For byte-oriented instructions, 'f' represents a file register designator and 'd' represents a destination designator. The file register designator specifies which file register is to be used by the instruction. The destination designator specifies where the result of the operation is to be placed. If 'd' is zero, the result is placed in the W register. If 'd' is one, the result is placed in the file register specified in the instruction. For bit-oriented instructions, 'b' represents a bit field designator which selects the number of the bit affected by the operation, while 'f' represents the number of the file in which the bit is located. For literal and control operations, 'k' represents an eight or eleven bit constant or literal value. All instructions are executed in one single instruction cycle, unless a conditional test is true or the program counter is changed as a result of an instruction. In these cases, the execution takes two instruction cycles with the second cycle executed as an NOP. One instruction cycle consists of four oscillator periods. Thus, for an oscillator frequency of 4 MHz, the normal instruction execution time is 1 µs. If a conditional test is true or the program counter is changed as a result of an instruction, the instruction execution time is 2 µs. DS31029A-page 29-2 1997 Microchip Technology Inc. Section 29. Instruction Set Table 29-1: Midrange Instruction Set Mnemonic, Operands 14-Bit Instruction Word Description Cycles MSb LSb Status Affected Notes 1997 Microchip Technology Inc. DS31029A-page 29-3 29 Instruction Set BYTE-ORIENTED FILE REGISTER OPERATIONS 1,2 00 0111 dfff ffff C,DC,Z 1 f, d Add W and f ADDWF 1,2 00 0101 dfff ffff Z 1 f, d AND W with f ANDWF 2 00 0001 lfff ffff Z 1 Clear f f CLRF 00 0001 0xxx xxxx Z 1 Clear W CLRW 1,2 00 1001 dfff ffff Z 1 f, d Complement f COMF 1,2 00 0011 dfff ffff Z 1 f, d Decrement f DECF 1,2,3 00 1011 dfff ffff 1(2) f, d Decrement f, Skip if 0 DECFSZ 1,2 00 1010 dfff ffff Z 1 f, d Increment f INCF 1,2,3 00 1111 dfff ffff 1(2) f, d Increment f, Skip if 0 INCFSZ 1,2 00 0100 dfff ffff Z 1 f, d Inclusive OR W with f IORWF 1,2 00 1000 dfff ffff Z 1 f, d Move f MOVF 00 0000 lfff ffff 1 Move W to f f MOVWF 00 0000 0xx0 0000 1 No Operation NOP 1,2 00 1101 dfff ffff C 1 f, d Rotate Left f through Carry RLF 1,2 00 1100 dfff ffff C 1 f, d Rotate Right f through Carry RRF 1,2 00 0010 dfff ffff C,DC,Z 1 f, d Subtract W from f SUBWF 1,2 00 1110 dfff ffff 1 f, d Swap nibbles in f SWAPF 1,2 00 0110 dfff ffff Z 1 f, d Exclusive OR W with f XORWF BIT-ORIENTED FILE REGISTER OPERATIONS 1,2 01 00bb bfff ffff 1 f, b Bit Clear f BCF 1,2 01 01bb bfff ffff 1 f, b Bit Set f BSF 3 01 10bb bfff ffff 1 (2) f, b Bit Test f, Skip if Clear BTFSC 3 01 11bb bfff ffff 1 (2) f, b Bit Test f, Skip if Set BTFSS LITERAL AND CONTROL OPERATIONS 11 111x kkkk kkkk C,DC,Z 1 Add literal and W k ADDLW 11 1001 kkkk kkkk Z 1 AND literal with W k ANDLW 10 0kkk kkkk kkkk 2 Call subroutine k CALL 00 0000 0110 0100 TO,PD 1 Clear Watchdog Timer CLRWDT 10 1kkk kkkk kkkk 2 Go to address k GOTO 11 1000 kkkk kkkk Z 1 Inclusive OR literal with W k IORLW 11 00xx kkkk kkkk 1 Move literal to W k MOVLW 00 0000 0000 1001 2 Return from interrupt RETFIE 11 01xx kkkk kkkk 2 Return with literal in W k RETLW 00 0000 0000 1000 2 Return from Subroutine RETURN 00 0000 0110 0011 TO,PD 1 Go into standby mode SLEEP 11 110x kkkk kkkk C,DC,Z 1 Subtract W from literal k SUBLW 11 1010 kkkk kkkk Z 1 Exclusive OR literal with W k XORLW Note 1: When an I/O register is modified as a function of itself (e.g., MOVF PORTB, 1), the value used will be that value present on the pins themselves. For example, if the data latch is '1' for a pin configured as input and is driven low by an external device, the data will be written back with a '0'. 2: If this instruction is executed on the TMR0 register (and, where applicable, d = 1), the prescaler will be cleared if assigned to the Timer0 Module. 3: If Program Counter (PC) is modified or a conditional test is true, the instruction requires two cycles. The second cycle is executed as a NOP. PICmicro MID-RANGE MCU FAMILY 29.2 Instruction Formats Figure 29-1 shows the three general formats that the instructions can have. As can be seen from the general format of the instructions, the opcode portion of the instruction word varies from 3-bits to 6-bits of information. This is what allows the midrange instruction set to have 35 instructions. Note 1: Any unused opcode is Reserved. Use of any reserved opcode may cause unexpected operation. Note 2: To maintain upward compatibility with future midrange products, do not use the OPTION and TRIS instructions. All instruction examples use the following format to represent a hexadecimal number: 0xhh where h signifies a hexadecimal digit. To represent a binary number: 00000100b where b is a binary string identifier. Figure 29-1: General Format for Instructions Byte-oriented file register operations 13 8 OPCODE 7 d 6 0 f (FILE #) d = 0 for destination W d = 1 for destination f f = 7-bit file register address Bit-oriented file register operations 13 10 9 7 6 OPCODE b (BIT #) 0 f (FILE #) b = 3-bit bit address f = 7-bit file register address Literal and control operations General 13 8 7 OPCODE 0 k (literal) k = 8-bit literal (immediate) value CALL and GOTO instructions only 13 11 OPCODE 10 0 k (literal) k = 11-bit literal (immediate) value DS31029A-page 29-4 1997 Microchip Technology Inc. Section 29. Instruction Set Table 29-2: Instruction Description Conventions Field Description Register file address (0x00 to 0x7F) Working register (accumulator) Bit address within an 8-bit file register (0 to 7) Literal field, constant data or label (may be either an 8-bit or an 11-bit value) 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. d Destination select; d = 0: store result in W, d = 1: store result in file register f. dest Destination either the W register or the specified register file location label Label name TOS Top of Stack PC Program Counter PCLATH Program Counter High Latch GIE Global Interrupt Enable bit WDT Watchdog Timer TO Time-out bit PD Power-down bit [ ] Optional ( ) Contents → Assigned to <> Register bit field ∈ In the set of italics User defined term (font is courier) f W b k x 29 Instruction Set 1997 Microchip Technology Inc. DS31029A-page 29-5 PICmicro MID-RANGE MCU FAMILY 29.3 Special Function Registers as Source/Destination The Section 29. Instruction Set’s orthogonal instruction set allows read and write of all file registers, including special function registers. Some special situations the user should be aware of are explained in the following subsections: 29.3.1 STATUS Register as Destination If an instruction writes to the STATUS register, the Z, C, DC and OV bits may be set or cleared as a result of the instruction and overwrite the original data bits written. For example, executing CLRF STATUS will clear register STATUS, and then set the Z bit leaving 0000 0100b in the register. 29.3.2 PCL as Source or Destination Read, write or read-modify-write on PCL may have the following results: Read PC: PCL → dest; Write PCL: PCLATH → PCH; 8-bit destination value → PCL Read-Modify-Write: PCL→ ALU operand PCLATH → PCH; 8-bit result → PCL PCLATH does not change; Where PCH = program counter high byte (not an addressable register), PCLATH = Program counter high holding latch, dest = destination, W register or register file f. 29.3.3 Bit Manipulation All bit manipulation instructions will first read the entire register, operate on the selected bit and then write the result back (read-modify-write (R-M-W)) the specified register. The user should keep this in mind when operating on some special function registers, such as ports. Note: DS31029A-page 29-6 Status bits that are manipulated by the device (including the interrupt flag bits) are set or cleared in the Q1 cycle. So there is no issue with executing R-M-W instructions on registers which contain these bits. 1997 Microchip Technology Inc. Section 29. Instruction Set 29.4 Q Cycle Activity Each instruction cycle (Tcy) is comprised of four Q cycles (Q1-Q4). The Q cycle is the same as the device oscillator cycle (TOSC). The Q cycles provide the timing/designation for the Decode, Read, Process Data, Write etc., of each instruction cycle. The following diagram shows the relationship of the Q cycles to the instruction cycle. The four Q cycles that make up an instruction cycle (Tcy) can be generalized as: Q1: Instruction Decode Cycle or forced No Operation Q2: Instruction Read Cycle or No Operation Q3: Process the Data Q4: Instruction Write Cycle or No Operation Each instruction will show the detailed Q cycle operation for the instruction. Figure 29-2: Q Cycle Activity Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Tosc Tcy1 Tcy2 Tcy3 29 Instruction Set 1997 Microchip Technology Inc. DS31029A-page 29-7 PICmicro MID-RANGE MCU FAMILY 29.5 Instruction Descriptions ADDLW Add Literal and W Syntax: [ label ] ADDLW Operands: 0 ≤ k ≤ 255 Operation: (W) + k → W Status Affected: C, DC, Z Encoding: 11 111x k kkkk kkkk Description: The contents of the W register are added to the eight bit literal 'k' and the result is placed in the W register. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example1 Q3 Read literal 'k' ADDLW Process data Q4 Write to W register 0x15 Before Instruction W = 0x10 After Instruction W Example 2 ADDLW = 0x25 MYREG Before Instruction W = 0x10 Address of MYREG † = 0x37 † MYREG is a symbol for a data memory location After Instruction W Example 3 ADDLW = 0x47 HIGH (LU_TABLE) Before Instruction W = 0x10 Address of LU_TABLE † = 0x9375 † LU_TABLE is a label for an address in program memory After Instruction W Example 4 ADDLW = 0xA3 MYREG Before Instruction W = 0x10 Address of PCL † = 0x02 † PCL is the symbol for the Program Counter low byte location After Instruction W DS31029A-page 29-8 = 0x12 1997 Microchip Technology Inc. Section 29. Instruction Set ADDWF Add W and f Syntax: [ label ] ADDWF Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (W) + (f) → destination Status Affected: C, DC, Z Encoding: 00 f,d 0111 dfff ffff Description: Add the contents of the W register with register 'f'. If 'd' is 0 the result is stored in the W register. If 'd' is 1 the result is stored back in register 'f'. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' ADDWF Q4 Process data Write to destination FSR, 0 Before Instruction W = 0x17 FSR = 0xC2 After Instruction W = 0xD9 FSR = 0xC2 Example 2 ADDWF INDF, 1 Before Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x20 After Instruction 29 W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x37 Case 1: ADDWF Instruction Set Example 3 PCL Before Instruction W = 0x10 PCL = 0x37 C = x After Instruction PCL = 0x47 C = 0 Case 2: Before Instruction W PCL PCH C = = = = 0x10 0xF7 0x08 x After Instruction PCL = 0x07 PCH = 0x08 C = 1 1997 Microchip Technology Inc. DS31029A-page 29-9 PICmicro MID-RANGE MCU FAMILY ANDLW And Literal with W Syntax: [ label ] ANDLW Operands: 0 ≤ k ≤ 255 Operation: (W).AND. (k) → W Status Affected: Z Encoding: 11 1001 k kkkk kkkk Description: The contents of W register are AND’ed with the eight bit literal 'k'. The result is placed in the W register. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read literal 'k' ANDLW Process data Q4 Write to W register 0x5F Before Instruction W = 0xA3 After Instruction W Example 2 ANDLW = 0x03 ; 0101 1111 ; 1010 0011 ;---------; 0000 0011 (0x5F) (0xA3) -----(0x03) MYREG Before Instruction W = 0xA3 Address of MYREG † = 0x37 † MYREG is a symbol for a data memory location After Instruction W Example 3 ANDLW = 0x23 HIGH (LU_TABLE) Before Instruction W = 0xA3 Address of LU_TABLE † = 0x9375 † LU_TABLE is a label for an address in program memory After Instruction W DS31029A-page 29-10 = 0x83 1997 Microchip Technology Inc. Section 29. Instruction Set ANDWF AND W with f Syntax: [ label ] ANDWF Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (W).AND. (f) → destination Status Affected: Z Encoding: 00 0101 f,d dfff ffff Description: AND the W register with register 'f'. If 'd' is 0 the result is stored in the W register. If 'd' is 1 the result is stored back in register 'f'. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' ANDWF Process data Q4 Write to destination FSR, 1 Before Instruction W = 0x17 FSR = 0xC2 After Instruction ; 0001 0111 ; 1100 0010 ;---------; 0000 0010 (0x17) (0xC2) -----(0x02) ; 0001 0111 ; 1100 0010 ;---------; 0000 0010 (0x17) (0xC2) -----(0x02) W = 0x17 FSR = 0x02 Example 2 ANDWF FSR, 0 Before Instruction W = 0x17 FSR = 0xC2 After Instruction W = 0x02 FSR = 0xC2 ANDWF INDF, 1 Instruction Set Example 3 29 Before Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x5A After Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x15 1997 Microchip Technology Inc. DS31029A-page 29-11 PICmicro MID-RANGE MCU FAMILY BCF Bit Clear f Syntax: [ label ] BCF Operands: 0 ≤ f ≤ 127 0≤b≤7 Operation: 0 → f Status Affected: None Encoding: 01 f,b 00bb bfff ffff Description: Bit 'b' in register 'f' is cleared. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' BCF Q4 Process data Write register 'f' FLAG_REG, 7 Before Instruction FLAG_REG = 0xC7 ; 1100 0111 After Instruction FLAG_REG = 0x47 Example 2 BCF ; 0100 0111 INDF, 3 Before Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x2F After Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x27 DS31029A-page 29-12 1997 Microchip Technology Inc. Section 29. Instruction Set BSF Bit Set f Syntax: [ label ] BSF Operands: 0 ≤ f ≤ 127 0≤b≤7 Operation: 1 → f Status Affected: None Encoding: 01 f,b 01bb bfff Description: Bit 'b' in register 'f' is set. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' BSF ffff Q4 Process data Write register 'f' FLAG_REG, 7 Before Instruction FLAG_REG =0x0A ; 0000 1010 After Instruction FLAG_REG =0x8A Example 2 BSF ; 1000 1010 INDF, 3 Before Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x20 After Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x28 29 Instruction Set 1997 Microchip Technology Inc. DS31029A-page 29-13 PICmicro MID-RANGE MCU FAMILY BTFSC Bit Test, Skip if Clear Syntax: [ label ] BTFSC f,b Operands: 0 ≤ f ≤ 127 0≤b≤7 Operation: skip if (f) = 0 Status Affected: None Encoding: Description: 01 10bb bfff ffff If bit 'b' in register 'f' is '0' then the next instruction is skipped. If bit 'b' is '0' then the next instruction (fetched during the current instruction execution) is discarded, and a NOP is executed instead, making this a 2 cycle instruction. Words: 1 Cycles: 1(2) Q Cycle Activity: Q1 Q2 Decode Read register 'f' If skip (2nd cycle): Q1 Q2 No operation Example 1 Case 1: No operation HERE FALSE TRUE Q3 Q4 Process data Q3 Q4 No operation BTFSC GOTO • • • No operation No operation FLAG, 4 PROCESS_CODE Before Instruction PC = FLAG= addressHERE xxx0 xxxx After Instruction Since FLAG<4>= 0, PC = addressTRUE Case 2: Before Instruction PC = FLAG= addressHERE xxx1 xxxx After Instruction Since FLAG<4>=1, PC = addressFALSE DS31029A-page 29-14 1997 Microchip Technology Inc. Section 29. Instruction Set BTFSS Bit Test f, Skip if Set Syntax: [ label ] BTFSS f,b Operands: 0 ≤ f ≤ 127 0≤b<7 Operation: skip if (f) = 1 Status Affected: None Encoding: 01 11bb bfff ffff Description: If bit 'b' in register 'f' is '1' then the next instruction is skipped. If bit 'b' is '1', then the next instruction (fetched during the current instruction execution) is discarded and a NOP is executed instead, making this a 2 cycle instruction. Words: 1 Cycles: 1(2) Q Cycle Activity: Q1 Q2 Decode Read register 'f' If skip (2nd cycle): Q1 Q2 No operation Example 1 Case 1: No operation HERE FALSE TRUE Q3 Q4 Process data Q3 Q4 No operation BTFSS GOTO • • • No operation No operation FLAG, 4 PROCESS_CODE Before Instruction PC = FLAG= addressHERE xxx0 xxxx After Instruction 29 Since FLAG<4>= 0, PC = addressFALSE Case 2: Before Instruction addressHERE xxx1 xxxx Instruction Set PC = FLAG= After Instruction Since FLAG<4>=1, PC = addressTRUE 1997 Microchip Technology Inc. DS31029A-page 29-15 PICmicro MID-RANGE MCU FAMILY CALL Call Subroutine Syntax: [ label ] CALL k Operands: 0 ≤ k ≤ 2047 Operation: (PC)+ 1→ TOS, k → PC<10:0>, (PCLATH<4:3>) → PC<12:11> Status Affected: None Encoding: 10 0kkk kkkk kkkk Description: Call Subroutine. First, the 13-bit return address (PC+1) is pushed onto the stack. The eleven bit immediate address is loaded into PC bits <10:0>. The upper bits of the PC are loaded from PCLATH<4:3>. CALL is a two cycle instruction. Words: 1 Cycles: 2 Q Cycle Activity: 1st cycle: Q1 Q2 Decode 2nd cycle: Q1 No operation Example 1 Q3 Read literal 'k' Q2 Q4 Process data Q3 No operation HERE No operation Q4 No operation CALL No operation THERE Before Instruction PC = AddressHERE After Instruction TOS = Address HERE+1 PC = Address THERE DS31029A-page 29-16 1997 Microchip Technology Inc. Section 29. Instruction Set CLRF Clear f Syntax: [ label ] CLRF Operands: 0 ≤ f ≤ 127 Operation: 00h → f 1→Z Status Affected: Z Encoding: 00 f 0001 1fff ffff Description: The contents of register 'f' are cleared and the Z bit is set. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' CLRF Process data Q4 Write register 'f' FLAG_REG Before Instruction FLAG_REG=0x5A After Instruction FLAG_REG=0x00 Z = 1 Example 2 CLRF INDF Before Instruction FSR = 0xC2 Contents of Address (FSR)=0xAA After Instruction FSR = 0xC2 Contents of Address (FSR)=0x00 Z = 1 29 Instruction Set 1997 Microchip Technology Inc. DS31029A-page 29-17 PICmicro MID-RANGE MCU FAMILY CLRW Clear W Syntax: [ label ] CLRW Operands: None Operation: 00h → W 1→Z Status Affected: Z Encoding: 00 0001 0xxx xxxx Description: W register is cleared. Zero bit (Z) is set. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' Q4 Process data Write register 'W' CLRW Before Instruction W = 0x5A After Instruction W Z DS31029A-page 29-18 = = 0x00 1 1997 Microchip Technology Inc. Section 29. Instruction Set CLRWDT Clear Watchdog Timer Syntax: [ label ] CLRWDT Operands: None Operation: 00h → WDT 0 → WDT prescaler count, 1 → TO 1 → PD Status Affected: TO, PD Encoding: 00 0000 0110 0100 Description: CLRWDT instruction clears the Watchdog Timer. It also clears the prescaler count of the WDT. Status bits TO and PD are set. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 No operation Process data Q4 Clear WDT Counter CLRWDT Before Instruction WDT counter= x WDT prescaler =1:128 After Instruction WDT counter=0x00 WDT prescaler count=0 TO = 1 PD = 1 WDT prescaler =1:128 Note: The CLRWDT instruction does not affect the assignment of the WDT prescaler. 29 Instruction Set 1997 Microchip Technology Inc. DS31029A-page 29-19 PICmicro MID-RANGE MCU FAMILY COMF Complement f Syntax: [ label ] COMF Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (f) → destination Status Affected: Z Encoding: 00 f,d 1001 dfff ffff Description: The contents of register 'f' are 1’s complemented. If 'd' is 0 the result is stored in W. If 'd' is 1 the result is stored back in register 'f'. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' COMF Q4 Process data Write to destination REG1, 0 Before Instruction REG1= 0x13 After Instruction REG1= W = Example 2 COMF 0x13 0xEC INDF, 1 Before Instruction FSR = 0xC2 Contents of Address (FSR)=0xAA After Instruction FSR = 0xC2 Contents of Address (FSR)=0x55 Example 3 COMF REG1, 1 Before Instruction REG1= 0xFF After Instruction REG1= Z = DS31029A-page 29-20 0x00 1 1997 Microchip Technology Inc. Section 29. Instruction Set DECF Decrement f Syntax: [ label ] DECF f,d Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (f) - 1 → destination Status Affected: Z Encoding: 00 0011 dfff ffff Description: Decrement register 'f'. If 'd' is 0 the result is stored in the W register. If 'd' is 1 the result is stored back in register 'f'. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' DECF Process data Q4 Write to destination CNT, 1 Before Instruction CNT = 0x01 Z = 0 After Instruction CNT = 0x00 Z = 1 Example 2 DECF INDF, 1 Before Instruction FSR = 0xC2 Contents of Address (FSR) = 0x01 Z = 0 After Instruction 29 FSR = 0xC2 Contents of Address (FSR) = 0x00 Z = 1 DECF Instruction Set Example 3 CNT, 0 Before Instruction CNT = 0x10 W = x Z = 0 After Instruction CNT = 0x10 W = 0x0F Z = 0 1997 Microchip Technology Inc. DS31029A-page 29-21 PICmicro MID-RANGE MCU FAMILY DECFSZ Decrement f, Skip if 0 Syntax: [ label ] DECFSZ f,d Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (f) - 1 → destination; skip if result = 0 Status Affected: None Encoding: 00 1011 dfff ffff Description: The contents of register 'f' are decremented. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is placed back in register 'f'. If the result is 0, then the next instruction (fetched during the current instruction execution) is discarded and a NOP is executed instead, making this a 2 cycle instruction. Words: 1 Cycles: 1(2) Q Cycle Activity: Q1 Q2 Decode Q3 Read register 'f' If skip (2nd cycle): Q1 Q2 No operation Example Case 1: Q4 Process data Q3 No operation Write to destination Q4 No operation HERE DECFSZ GOTO CONTINUE • • • No operation CNT, 1 LOOP Before Instruction PC CNT = = address HERE 0x01 After Instruction CNT PC Case 2: = = 0x00 address CONTINUE Before Instruction PC CNT = = address HERE 0x02 After Instruction CNT PC DS31029A-page 29-22 = = 0x01 address HERE + 1 1997 Microchip Technology Inc. Section 29. Instruction Set GOTO Unconditional Branch Syntax: [ label ] Operands: 0 ≤ k ≤ 2047 Operation: k → PC<10:0> PCLATH<4:3> → PC<12:11> Status Affected: None Encoding: 10 GOTO k 1kkk kkkk kkkk Description: GOTO is an unconditional branch. The eleven bit immediate value is loaded into PC bits <10:0>. The upper bits of PC are loaded from PCLATH<4:3>. GOTO is a two cycle instruction. Words: 1 Cycles: 2 Q Cycle Activity: 1st cycle: Q1 Q2 Decode 2nd cycle: Q1 No operation Example Q3 Read literal 'k'<7:0> Q2 Process data Q3 No operation No operation Q4 No operation Q4 No operation GOTO THERE After Instruction PC =AddressTHERE 29 Instruction Set 1997 Microchip Technology Inc. DS31029A-page 29-23 PICmicro MID-RANGE MCU FAMILY INCF Increment f Syntax: [ label ] Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (f) + 1 → destination Status Affected: Z Encoding: 00 INCF f,d 1010 dfff ffff Description: The contents of register 'f' are incremented. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is placed back in register 'f'. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' INCF Q4 Process data Write to destination CNT, 1 Before Instruction CNT = Z = 0xFF 0 After Instruction CNT = Z = Example 2 INCF 0x00 1 INDF, 1 Before Instruction FSR = 0xC2 Contents of Address (FSR) = 0xFF Z = 0 After Instruction FSR = 0xC2 Contents of Address (FSR) = 0x00 Z = 1 Example 3 INCF CNT, 0 Before Instruction CNT = 0x10 W = x Z = 0 After Instruction CNT = 0x10 W = 0x11 Z = 0 DS31029A-page 29-24 1997 Microchip Technology Inc. Section 29. Instruction Set INCFSZ Increment f, Skip if 0 Syntax: [ label ] Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (f) + 1 → destination, skip if result = 0 Status Affected: None Encoding: 00 INCFSZ f,d 1111 dfff ffff Description: The contents of register 'f' are incremented. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is placed back in register 'f'. If the result is 0, then the next instruction (fetched during the current instruction execution) is discarded and a NOP is executed instead, making this a 2 cycle instruction. Words: 1 Cycles: 1(2) Q Cycle Activity: Q1 Q2 Decode Q3 Read register 'f' If skip (2nd cycle): Q1 Q2 No operation Example Case 1: Q4 Process data Q3 No operation Write to destination Q4 No operation HERE INCFSZ GOTO CONTINUE • • • No operation CNT, 1 LOOP Before Instruction PC CNT = = address HERE 0xFF 29 After Instruction CNT PC 0x00 address CONTINUE Before Instruction PC CNT = = Instruction Set Case 2: = = address HERE 0x00 After Instruction CNT PC 1997 Microchip Technology Inc. = = 0x01 address HERE + 1 DS31029A-page 29-25 PICmicro MID-RANGE MCU FAMILY IORLW Inclusive OR Literal with W Syntax: [ label ] Operands: 0 ≤ k ≤ 255 Operation: (W).OR. k → W Status Affected: Z Encoding: IORLW k 11 1000 kkkk kkkk Description: The contents of the W register is OR’ed with the eight bit literal 'k'. The result is placed in the W register. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read literal 'k' IORLW Process data Q4 Write to W register 0x35 Before Instruction W = 0x9A After Instruction W Z Example 2 IORLW = 0xBF = 0 MYREG Before Instruction W = 0x9A Address of MYREG † = 0x37 † MYREG is a symbol for a data memory location After Instruction W Z Example 3 IORLW = 0x9F = 0 HIGH (LU_TABLE) Before Instruction W = 0x9A Address of LU_TABLE † = 0x9375 † LU_TABLE is a label for an address in program memory After Instruction W Z Example 4 IORLW = 0x9B = 0 0x00 Before Instruction W = 0x00 After Instruction W Z DS31029A-page 29-26 = 0x00 = 1 1997 Microchip Technology Inc. Section 29. Instruction Set IORWF Inclusive OR W with f Syntax: [ label ] Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (W).OR. (f) → destination Status Affected: Z Encoding: 00 IORWF 0100 f,d dfff ffff Description: Inclusive OR the W register with register 'f'. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is placed back in register 'f'. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' IORWF Process data Q4 Write to destination RESULT, 0 Before Instruction RESULT=0x13 W = 0x91 After Instruction RESULT=0x13 W = 0x93 Z = 0 Example 2 IORWF INDF, 1 Before Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x30 29 After Instruction Example 3 Case 1: IORWF Instruction Set W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x37 Z = 0 RESULT, 1 Before Instruction RESULT=0x13 W = 0x91 After Instruction RESULT=0x93 W = 0x91 Z = 0 Case 2: Before Instruction RESULT=0x00 W = 0x00 After Instruction RESULT=0x00 W = 0x00 Z = 1 1997 Microchip Technology Inc. DS31029A-page 29-27 PICmicro MID-RANGE MCU FAMILY MOVLW Move Literal to W Syntax: [ label ] Operands: 0 ≤ k ≤ 255 Operation: k→W Status Affected: None Encoding: MOVLW k 11 00xx kkkk kkkk Description: The eight bit literal 'k' is loaded into W register. The don’t cares will assemble as 0’s. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read literal 'k' MOVLW Q4 Process data Write to W register 0x5A After Instruction W Example 2 MOVLW = 0x5A MYREG Before Instruction W = 0x10 Address of MYREG † = 0x37 † MYREG is a symbol for a data memory location After Instruction W Example 3 MOVLW = 0x37 HIGH (LU_TABLE) Before Instruction W = 0x10 Address of LU_TABLE † = 0x9375 † LU_TABLE is a label for an address in program memory After Instruction W DS31029A-page 29-28 = 0x93 1997 Microchip Technology Inc. Section 29. Instruction Set MOVF Move f Syntax: [ label ] Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (f) → destination Status Affected: Z Encoding: MOVF f,d 00 1000 dfff ffff Description: The contents of register ’f’ is moved to a destination dependent upon the status of ’d’. If ’d’ = 0, destination is W register. If ’d’ = 1, the destination is file register ’f’ itself. ’d’ = 1 is useful to test a file register since status flag Z is affected. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' MOVF Process data Q4 Write to destination FSR, 0 Before Instruction W = 0x00 FSR = 0xC2 After Instruction W Z Example 2 MOVF = 0xC2 = 0 INDF, 0 Before Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x00 29 After Instruction Example 3 Case 1: MOVF Instruction Set W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x00 Z = 1 FSR, 1 Before Instruction FSR = 0x43 After Instruction FSR = 0x43 Z = 0 Case 2: Before Instruction FSR = 0x00 After Instruction FSR = 0x00 Z = 1 1997 Microchip Technology Inc. DS31029A-page 29-29 PICmicro MID-RANGE MCU FAMILY MOVWF Move W to f Syntax: [ label ] Operands: 0 ≤ f ≤ 127 Operation: (W) → f Status Affected: None Encoding: 00 MOVWF 0000 f 1fff ffff Description: Move data from W register to register 'f'. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' MOVWF Process data Q4 Write register 'f' OPTION_REG Before Instruction OPTION_REG=0xFF W = 0x4F After Instruction OPTION_REG=0x4F W = 0x4F Example 2 MOVWF INDF Before Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x00 After Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x17 DS31029A-page 29-30 1997 Microchip Technology Inc. Section 29. Instruction Set NOP No Operation Syntax: [ label ] Operands: None Operation: No operation Status Affected: None Encoding: 00 NOP 0000 Description: No operation. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example : 0xx0 Q3 No operation HERE 0000 Q4 No operation No operation NOP Before Instruction PC = address HERE After Instruction PC = address HERE + 1 29 Instruction Set 1997 Microchip Technology Inc. DS31029A-page 29-31 PICmicro MID-RANGE MCU FAMILY OPTION Load Option Register Syntax: [ label ] Operands: None Operation: (W) → OPTION Status Affected: None Encoding: 00 OPTION 0000 0110 0010 Description: The contents of the W register are loaded in the OPTION register. This instruction is supported for code compatibility with PIC16C5X products. Since OPTION is a readable/writable register, the user can directly address it. Words: 1 Cycles: 1 To maintain upward compatibility with future PIC16CXX products, do not use this instruction. DS31029A-page 29-32 1997 Microchip Technology Inc. Section 29. Instruction Set RETFIE Return from Interrupt Syntax: [ label ] Operands: None Operation: TOS → PC, 1 → GIE Status Affected: None Encoding: 00 RETFIE 0000 0000 1001 Description: Return from Interrupt. The 13-bit address at the Top of Stack (TOS) is loaded in the PC. The Global Interrupt Enable bit, GIE (INTCON<7>), is automatically set, enabling Interrupts. This is a two cycle instruction. Words: 1 Cycles: 2 Q Cycle Activity: 1st cycle: Q1 Q2 Decode 2nd cycle: Q1 No operation Example Q3 No operation Q2 Process data Q3 No operation No operation Q4 No operation Q4 No operation RETFIE After Instruction PC = TOS GIE = 1 29 Instruction Set 1997 Microchip Technology Inc. DS31029A-page 29-33 PICmicro MID-RANGE MCU FAMILY RETLW Return with Literal in W Syntax: [ label ] Operands: 0 ≤ k ≤ 255 Operation: k → W; TOS → PC Status Affected: None Encoding: RETLW k 11 01xx kkkk kkkk Description: The W register is loaded with the eight bit literal 'k'. The program counter is loaded 13-bit address at the Top of Stack (the return address). This is a two cycle instruction. Words: 1 Cycles: 2 Q Cycle Activity: 1st cycle: Q1 Q2 Decode 2nd cycle: Q1 No operation Example Q3 Read literal 'k' Q2 Q3 No operation HERE TABLE Q4 Process data Q4 No operation CALL TABLE • • • ADDWF RETLW RETLW • • • RETLW Write to W register No operation ; W contains table ; offset value ; W now has table value PC k1 k2 ;W = offset ;Begin table ; kn ; End of table Before Instruction W = 0x07 After Instruction W = value of k8 PC = TOS = Address Here + 1 DS31029A-page 29-34 1997 Microchip Technology Inc. Section 29. Instruction Set RETURN Return from Subroutine Syntax: [ label ] Operands: None Operation: TOS → PC Status Affected: None Encoding: 00 RETURN 0000 0000 1000 Description: Return from subroutine. The stack is POPed and the top of the stack (TOS) is loaded into the program counter. This is a two cycle instruction. Words: 1 Cycles: 2 Q Cycle Activity: 1st cycle: Q1 Q2 Decode 2nd cycle: Q1 No operation Example Q3 No operation Q2 Process data Q3 No operation HERE No operation Q4 No operation Q4 No operation RETURN After Instruction PC = TOS 29 Instruction Set 1997 Microchip Technology Inc. DS31029A-page 29-35 PICmicro MID-RANGE MCU FAMILY RLF Rotate Left f through Carry Syntax: [ label ] Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: See description below Status Affected: C Encoding: Description: 00 RLF f,d 1101 dfff ffff The contents of register 'f' are rotated one bit to the left through the Carry Flag. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is stored back in register 'f'. C Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' RLF Register f Q4 Process data Write to destination REG1,0 Before Instruction REG1= C = 1110 0110 0 After Instruction REG1=1110 0110 W =1100 1100 C =1 Example 2 Case 1: RLF INDF, 1 Before Instruction W = xxxx xxxx FSR = 0xC2 Contents of Address (FSR) = 0011 1010 C = 1 After Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0111 0101 C = 0 Case 2: Before Instruction W = xxxx xxxx FSR = 0xC2 Contents of Address (FSR) = 1011 1001 C = 0 After Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0111 0010 C = 1 DS31029A-page 29-36 1997 Microchip Technology Inc. Section 29. Instruction Set RRF Rotate Right f through Carry Syntax: [ label ] Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: See description below Status Affected: C Encoding: Description: 00 RRF f,d 1100 dfff ffff The contents of register 'f' are rotated one bit to the right through the Carry Flag. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is placed back in register 'f'. C Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' Q4 Process data RRF Register f Write to destination REG1,0 Before Instruction REG1= 1110 0110 W = xxxx xxxx C = 0 After Instruction REG1= 1110 0110 W = 0111 0011 C = 0 Example 2 Case 1: RRF INDF, 1 29 Before Instruction Instruction Set W = xxxx xxxx FSR = 0xC2 Contents of Address (FSR) = 0011 1010 C = 1 After Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 1001 1101 C = 0 Case 2: Before Instruction W = xxxx xxxx FSR = 0xC2 Contents of Address (FSR) = 0011 1001 C = 0 After Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0001 1100 C = 1 1997 Microchip Technology Inc. DS31029A-page 29-37 PICmicro MID-RANGE MCU FAMILY SLEEP Syntax: [ label ] Operands: None Operation: 00h → WDT, 0 → WDT prescaler count, 1 → TO, 0 → PD Status Affected: TO, PD Encoding: 00 0000 0110 0011 Description: The power-down status bit, PD is cleared. Time-out status bit, TO is set. Watchdog Timer and its prescaler count are cleared. The processor is put into SLEEP mode with the oscillator stopped. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example: Note: DS31029A-page 29-38 SLEEP No operation Q3 No operation Q4 Go to sleep SLEEP The SLEEP instruction does not affect the assignment of the WDT prescaler 1997 Microchip Technology Inc. Section 29. Instruction Set SUBLW Subtract W from Literal Syntax: [ label ] Operands: 0 ≤ k ≤ 255 Operation: k - (W) → W Status Affected: C, DC, Z Encoding: Description: SUBLW k 11 110x Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1: Case 1: kkkk kkkk The W register is subtracted (2’s complement method) from the eight bit literal 'k'. The result is placed in the W register. Q3 Read literal 'k' SUBLW Process data Q4 Write to W register 0x02 Before Instruction W C Z = 0x01 = x = x After Instruction W C Z Case 2: = 0x01 = 1 = 0 ; result is positive Before Instruction W C Z = 0x02 = x = x After Instruction W C Z 29 ; result is zero Before Instruction W C Z Instruction Set Case 3: = 0x00 = 1 = 1 = 0x03 = x = x After Instruction W C Z Example 2 SUBLW = 0xFF = 0 = 0 ; result is negative MYREG Before Instruction W = 0x10 Address of MYREG † = 0x37 † MYREG is a symbol for a data memory location After Instruction W C 1997 Microchip Technology Inc. = 0x27 = 1 ; result is positive DS31029A-page 29-39 PICmicro MID-RANGE MCU FAMILY SUBWF Subtract W from f Syntax: [ label ] Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (f) - (W) → destination Status Affected: C, DC, Z Encoding: Description: 00 0010 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Example 1: Case 1: dfff ffff Subtract (2’s complement method) W register from register 'f'. If 'd' is 0 the result is stored in the W register. If 'd' is 1 the result is stored back in register 'f'. Words: Decode SUBWF f,d Q3 Read register 'f' SUBWF Q4 Process data Write to destination REG1,1 Before Instruction REG1= W = C = Z = 3 2 x x After Instruction REG1= W = C = Z = Case 2: 1 2 1 0 ; result is positive Before Instruction REG1= W = C = Z = 2 2 x x After Instruction REG1= W = C = Z = Case 3: 0 2 1 1 ; result is zero Before Instruction REG1= W = C = Z = 1 2 x x After Instruction REG1= W = C = Z = DS31029A-page 29-40 0xFF 2 0 0 ; result is negative 1997 Microchip Technology Inc. Section 29. Instruction Set SWAPF Swap Nibbles in f Syntax: [ label ] SWAPF f,d Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (f<3:0>) → destination<7:4>, (f<7:4>) → destination<3:0> Status Affected: None Encoding: 00 1110 dfff ffff Description: The upper and lower nibbles of register 'f' are exchanged. If 'd' is 0 the result is placed in W register. If 'd' is 1 the result is placed in register 'f'. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' SWAPF Process data Q4 Write to destination REG, 0 Before Instruction REG1= 0xA5 After Instruction REG1= 0xA5 W = 0x5A Example 2 SWAPF INDF, 1 Before Instruction W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x20 29 After Instruction Example 3 SWAPF Instruction Set W = 0x17 FSR = 0xC2 Contents of Address (FSR) = 0x02 REG, 1 Before Instruction REG1= 0xA5 After Instruction REG1= 0x5A 1997 Microchip Technology Inc. DS31029A-page 29-41 PICmicro MID-RANGE MCU FAMILY TRIS Load TRIS Register Syntax: [ label ] TRIS Operands: 5≤f≤7 Operation: (W) → TRIS register f; Status Affected: None Encoding: 00 0000 f 0110 0fff Description: The instruction is supported for code compatibility with the PIC16C5X products. Since TRIS registers are readable and writable, the user can directly address them. Words: 1 Cycles: 1 Example To maintain upward compatibility with future PIC16CXX products, do not use this instruction. DS31029A-page 29-42 1997 Microchip Technology Inc. Section 29. Instruction Set XORLW Exclusive OR Literal with W Syntax: [ label] Operands: 0 ≤ k ≤ 255 Operation: (W).XOR. k → W Status Affected: Z Encoding: Description: XORLW k 11 1010 Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 kkkk kkkk The contents of the W register are XOR’ed with the eight bit literal 'k'. The result is placed in the W register. Q3 Read literal 'k' Q4 Process data XORLW Write to W register 0xAF Before Instruction W = 0xB5 After Instruction W Z Example 2 XORLW ; 1010 1111 (0xAF) ; 1011 0101 (0xB5) ; --------- ------ ; 0001 1010 (0x1A) = 0x1A = 0 MYREG Before Instruction W = 0xAF Address of MYREG † = 0x37 † MYREG is a symbol for a data memory location After Instruction W Z XORLW HIGH (LU_TABLE) Before Instruction W = 0xAF Address of LU_TABLE † = 0x9375 † LU_TABLE is a label for an address in program memory After Instruction W Z 1997 Microchip Technology Inc. = 0x3C = 0 DS31029A-page 29-43 Instruction Set Example 3 29 = 0x18 = 0 PICmicro MID-RANGE MCU FAMILY XORWF Exclusive OR W with f Syntax: [ label ] XORWF Operands: 0 ≤ f ≤ 127 d ∈ [0,1] Operation: (W).XOR. (f) → destination Status Affected: Z Encoding: 00 0110 f,d dfff ffff Description: Exclusive OR the contents of the W register with register 'f'. If 'd' is 0 the result is stored in the W register. If 'd' is 1 the result is stored back in register 'f'. Words: 1 Cycles: 1 Q Cycle Activity: Q1 Q2 Decode Example 1 Q3 Read register 'f' XORWF Process data Q4 Write to destination REG, 1 ; 1010 1111 (0xAF) Before Instruction ; 1011 0101 (0xB5) ; --------; 0001 1010 -----(0x1A) REG, 0 ; 1010 1111 (0xAF) Before Instruction ; 1011 0101 (0xB5) ; --------; 0001 1010 -----(0x1A) REG= 0xAF W = 0xB5 After Instruction REG= 0x1A W = 0xB5 Example 2 XORWF REG= 0xAF W = 0xB5 After Instruction REG= 0xAF W = 0x1A Example 3 XORWF INDF, 1 Before Instruction W = 0xB5 FSR = 0xC2 Contents of Address (FSR) = 0xAF After Instruction W = 0xB5 FSR = 0xC2 Contents of Address (FSR) = 0x1A DS31029A-page 29-44 1997 Microchip Technology Inc. Section 29. Instruction Set 29.6 Design Tips Question 1: How can I modify the value of W directly? I want to decrement W. Answer 1: There are a few possibilities, two are: 1. 2. For the midrange devices, there are several instructions that work with a literal and W. For instance, if it were desired to decrement W, this can be done with an ADDLW 0xFF. (the 0x prefix denotes hex to the assembler) Notice that all of the instructions can modify a value right where it sits in the file register. This means you can decrement it right where it is. You do not even need to move it to W. If you want to decrement it AND move it somewhere else, then you make W the DESTINATION of the decrement (DECF register,W) then put it where you want it. It is the same number of instructions as a straight move, but it gets decremented along the way. Question 2: Is there any danger in using the TRIS instruction for the PIC16CXXX since there is a warning in the Data book suggesting it not be used? Answer 2: For code compatibility and upgrades to later parts, the use of the TRIS instruction is not recommended. You should note the TRIS instruction is limited to ports A, B and C. Future devices may not support these instructions. Question 3: Do I have to switch to Bank1 of data memory before using the TRIS instruction (for parts with TRIS registers in the memory map)? Answer 3: No. The TRIS instruction is Bank independent. Again the use of the TRIS instruction is not recommended. Question 4: I have seen references to “Read-Modify-Write” instructions in your data sheet, but I do not know what that is. Can you explain what it is and why I need to know this? Answer 4: One situation where you would want to consider the affects of a R-M-W instruction is a port that is continuously changed from input to output and back. For example, say you have TRISB set to all outputs, and write all ones to the PORTB register, all of the PORTB pins will go high. Now, say you turn pin RB3 into an input, which happens to go low. A BCF PORTB,6 is then executed to drive pin RB6 low. If you then turn RB3 back into an output, it will now drive low, even though the last value you put there was a one. What happened was that the BCF of the other pin (RB6) caused the whole port to be read, including the zero on RB3 when it was an input. Then, bit 6 was changed as requested, but since RB3 was read as a zero, zero will also be placed back into that port latch, overwriting the one that was there before. When the pin is turned back into an output, the new value was reflected. 1997 Microchip Technology Inc. DS31029A-page 29-45 29 Instruction Set An easy example of a Read-Modify-Write (R-M-W) instruction is the bit clear instruction BCF. You might think that the processor just clears the bit, which on a port output pin would clear the pin. What actually happens is the whole port (or register) is first read, THEN the bit is cleared, then the new modified value is written back to the port (or register). Actually, any instruction that depends on a value currently in the register is going to be a Read-Modify-Write instruction. This includes ADDWF, SUBWF, BCF, BSF, INCF, XORWF, etc... Instructions that do not depend on the current register value, like MOVWF, CLRF, and so on are not R-M-W instructions. PICmicro MID-RANGE MCU FAMILY Question 5: When I perform a BCF other pins get cleared in the port. Why? Answer 5: There are a few possibilities, two are: 1. 2. DS31029A-page 29-46 Another case where a R-M-W instruction may seem to change other pin values unexpectedly can be illustrated as follows: Suppose you make PORTC all outputs and drive the pins low. On each of the port pins is an LED connected to ground, such that a high output lights it. Across each LED is a 100 µF capacitor. Let's also suppose that the processor is running very fast, say 20 MHz. Now if you go down the port setting each pin in order; BSF PORTC,0 then BSF PORTC,1 then BSF PORTC,2 and so on, you may see that only the last pin was set, and only the last LED actually turns on. This is because the capacitors take a while to charge. As each pin was set, the pin before it was not charged yet and so was read as a zero. This zero is written back out to the port latch (R-M-W, remember) which clears the bit you just tried to set the instruction before. This is usually only a concern at high speeds and for successive port operations, but it can happen so take it into consideration. If this is on a PIC16C7X device, you may not have configured the I/O pins properly in the ADCON1 register. If a pin is configured for analog input, any read of that pin will read a zero, regardless of the voltage on the pin. This is an exception to the normal rule that the pin state is always read. You can still configure an analog pin as an output in the TRIS register, and drive the pin high or low by writing to it, but you will always read a zero. Therefore if you execute a Read-Modify-Write instruction (see previous question) all analog pins are read as zero, and those not directly modified by the instruction will be written back to the port latch as zero. A pin configured as analog is expected to have values that may be neither high nor low to a digital pin, or floating. Floating inputs on digital pins are a no-no, and can lead to high current draw in the input buffer, so the input buffer is disabled. 1997 Microchip Technology Inc. Section 29. Instruction Set 29.7 Related Application Notes This section lists application notes that are related to this section of the manual. These application notes may not be written specifically for the Mid-Range MCU family (that is they may be written for the Base-Line, or High-End families), but the concepts are pertinent, and could be used (with modification and possible limitations). The current application notes related to the instruction set are: Currently No related Application Notes 29 Instruction Set 1997 Microchip Technology Inc. DS31029A-page 29-47 PICmicro MID-RANGE MCU FAMILY 29.8 Revision History Revision A This is the initial released revision of the Instruction Set description. DS31029A-page 29-48 1997 Microchip Technology Inc.
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.2 Linearized : Yes Encryption : Standard V1.2 (40-bit) User Access : Print, Copy, Annotate, Fill forms, Extract, Assemble, Print high-res Create Date : 1997:12:10 13:59:02 Producer : Acrobat Distiller 3.01 for Power Macintosh Author : Elizabeth Hancock Title : 31029A.frm Creator : FrameMaker 5.1.1 Modify Date : 2002:09:27 15:48:32-07:00 Page Count : 48 Page Mode : UseOutlinesEXIF Metadata provided by EXIF.tools