ETC CP8P07

Preliminary
DATA SHEET
CP8P07
OTP-BASED 8-BIT MICROCONTROLLER
1
Preliminary
TABLE OF CONTENTS
1. GENERAL DESCRIPTION ............................................................................. PAGE 5
2. FEATURES ..................................................................................................... PAGE 5
3. PIN DESCRIPTION ........................................................................................ PAGE 5
4. ARCHITECTURE ............................................................................................ PAGE 7
5. MEMORY MAPS AND REGISTERS............................................................... PAGE 8
5.1 PROGRAM MEMORY MAP ...................................................................... PAGE 8
5.2 CONFIGURATION MEMORY MAP........................................................... PAGE 10
5.3 DATA MEMORY MAP AND REGISTERS.................................................. PAGE 12
5.4 CONTROL REGISTERS ........................................................................... PAGE 16
6. CLOCKS ......................................................................................................... PAGE 18
6.1 CLOCK SYSTEM ...................................................................................... PAGE 18
6.2 CRYSTAL OSCILLATOR........................................................................... PAGE 18
6.3 EXTERNAL RC OSCILLATOR .................................................................. PAGE 19
6.4 INTERNAL 16MHZ RC OSCILLATOR ...................................................... PAGE 19
7. I/O PORTS...................................................................................................... PAGE 21
7.1 PORTA ...................................................................................................... PAGE 21
7.2 PORTB ...................................................................................................... PAGE 21
7.3 PORTC...................................................................................................... PAGE 21
8. ON-CHIP PERIPHERAL ................................................................................. PAGE 26
8.1 TIMER0 ..................................................................................................... PAGE 26
8.2 WATCHDOG TIMER ................................................................................. PAGE 27
9. SPECIAL FEATURES ..................................................................................... PAGE 28
9.1 INTERRUPTS ........................................................................................... PAGE 28
2
Preliminary
10. INSTRUCTION SET ..................................................................................... PAGE 29
10.1 INSTRUCTION DESCRIPTION .............................................................. PAGE 32
11. ABSOLUTE MAXIMUM RATINGS ................................................................ PAGE 38
12. DC CHARACTERISTICS.............................................................................. PAGE 38
3
Preliminary
Revision History:
Date
Revision#
7/12/2005
101
Revised oscillator types
Description
7/12/2005
102
Revised oscillator types
7/15/2005
8/1/2005
8/2/2005
8/9/2005
103
104
105
106
Revised instruction set
Revised instruction set
Revised description of INTCON
Corrected the initial values of PORTA, PORTB, and PORTC
Page
5-7,10-11,
16-20,39
6-7,10-11,
16-20
29-37
30,31,35,36
12,14,28
14
4
Preliminary
CP8P07
OTP-Based 8-bit CMOS Microcontroller
1. General Description
CP8P07 is an 8-bit microprocessor with low-power and
high-speed CMOS technology. It is equipped with a
2048*16-bit electrical one time programmable memory
and 72*8-bit data memory. Both program and data
memories can be configured as linear-addressable or
nonlinear-addressable. CP8P07 provides flexible interrupt
handling capability and eight-level deep stack. An
internal 16 MHz oscillator with 5% accuracy is
integrated to reduce cost. With internal divider, this
oscillator can be adopted to replace expensive crystal in
application where time accuracy is not strictly required.
CP8P07 is designed to work in noisy environment,
especially to resist electronic fast transient burst (EFT
burst). Therefore, it is suitable to be used in application
of home appliance motor control. Because CP8P07
operates in a very low current consumption, it is
advantageous in low-power application, like remote
controller and battery-powered system.
2. Features
Table 2-1: Power consumption
Mode
LP(32.768K)
XT(4MHz)
XT(4MHz EMI)
HS(16MHz)
HS(16MHz EMI)
HS(20MHz)
HS(20MHz EMI)
BR16M(8.62MHz)
BR16M(15.62MHz)
BR16M(22.25MHz)
Standby
(WDT disable)
2.2V
2uA
200uA
180uA
X
X
X
X
X
X
X
3.3V
7uA
400uA
340uA
1.6mA
1.4mA
1.8mA
1.6mA
750uA
1.1mA
1.5mA
0.6uA
5.5V
32uA
1mA
0.8mA
4.5mA
3.5mA
5.2mA
4.9mA
1.75mA
2.4mA
3.1mA
VDDMIN
2.2V
2.2V
2.2V
3.0V
3.0V
3.3V
3.3V
3. Pin Description
T0CKI/PA4
1
28
RESET/ VPP
VDD
2
27
OSC1/PA5/RT
OSC2/PA6
NC
3
26
VSS
4
25
PC7
NC
5
24
PC6
PA0
6
23
PC5
PA1
7
22
PC4
PA2
8
21
PC3
PA3
9
20
PC2
19
PC1
CP8P07
46 powerful instructions to ease coding complexity
Except for branches taking place, all instructions
need only one cycle
Memory configuration:
OTP ROM: 2K x 16 bits
RAM: 72 x 8 bits
16-bit wide instructions
8-bit wide data path
Full-range branches without confusing bank select if
in linear addressing mode
Data memory is linear-mapped so that it can be
accessed without bank select firstly when in linear
addressing mode
8/9 special function hardware registers in
non-interrupt/interrupt mode
Interrupt handling
Eight-level deep hardware stack (2/4/8 configurable)
Operation speed: DC – 20 MHz clock input
Bi-directional IO: Port A, B, C
Built-in pull-up: Port B
Wake-up/Interrupt (Port B)
8-bit real time clock/counter (TMR0) with 8-bit
programmable prescaler and overflow interrupt
Readable prescaler counter for 16-bit timer
capability
Power-on Reset (POR)
Device Reset Timer (DRT)
Oscillator Start-up Timer (OST)
Watchdog Timer (WDT) with its own on-chip RC
oscillator (16K@3V 32K@5V)
Configurable WDT wake-up: Reset/Continue
Power saving HALT mode
Oscillator types:
RC4M: Low cost external-RC oscillator
LP32K: Low frequency crystal for power saving
XT4M: Standard crystal/resonator
HS16M: High speed crystal/resonator
BR16M: High accuracy 16MHz built-in OSC (±
5%, after calibration)
Main clock divider (1/2/4/16)
EMI configuration bit to reduce 2nd-order harmonic
power of crystal output
CMOS OTP technology with fully static design
Wide operation voltage and temperature range: 2.2V
to 5.5V, -40 to 85 degree C
I/O Driving capability:
VDD=5.0V
Source Current: -6.0mA (Voh = 4.5v)
Sink Current: 22.0mA (Vol = 0.5v)
VDD=3.0V
Source Current: -2.5mA (Voh = 2.7v)
Sink Current: 10.0mA (Vol = 0.3v)
Low power consumption:
PB0/INT
10
PB1
11
18
PC0
PB2
12
17
PB7
PB3
13
16
PB6
PB4
14
15
PB5
5
Preliminary
Table 3-1: Device Pin Description
Pin #
1
Pin Name
T0CKI/PA4
Pin
Type
I/O
Buffer
Type
CMOS
Description
External timer/counter input
General purpose I/O pin
2
VDD
P
–
Power supply
3
NC
–
–
No connection
4
VSS
P
–
Ground
5
NC
–
–
No connection
6
PA0
I/O
CMOS General purpose I/O pin
7
PA1
I/O
CMOS General purpose I/O pin
8
PA2
I/O
CMOS General purpose I/O pin
9
PA3
I/O
CMOS General purpose I/O pin
10
PB0/INT
I/O
CMOS General purpose I/O pin (IPU)
External interrupt pin
11
PB1
I/O
CMOS General purpose I/O pin (IPU)
12
PB2
I/O
CMOS General purpose I/O pin (IPU)
13
PB3
I/O
CMOS General purpose I/O pin (IPU)
14
PB4
I/O
CMOS General purpose I/O pin (IPU)
Interrupt on change pin
15
PB5
I/O
CMOS General purpose I/O pin (IPU)
Interrupt on change pin
16
PB6
I/O
CMOS General purpose I/O pin (IPU)
Interrupt on change pin
17
PB7
I/O
CMOS General purpose I/O pin (IPU)
Interrupt on change pin
18
PC0
I/O
CMOS General purpose I/O pin
19
PC1
I/O
CMOS General purpose I/O pin
20
PC2
I/O
CMOS General purpose I/O pin
21
PC3
I/O
CMOS General purpose I/O pin
22
PC4
I/O
CMOS General purpose I/O pin
23
PC5
I/O
CMOS General purpose I/O pin
24
PC6
I/O
CMOS General purpose I/O pin
25
PC7
I/O
CMOS General purpose I/O pin
26
OSC2/PA6
I/O
CMOS Crystal oscillator output
General purpose I/O pin
27
OSC1/PA5/RT
I/O
CMOS Crystal oscillator input
General purpose I/O pin
ER16M external resistor analog
input
External clock source input
External RC oscillator input
28
RESET/VPP
I/P
ST
External reset input, active low
Programming voltage input
Abbreviations: I=input, O=output, P=supply, IPU=input pull-up, ST=Schmitt Trigger input
6
Preliminary
4. Architecture
The block diagram of CP8P07 is shown below. Harvard architecture is adopted, which referred to computer
architectures that uses physically separate storage and signal pathways for their instructions and data. Therefore,
program and data memory blocks are separated and can be organized with different bus width. 16-bit and 8-bit wide
buses are used in the program and data memory, respectively. The program memory size of the CP8P07 is 2048 words.
Data memory is divided into two parts: special function registers (SFR) and general purpose registers (GPR) with
the size of 8 and 72 bytes respectively (9 and 71 bytes when in interrupt mode). The ALU is 8 bits wide and can do
operations with operands from A (accumulator register), GPR, SFR, or immediate constant. Register A is a special
register used for ALU operations with no address. The control register (CR) block includes 6 bytes register for
hardware control. It can only be accessed through A which is the default source/destination for most instructions.
Internal power-on reset (POR) and external reset can be used as device reset source. Watchdog timer (WDT),
Timer 0(TMR 0), internal OSC, eight-level deep stack and interrupt handling capability are helpful to improve
system cost and power. Twenty three bi-directional I/O pins are grouped into A, B, and C. Oscillator start-up timer
(OST) increases the reliability of the oscillators.
Figure 4-1: CP8P07 Block Diagram
OST
CLK Module
DIV
Internal
OSC
IO PortA
CLK
IO PortB
IO PortC
1/16,1/4,1/2,1/1
8 - bit Data Bus
ALU
WDT
Central
Control Unit
…
A
CR
GPR
SFR
TMR0
POR
Prog Memory
Stack
INT
PortB
RESET
PC
7
Preliminary
5. Memory Maps and Registers
Memory in CP8P07 includes program memory, configuration memory, data memory, and control registers. There are
two addressing mode in CP8P07: non-linear addressing mode and linear addressing mode. In non-linear addressing
mode, a paging scheme is used. In linear addressing mode, all memory data are addressable without any page
selection.
5.1 Program Memory Map
Program memory contains user program code data in OTP, which is addressed via the 11-bit program counter (PC)
register. Its capacity is 2048 words with length of 16 bits. While the PC overflows during execution, it will cause a
wraparound. Two locations are reserved as default vector. The RESET vector is at 07FFh, and the interrupt vector
is at 0004h.
There are non-linear addressing and linear addressing modes in CP8P07. When LIN (Configuration 1 bit 5) is cleared,
CP8P07 is in non-linear addressing mode. PG1-0 (STATUS bit 5 and 6) are used to access program memory pages.
Figure 5-1 shows the program memory map in non-linear addressing mode.
Figure 5-1: Program Memory Map and Stack in Non-linear Addressing Mode
Program Memory
PC[10:0 ]
Page 0
004h
000h
Interrupt Vector
1FFh
200h
Page 1
3FFh
Stack Level 1
Stack Level 2
Stack Level 3
Stack Level 4
Page 2
Stack Level 5
Stack Level 6
Stack Level 7
Page 3
Stack Level 8
400h
5FFh
600h
RESET Vector
7FFh
8
Preliminary
When LIN (Configuration 1 bit 5) is set, CP8P07 is in linear addressing mode. JMP and JSR instructions can access all
memory data without any page selection. Figure 5-2 shows the program memory map in linear addressing mode.
Figure 5-2: Program Memory Map and Stack in Linear Addressing Mode
PC[10:0]
000h
004h
Stack Level 1
Stack Level 2
Stack Level 3
Stack Level 4
Program Memory
Interrupt Vector
Program Memory
Stack Level 5
Stack Level 6
Stack Level 7
Stack Level 8
7FFh
RESET Vector
Program Counter (PC). The PC is an 11-bit register which contains the OTP address of the next instruction to be
executed. Its 11-bit width can access 2048 words in program address. The PC is auto-incremented after the content
of current address is fetched. The least significant byte of the PC (PCL) is accessible and mapped in data memory
at address 02h. To execute a relative jump, operate PCL and offset in ALU and store result in PCL, which causes
update of PC value. Ways to change program counter includes:
JMP Instruction
CALL Instruction
Relative Branch
(modify PCL)
Reset
Interrupt
RET and RETI
Instructions
Normal Instructions
Linear Addressing Mode (LIN=1)
Non-linear Addressing Mode (LIN=0)
PC = instruction word[10:0]
PC = instruction word[10:0]
PC = +/- offset ( {PG[2:0], PCL}
PC = {PG[1:0],instruction word[8:0]}
PC = {PG[1:0],0,instruction word[7:0]}
PC = +/- offset ( {PG[1:0],0,PCL}
PC )
PC )
PC = 7FFh
PC = 004h
PC = STACK[top]
PC = 7FFh
PC = 004h
PC = STACK[top]
PC = PC + 1
PC = PC + 1
STACK. The CP8P07 includes an eight-level deep hardware stack. The stack consists of eight separate 11-bit register
and a 3-bit counter. The counter always points an empty location. When a subroutine call or an interrupt request
occurs, the content of PC is firstly pushed into STACK and then the counter is incremented. When a return occurs
(either from subroutine or interrupt), the counter is firstly decremented and STACK value pointed by the counter is
then stored back into the PC.
9
Preliminary
5.2 Configuration Memory Map
Configuration memory contains device configuration data in OTP, which is addressed only in device programming
mode.
Table 5-1: Configuration 0
–
–
–
–
–
–
–
–
–
6
OST
5
WDT
4
3
2
DIV
0
CLK
OST: Oscillator start-up timer enable bit
1 = Enable, a delay of 1024 cycles for crystal mode starting up
0 = Disable, a delay of 128 cycles for crystal mode starting up
WDT: Watchdog Timer enable bit
1 = Enable
0 = Disable
DIV: Main clock divider
11 = divide ratio 1
10 = divide ratio 2
01 = divide ratio 4
00 = divide ratio 16
CLK: Clock selection
111 = RC4M (external RC oscillator) with clock output
110 = RC4M (external RC oscillator) with port A6 enable
101 = BR16M (internal RC oscillator) with port A5 enable and clock output
100 = BR16M (internal RC oscillator) with port A5 and A6 enable
011 = ER16M (internal RC oscillator) using ext. R with port A6 enable
010 = HS16M crystal oscillator 4 MHz – 20 MHz
001 = XT4M crystal oscillator 200 KHz – 4 MHz
000 = LP32K crystal oscillator 32 KHz – 200 KHz
Table 5-2: Configuration 1
15
EMI
14
–
13
12
STACK
–
–
–
–
7
WUP
6
INT
5
LIN
4
0
OC
EMI: Crystal oscillator output swing control
1 = Normal swing
0 = Low swing
STACK: Stack level
1x = 8 levels
01 = 4 levels
00 = 2 levels
WUP: Watchdog timer wakes CPU up under HALT mode
1 = CPU continues to execute next instruction after Watchdog Timer is overflow
0 = CPU is reset after Watchdog Timer is overflow
INT: Interrupt mode enable bit
1 = Enable, CPU has interrupt function
0 = Disable
LIN: Linear addressing mode enable bit
1 = Enable
0 = Disable
OC: Internal OSC calibration data
The output frequency of internal OSC is proportional to OC[4:0]. The tuning step is 2.5%.
11111 = Slowest
10
Preliminary
00000 = Fastest
11
Preliminary
5.3 Data Memory Map and Registers
There are two addressing modes for data memory: non-linear addressing mode and linear addressing mode. In
non-linear addressing mode (LIN=0), a banking scheme is used. Data memory banks are accessed using FSR bits
5 and 6. In linear addressing mode (LIN=1), the data memory is linear-mapped without any partition. The
addressing range is from 00h to 7Fh. However, either in non-linear or linear addressing mode, address 00h-0Fh,
20h-2Fh, 40h-4Fh, and 60h-6Fh contain the same data. We can say that memory locations 20h-2Fh, 40h-4Fh, and
60h-6Fh map back to address 00h-0Fh. Data memory contains the General Purpose Registers (GPR) and the
Special Functions Registers (SFR). The General Purpose Registers are used for data under command of the
instructions and can be accessed directly or indirectly. The Special Function Registers have various specific
functions, like addressing control, flags indicator, or peripheral control. CP8P07 contains 8 Special Function Registers
and 72 General Purpose Registers in non-interrupt mode, or 9 Special Function Registers and 71 General Purpose
Registers in interrupt mode. 08h is used as a Special Function Register (INTCON) when in interrupt mode or as a
General Purpose Register when in non-interrupt mode. Figures 5-3 and 5-4 show the SFR & GPR memory map in
non-linear and linear addressing modes.
Figure 5-3: SFR & GPR Memory Map in Non-linear Addressing Mode
FSR[6:5]=00
00h
INDX
01h
02h
TMR0
PCL
STATUS
03h
04h
05h
06h
07h
08h
FSR[6:5]=01
Addresses map
back to addresses
00h – 0Fh
PORTC
INTCON
FSR[6:5]=11
60h
40h
20h
FSR
PORTA
PORTB
FSR[6:5]=10
Addresses map
back to addresses
00h – 0Fh
Addresses map
back to addresses
00h – 0Fh
09h
General Registers
0Fh
10h
General Registers
General Registers
1Fh
General Registers
Bank 1
General Registers
7Fh
5Fh
3Fh
Bank 0
6Fh
70h
4Fh
50h
2Fh
30h
Bank 2
Bank 3
12
Preliminary
Figure 5-4: SFR & GPR Memory Map in Linear Addressing Mode
00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
INDX
TMR0
PCL
STATUS
FSR
PORTA
PORTB
PORTC
INTCON
General Registers
0Fh
10h
General Registers
1Fh
20h
Addresses map back to
addresses 00h - 0Fh
2Fh
30h
General Registers
3Fh
40h
Addresses map back to
addresses 00h - 0Fh
4Fh
50h
General Registers
5Fh
60h
Addresses map back to
addresses 00h - 0Fh
6Fh
70h
General Registers
7Fh
13
Preliminary
Table 5-3: Special Function Registers summary
Address
Label
B7
B6
B5
B4
B3
B2
B1
B0
Value on
POR
Value on
other reset
0000 0000
0000 0000
Address this location for indirect addressing
00h
INDX
xxxx xxxx
uuuu uuuu
Timer 0 counter value
01h
TMR0
1111 1111
1111 1111
PCL7
PCL6
PCL5
PCL4
PCL3
PCL2
PCL1
PCL0
02h
PCL
0001 1xxx
000p puuu
PG2
PG1
PG0
TO_
PD_
Z
H
C
03h
STATUS
1000 0000
uuuu uuuu
Pointer for indirect addressing
04h
FSR
-xxx
xxxx
-uuu uuuu
PA6
PA5
PA4
PA3
PA2
PA1
PA0
05h
PORTA
xxxx
xxxx
uuuu
uuuu
PB7
PB6
PB5
PB4
PB3
PB2
PB1
PB0
06h
PORTB
xxxx xxxx
uuuu uuuu
PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0
07h
PORTC
0000 0000
0000 0000
GIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
08h
INTCON
Abbreviations: x = unknown, u = unchanged, p = value depends on conditions, - = unimplemented, read as ‘0’
Note: 08h is used as a SFR when in interrupt mode or as a GPR when in non-interrupt mode.
INDX (00h)
Indirect data addressing uses the registers INDX(00h) and FSR(04h). INDX is not physically implemented and FSR
is a pointer. Any instruction addressing INDX actually accesses data pointed by the FSR register.
TMR0 (01h)
TMR0 contains the value in the counter of the Timer 0.
PCL (02h)
Program counter (PC) is an 11-bit register, which contains the address of the next instruction to be executed. The
least significant byte of the PC (PC[7:0]) is defined as PCL which is accessible in date memory address 02h.
STATUS (03h)
7
PG2
C:
H:
Z:
PD_:
TO_:
PG2-0:
6
PG1
5
PG0
4
TO_
3
PD_
2
Z
1
H
0
C
Carry flag. This bit is set when a carry or a borrow occurs during arithmetic operations; otherwise it
is clear.
0: No carry-out has occurred
1: A carry-out has occurred
Half carry flag. This bit is set when a carry or a borrow occurs from the lower nibble (the 4th low
order bit) occurs during arithmetic operations; otherwise it is clear.
0: No carry-out has occurred from the lower nibble
1: A carry-out has occurred from the lower nibble
Zero flag. This bit is set if the result of the last arithmetic or logical operation was equal to zero;
otherwise it is clear.
0: The result of an arithmetic or logical operation is not zero
1: The result of an arithmetic or logical operation is zero
Power down bit, read only
0: By executing HALT instruction
1: After power-up, or executing CLRW instruction
Time-out bit, read only
0: Reset by watchdog timer time-out
1: After power-up, or executing CLRW instruction or HALT instruction
Once PCL is modified, the 8-bit PCL and these three bits are copied to the 11-bit PC with the
operation of {PG[2:0], PCL[7:0]}
PC.
FSR (04h)
The FSR is an 8-bit index register used in indirect addressing mode as pointers to memory locations. Any
instruction addressing INDX(00h) actually accesses data pointed by the FSR(04h) register.
PORTA (05h)
PORTA is the value of the I/O port A.
PORTB (06h)
PORTB is the value of the I/O port B.
PORTC (07h)
14
Preliminary
PORTC is the value of the I/O port C.
INTCON(08h)
7
GIE
RBIF:
INTF:
T0IF:
RBIE:
INTE:
T0IE:
GIE:
6
-
5
T0IE
4
INTE
3
RBIE
2
T0IF
1
INTF
0
RBIF
PB7:PB4 interrupt flag bit
0: No interrupt
1: Interrupt occurs on one of PB7:PB4 pins. An edge transition will generate interrupt.
PB0/INT external interrupt flag bit
0: PB0/INT external interrupt does not occur
1: PB0/INT external interrupt occurs, clear by software
Timer 0 overflow interrupt flag bit
0: Timer 0 does not overflow
1: Timer 0 has overflowed, clear by software
PB7:PB4 interrupt enable bit
0: Disable interrupt
1: Enable interrupt
PB0/INT external interrupt enable bit
0: Disable PB0/INT external interrupt
1: Enable PB0/INT external interrupt
Timer 0 overflow interrupt enable bit
0: Disable Timer 0 overflow interrupt
1: Enable Timer 0 overflow interrupt
Global interrupt enable bit
0: Disable all interrupt
1: Enable interrupt function
15
Preliminary
5.4 Control registers
Control registers contain six special function registers, including readable/writable OPTION, OC, TRISA, TRISB,
TRISC registers and read-only PSCCNT register. These registers can only be accessed through A register using
directly addressing. Like load/store instructions in RISC machine, CP8P07 uses PEEK and POKE instruction to load
control registers to A and save A to control registers, respectively.
Figure 5-5: Control Registers Memory Map
00h
01h
OPTION
OC
Unimplemented
05h
06h
07h
TRISA
TRISB
TRISC
Unimplemented
PSC
0Dh
Unimplemented
0Fh
Table 5-4: Control Registers summary
Address
00h
Label
OPTION
B7
B6
B5
B4
RBP
INTE
T0CS T0SE
U_
DG
Internal OSC calibration data
b6
b5
b4
b7
b6
b5
b4
b7
b6
b5
b4
Prescaler counter value
B3
B2
B1
B0
Value on
POR
Value on
other reset
PSA
PS2
PS1
PS0
1111 1111
1111 1111
(1)
000c cccc
uuuu uuuu
01h
OC
b3
b2
b1
b0
-111 1111
-111 1111
05h
TRISA
b3
b2
b1
b0
1111
1111
1111
1111
06h
TRISB
b3
b2
b1
b0
1111 1111
1111 1111
07h
TRISC
0000 0000
0000 0000
0Dh
PSCCNT
Abbreviations: x = unknown, u = unchanged, p = value depends on conditions, - = unimplemented, read as ‘0’
Note 1: The lower 5 bits of OC is loaded from configuration word 1 on POR.
OPTION (00h)
7
RBPU_
PS2-0:
PSA:
T0SE:
6
INTEDG
5
T0CS
4
T0SE
3
PSA
2
PS2
1
PS1
0
PS0
Prescaler divide ratio
PS[2:0] TMR0 WDT
000
2
1
001
4
2
010
8
4
011
16
8
100
32
16
101
64
32
110
128
64
111
256
128
Prescaler assignment bit
0: Prescaler is assigned to Timer 0
1: Prescaler is assigned to WDT
Timer 0 source edge select bit
0: Increment on rising edge of T0CKI pin
1: Increment on falling edge of T0CKI pin
16
Preliminary
T0CS:
Timer 0 clock source select bit
0: T0CKI pin
1: Internal instruction cycle clock
INTDEG: Interrupt edge select bit
0: interrupt on falling edge of PB0/INT pin
1: interrupt on rising edge of PB0/INT pin
RBPU_: Port B pull-up enable bit
0: Port B pull-up are enabled. Note that it works in linear mode (LIN=1).
1: Port B pull-up are disabled
OC (01h)
OC contains internal OSC (Built-in RC16MHz) calibration data. Setting “11111” causes the slowest of internal OSC
and “00000” causes the fastest. The tuning step is 2.5%.
TRISA (05h)
Port A input/output mode selection. ‘1’ is input mode and ‘0’ is output mode.
TRISB (06h)
Port B input/output mode selection. ‘1’ is input mode and ‘0’ is output mode.
TRISC (07h)
Port C input/output mode selection. ‘1’ is input mode and ‘0’ is output mode.
PSCCNT (0Dh)
PSCCNT is a read-only register which contains the value in the counter of the prescaler. The prescaler is
programmable for Timer0 or watchdog timer.
Note: Any read from unimplemented locations returns unknown data.
17
Preliminary
6. Clocks
6.1 Clock System
There are three oscillators integrated in this CPU, including crystal oscillator, external RC oscillator, and internal 16
MHz RC oscillator.
An optional oscillator start-up timer (OST) is used to ensure that the oscillator has started and stabilized. Except for
external RC mode, it provides a delay of 128 or 1024 cycles after oscillator is enable for OST configuration bit being
clear or set, respectively. In external RC mode, a delay of 32 is provided. A clock divider provides divide ratio of 1,
2, 4 or 16. The CPU clock is derived after this divider.
Figure 6-1: Block Diagram of Clock System
OSC2
OSC1
÷4
Crystal
Oscillator
External RC
Oscillator
Oscillator
Start-up Timer
32, 128, 1024
Divider
1, 2, 4, 16
FSYS
Internal
16 MHz RC
Oscillator
Table 6-1: CPU Start-up Time
Mode
HS16M, XT4M, LP32K
RC4M, BR16M, ER16M
Power-up
OST=0
OST=1
16ms+128
16ms+1024
cycles
cycles
16ms+32 cycles 16ms+32 cycles
Wake-up from HALT
OST=0
OST=1
128 cycles
1024 cycles
32 cycles
32 cycles
6.2 Crystal Oscillator (HS16M, XT4M, and LP32K)
The crystal oscillator can be driven by:
External clock
External AT-cut parallel-resonant crystal
External ceramic resonator Crystal
This oscillator works in three modes, including low power crystal mode (LP32K), crystal mode (XT4M), and high
speed crystal (HS16M) mode. Each mode is optimized for a suitable frequency range. A crystal or ceramic
resonator is connected to the OSC1 and OSC2 pins to start oscillation. In addition, when external clock input
operation is required, a clock source can drive OSC1 pin directly.
18
Preliminary
Figure 6-2: Crystal/Resonator Oscillator
OSC1
CL1
OSC2
CL2
Figure 6-3: External Clock Input
OSC1
OSC2
NC
External
Clock
6.3 External RC Oscillator (RC4M)
This RC oscillator consist an external resistor, an external capacitor, a Schmitt trigger comparator, and a NMOS
device. If timing accuracy is no concern, this oscillator offers cost savings. The oscillation frequency depends on
supply voltage, operating temperature, resistor value and capacitor value. The OSC1 pin connects the resistor and
the capacitor. The OSC2 pin can be configured to either output a clock pulse of 1/4 system frequency or be an I/O
pin of PORTA (PA6).
Figure 6-4: External RC Oscillator
VDD
OSC1
REXT
C EXT
OSC2
FSYS/4 or PA 6
6.4 Internal 16MHz RC Oscillator (BR16M and ER16M)
The CP8P07 integrated an internal RC oscillator that provides an 16 MHz output clock at VDD = 5V and 25 °C with an
accuracy of ± 5% after calibration. The resistor can be replaced by an external resistor connected to OSC1 for
better performance over wide temperature range.
The Oscillator Calibration Register (OC) contains the calibration date fetched from the Configuration1[4:0] after
power-up. The OC register (01h) can be modified dynamically while program is running. The output frequency of
internal OSC is proportional to the complement of OC[4:0], that is, the frequency of internal OSC is lowest when
OC[4:0]=0x1F and highest frequency when OC[4:0]=0x00. The tuning step of OC is about 2.5% of 16 MHz.
When this oscillator is chosen as system clock source, the OSC1 pin can be configured as an analog pin which
connects an external resistor or A5 of PORTA. The OSC2 pin can be configured as a clock source of 1/4 system
frequency or PA6 of PORTA.
19
Preliminary
Figure 6-5: Internal RC Oscillator
OSC1
OSC2
REXT or PA5
FSYS/4 or PA 6
REXT
Configuration 0
–
–
–
–
–
–
–
–
–
6
OST
5
WDT
4
3
2
DIV
0
CLK
OST: Oscillator start-up timer enable bit
1 = Enable, a delay of 1024 cycles for crystal mode starting up
0 = Disable, a delay of 128 cycles for crystal mode starting up
DIV: Main clock divider
11 = divide ratio 1
10 = divide ratio 2
01 = divide ratio 4
00 = divide ratio 16
CLK: Clock selection
111 = RC4M (external RC oscillator) with clock output
110 = RC4M (external RC oscillator) with port A6 enable
101 = BR16M (internal RC oscillator) with port A5 enable and clock output
100 = BR16M (internal RC oscillator) with port A5 and A6 enable
011 = ER16M (internal RC oscillator) using ext. R with port A6 enable
010 = HS16M crystal oscillator 4 MHz – 20 MHz
001 = XT4M crystal oscillator 200 KHz – 4 MHz
000 = LP32K crystal oscillator 32 KHz – 200 KHz
Configuration 1
15
14
13
12
EMI
–
STACK
–
–
–
–
7
WUP
6
INT
5
LIN
4
0
OC
EMI: Crystal oscillator output swing control
1 = Normal swing
0 = Low swing
OC (01h)
OC contains internal OSC (Built-in RC16MHz) calibration data. Setting “11111” causes the slowest of internal OSC
and “00000” causes the fastest. The tuning step is 2.5%.
20
Preliminary
7. I/O Ports
The I/O registers (PORTA, PORTB, and PORTC) and I/O control registers (TRISA, TRISB, TRISC) are used to
manipulate I/O pins. I/O register can be read and written. However, read instructions always read the states of the
corresponding I/O pins. All input buffers are CMOS type.
7.1 PORTA
The width of the PORTA register varies from 5 to 7 bits, which depends on the function of the OSC1/PA5 and
OSC2/PA6 pins. Circuit of PA4/T0CKI, PA[3:0] pins and corresponding I/O register are shown in Figure 7-1. The
PA5 and PA6 pin diagram shown in Figure 7-2 has two additional disable gates when these ports are not enabled.
When PA5 or PA6 is not enabled, it is read as ‘0’.
7.2 PORTB
PORTB is an 8-bit I/O Register. Each PB pin integrates a weak pull-up function, which can be turn on by clearing
RBPU_ bit in OPTION register in linear addressing mode (LIN=1). In output mode, the pull-up will be turned off
automatically. PB[7:4] pins have an interrupt-on-change feature. Only input pins can cause interrupt to occur. To
use the interrupt-on-change feature, user needs to read PORTB first. The value on PORTB will be latched. After
that, the input pins of PB[7:4] are compared with the old value latched on the last read of PORTB. An interrupt will
be generated when a mismatch occurs. PB0/INT is an external interrupt input pin. Figure 7-3, 7-4, and 7-5 show the
PB pins circuit diagram.
7.3 PORTC
PORTC is an 8-bit I/O Register. The PC pins circuit diagram is shown in Figure 7-1.
Figure 7-1: Block Diagram of PA[4:0] and PC[7:0] Pins
WRITE
BUS
D
Q
Pin
PWR
CLK
PORT REG
D
TWR
READ
BUS
Q
CMOS
Buffer
CLK
TRIS REG
21
Preliminary
Figure 7-2: Block Diagram of PA5 and PA6 Pins
WRITE
BUS
D
Q
Pin
PWR
CLK
PORT REG
D
Q
Disable
TWR
READ
BUS
CLK
CMOS
Buffer
TRIS REG
To Oscillators
22
Preliminary
Figure 7-3: Block Diagram of PB0 Pins
LIN
WRITE
BUS
VDD
Weak
Pull-up
RBPU_
D
Q
Pin
PWR
CLK
PORT REG
D
TWR
READ
BUS
Q
CMOS
Buffer
CLK
TRIS REG
INTDEG
INT
Figure 7-4: Block Diagram of PB[3:1] Pins
LIN
VDD
WRITE
BUS
Weak
Pull-up
RBPU_
D
Q
Pin
PWR
CLK
PORT REG
D
TWR
READ
BUS
Q
CMOS
Buffer
CLK
TRIS REG
23
Preliminary
Figure 7-5: Block Diagram of PB[7:4] Pins
LIN
VDD
WRITE
BUS
Weak
Pull-up
RBPU_
D
Q
Pin
PWR
CLK
PORT REG
D
TWR
READ
BUS
Q
CMOS
Buffer
CLK
TRIS REG
D
READ PB
Q
CLK
To Interrupt
PORTA (05h)
7
-
6
PA6
5
PA5
4
PA4
3
PA3
2
PA2
1
PA1
0
PA0
5
PB5
4
PB4
3
PB3
2
PB2
1
PB1
0
PB0
5
PC5
4
PC4
3
PC3
2
PC2
1
PC1
0
PC0
PORTA is the value of the I/O port A.
PORTB (06h)
7
PB7
6
PB6
PORTB is the value of the I/O port B.
PORTC (07h)
7
PC7
6
PC6
PORTC is the value of the I/O port C.
24
Preliminary
OPTION Accessed by PEEK/POKE Instruction
7
6
5
4
RBPU_
INTEDG
T0CS
T0SE
RBPU_:
3
PSA
2
PS2
1
PS1
0
PS0
Port B pull-up enable bit
0: Port B pull-up are enabled. Note that it works in linear addressing mode (LIN=1).
1: Port B pull-up are disabled
TRISA Accessed by PEEK/POKE Instruction
7
6
5
4
b6
b5
b4
3
b3
2
b2
1
b1
0
b0
2
b2
1
b1
0
b0
2
b2
1
b1
0
b0
Port A input/output mode selection. ‘1’ is input mode and ‘0’ is output mode.
TRISB Accessed by PEEK/POKE Instruction
7
6
5
4
b7
b6
b5
b4
3
b3
Port B input/output mode selection. ‘1’ is input mode and ‘0’ is output mode.
TRISC Accessed by PEEK/POKE Instruction
7
6
5
4
b7
b6
b5
b4
3
b3
Port C input/output mode selection. ‘1’ is input mode and ‘0’ is output mode.
25
Preliminary
8 On-Chip Peripherals
8.1 Timer 0
The Timer0 is an 8-bit up-count counter. It is readable and writable. The Timer0 has internal or external clock
source. Besides, an 8-bit readable prescaler is provided to Timer0 if PSA (OPTION.3) is 1. When selecting clock
source input from T0CKI, Timer0 will increment either on every rising or falling edge of T0CKI according to the
setting of T0SE (OPTION.4).
Figure 8-1: Timer0 Block Diagram
R/W
Fosc/4
0
8-bit
Prescaler
T0CKI
T0SE
0
1
8-bit
Up-count Timer
SYN
TMR0
1
T0CS
PSA
TMR0 (01h)
7
b7
6
b6
5
b5
4
b4
3
b3
2
b2
1
b1
0
b0
3
PSA
2
PS2
1
PS1
0
PS0
3
b3
2
b2
1
b1
0
b0
TMR0 contains the value in the counter of the Timer 0.
OPTION Accessed by PEEK/POKE Instruction
7
6
5
4
RBPU_
INTEDG
T0CS
T0SE
PS2-0:
PSA:
T0SE:
T0CS:
Prescaler divide ratio
PS[2:0] TMR0 WDT
000
2
1
001
4
2
010
8
4
011
16
8
100
32
16
101
64
32
110
128
64
111
256
128
Prescaler assignment bit
0: Prescaler is assigned to Timer 0
1: Prescaler is assigned to WDT
Timer 0 source edge select bit
0: Increment on rising edge of T0CKI pin
1: Increment on falling edge of T0CKI pin
Timer 0 clock source select bit
0: T0CKI pin
1: Internal instruction cycle clock
PSCCNT Accessed by PEEK/POKE Instruction
7
6
5
4
b7
b6
b5
b4
PSCCNT is a read-only register which contains the value in the counter of the prescaler.
26
Preliminary
8.2 Watchdog Timer
Watchdog Timer is enabled when bit 5 of Configuration 0 is set. The period of time-out (WDTOV) is 16ms (with no
prescaler). If the prescaler is assigned to the Watchdog Timer, it causes a longer time-out period depending on the
setting on PS[2:0] of OPTION register. A reset is generated when Watchdog Timer is overflow. The TO_ bit in the
STATUS register will be cleared upon a Watchdog Timer time-out. The CLRW and HALT instructions clear
Watchdog Timer.
Figure 8-2: Watchdog Timer Block Diagram
PS[2:0]
Fosc/4
To Timer0
0
0
T0CKI
T0SE
8-bit
Prescaler
1
1
1
WDTOV
0
T0CS
PSA
WDT
Watchdog Timer
Configuration 0
–
–
–
–
–
–
–
–
–
–
–
7
WUP
6
OST
5
WDT
4
6
INT
5
LIN
4
3
2
DIV
0
CLK
WDT: Watchdog timer enable bit
1 = Enable
0 = Disable
Configuration 1
15
14
13
12
EMI
–
STACK
–
–
0
OC
WUP: Watchdog timer wakes CPU up under HALT mode
1 = CPU continues to execute next instruction after Watchdog Timer is overflow
0 = CPU is reset after Watchdog Timer is overflow
OPTION Accessed by PEEK/POKE Instruction
7
6
5
4
RBPU_
INTEDG
T0CS
T0SE
PS2-0:
PSA:
3
PSA
2
PS2
1
PS1
0
PS0
Prescaler divide ratio
PS[2:0] TMR0 WDT
000
2
1
001
4
2
010
8
4
011
16
8
100
32
16
101
64
32
110
128
64
111
256
128
Prescaler assignment bit
0: Prescaler is assigned to Timer 0
1: Prescaler is assigned to WDT
27
Preliminary
9 Special Features
9.1 Interrupts
In interrupt mode there are three sources of interrupt: external INT, interrupt from PORTB, and interrupt from
time-out of Timer 0. When the global interrupt enable bit (GIE) is set and an interrupt condition occurs, its
corresponding flag in register file 08h (INTCON) will be set to ‘1’. If its corresponding interrupt enable bit in register
file 08h (INTCON) is set, it will request to go into interrupt service routine. After it enters Interrupt Service Routine
(ISR), the hardware will clear GIE and will not generate any interrupt request even though there is another interrupt
to prevent recursive interrupts. Within ISR, user needs to judge from INTCON to decide which kind of interrupt
and then interrupt flag needs to be cleared by program. If multiple interrupt sources request simultaneously, the
priority should be determined by program. When the first ISR is complete and returns from RETI, it enters ISR
again if there is another interrupt request until all interrupts are taking care.
GIE
RBIF
RBIE
INTERRUPT
T0IF
T0IE
WAKE-UP
INTF
INTE
INTCON(08h)
7
GIE
RBIF:
INTF:
T0IF:
RBIE:
INTE:
T0IE:
GIE:
6
-
5
T0IE
4
INTE
3
RBIE
2
T0IF
1
INTF
0
RBIF
PB7:PB4 interrupt flag bit
0: No interrupt
1: Interrupt occurs on one of PB7:PB4 pins. An edge transition will generate interrupt.
PB0/INT external interrupt flag bit
0: PB0/INT external interrupt does not occur
1: PB0/INT external interrupt occurs, clear by software
Timer 0 overflow interrupt flag bit
0: Timer 0 does not overflow
1: Timer 0 has overflowed, clear by software
PB7:PB4 interrupt enable bit
0: Disable interrupt
1: Enable interrupt
PB0/INT external interrupt enable bit
0: Disable PB0/INT external interrupt
1: Enable PB0/INT external interrupt
Timer 0 overflow interrupt enable bit
0: Disable Timer 0 overflow interrupt
1: Enable Timer 0 overflow interrupt
Global interrupt enable bit
0: Disable all interrupt
1: Enable interrupt function
28
Preliminary
10 Instruction Set
XXX dest, src
dest= 0~127 or A
src= 0~127 or A
XXX A, #k
dest= A
Table 10-1:
CP8P07 Instruction Set
Instruction
Arithmetic
ADC
A, r
ADC
r, A
ADC
A, #k
ADD
A, r
ADD
r, A
ADD
A, #k
DAA
A, A
DAA
r, A
DAA
A, r
DAA
r, r
SBC
A, r
SBC
r, A
SBC
A, #k
SUB
A, r
SUB
r, A
SUB
A, #k
Flag
Cycles
C, H, Z
C, H, Z
C, H, Z
C, H, Z
C, H, Z
C, H, Z
C
C
C
C
C, H, Z
C, H, Z
C, H, Z
C, H, Z
C, H, Z
C, H, Z
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Instruction
Logic Operation
ANL
A, r
ANL
r, A
ANL
A, #k
CPL
A, A
CPL
r, A
CPL
A, r
CPL
r, r
ORL
A, r
ORL
r, A
ORL
A, #k
XNL
A, r
XNL
r, A
XNL
A, #k
XRL
A, r
XRL
r, A
XRL
A, #k
Flag
Cycles
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Instruction
Rotate & Shift
ASR
A, A
ASR
r, A
ASR
A, r
ASR
r, r
RL
A, A
RL
r, A
RL
A, r
RL
r, r
RLC
A, A
RLC
r, A
RLC
A, r
RLC
r, r
RR
A, A
RR
r, A
RR
A, r
RR
r, r
RRC
A, A
Flag
Cycles
C, Z
C, Z
C, Z
C, Z
C
C
C
C
C
C
C
C
C
C
C
C
C
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Description
r+A+C A
r+A+C r
k + A+C A
r+A A
r+A r
k+A A
A DAA A
A DAA r
r DAA A
r DAA r
r – A –C A
r – A –C
r
k–A–C A
r–A A
r–A r
k–A A
Description
r&A A
r&A r
k&A A
~A A
~A r
~r A
~r
r
r|A A
r|A r
k|A A
~(r ⊕ A) A
~(r ⊕ A)
r
~(k ⊕ A) A
r⊕A A
r⊕A r
k⊕A A
Description
{ A[7], A[7:1]} A, A[0] C
{ A[7], A[7:1]}
r, A[0]
C
{ r[7], r[7:1]} A, r[0]
C
{ r[7], r[7:1]}
r, r[0]
C
{A[6:0], A[7]} A, A[7]
C
{A[6:0], A[7]}
r, A[7]
C
{r[6:0], r[7]} A, r[7]
C
{r[6:0], r[7]}
r, r[7]
C
{A[6:0], C} A, A[7]
C
{A[6:0], C}
r, A[7]
C
{r[6:0], C} A, r[7]
C
{r[6:0], C}
r, r[7]
C
{A[0], A[7:1]} A, A[0]
C
{A[0], A[7:1]}
r, A[0]
C
{r[0], r[7:1]} A, r[0]
C
{r[0], r[7:1]} r, r[0]
C
{C, A[7:1]} A, A[0]
C
29
Preliminary
RRC
RRC
RRC
SHL
SHL
SHL
SHL
SHR
SHR
SHR
SHR
r, A
A, r
r, r
A, A
r, A
A, r
r, r
A, A
r, A
A, r
r, r
C
C
C
C, Z
C, Z
C, Z
C, Z
C, Z
C, Z
C, Z
C, Z
1
1
1
1
1
1
1
1
1
1
1
Instruction
Bit Operation
RMB0-7
A
RMB0-7
r
SMB0-7
A
SMB0-7
r
Flag
Cycles
Instruction
Data Move
MOV
r, A
MOV
A, r
MOV
A, #k
PEEK
r
POKE
r
Flag
1
1
1
1
{C, A[7:1]}
r, A[0]
{C, r[7:1]} A, r[0]
{C, r[7:1]}
r, r[0]
{A[6:0], 0} A, A[7]
{A[6:0], 0} r, A[7]
{r[6:0], 0} A, r[7]
{r[6:0], 0}
r, r[7]
{0, A[7:1]} A, A[0]
{0, A[7:1]}
r, A[0]
{0, r[7:1]} A, r[0]
{0, r[7:1]}
r, r[0]
C
C
C
C
C
C
C
C
C
C
C
Description
0
0
1
1
A[0-7]
r[0-7]
A[0-7]
r[0-7]
Cycles
Description
1
1
1
1
1
A r
r A
k A
CR[r] A
A CR[r]
Instruction
Flag
Increment & Decrement
DEC
A, A
Z
DEC
r, A
Z
DEC
A, r
Z
DEC
r, r
Z
INC
A, A
Z
INC
r, A
Z
INC
A, r
Z
INC
r, r
Z
Cycles
Description
Instruction
Branch
DSZ
A, A
DSZ
r, A
DSZ
A, r
DSZ
r, r
ISZ
A, A
ISZ
r, A
ISZ
A, r
ISZ
r, r
JMP
k
Cycles
Description
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
2
A -1 A, skip if 0
A -1
r, skip if 0
r -1 A, skip if 0
r -1
r, skip if 0
A +1 A, skip if 0
A +1
r, skip if 0
r +1 A, skip if 0
r +1
r, skip if 0
{status[6:5],k[8:0]}
PC if LIN=0.
{k[10:0]}
PC if LIN=1.
PC + 1
STACK[top],
{status[6:5], 0, k[7:0]}
PC if LIN=0.
{k[10:0]}
PC if LIN=1.
STACK[top]
PC
k A, STACK[top] PC
1 GIE, STACK[top] PC
Skip if A[0-7] = 0
Skip if r[0-7] = 0
Skip if A[0-7] ≠ 0
Skip if r[0-7] ≠ 0
Skip if A = r
Skip if A= k
Skip if A > r
SKip if A > k
Skip if A ≥ r
SKip if A ≥ k
Skip if A < r
SKip if A < k
Skip if A ≤ r
SKip if A ≤ k
JSR
RET
RET
RETI
SBR0-7
SBR0-7
SBS0-7
SBS0-7
SE
SE
SG
SG
SGE
SGE
SL
SL
SLE
SLE
k
#k
A
r
A
r
r
#k
r
#k
r
#k
r
#k
r
#k
Z
Z
Flag
1
1
1
1
1
1
1
1
2
2
2
2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
1 or 2
A -1 A
A -1
r
r -1 A
r -1
r
A +1 A
A +1
r
r +1 A
r +1
r
30
Preliminary
SNE
SNE
r
#k
Instruction
Miscellaneous
CLR
A
CLR
r
CLRW
HALT
NOP
SET
SET
SWAP
SWAP
SWAP
SWAP
TEST
TEST
XCH
A
r
A, A
r, A
A, r
r, r
A
r
r
1 or 2
1 or 2
Skip if A ≠ r
SKip if A ≠ k
Flag
Cycles
Description
Z
Z
TO_,
PD_
TO_,
PD_
1
1
1
Z
Z
Z
Z
1
1
1
1
1
1
1
1
1
1
1
0 A
0
r
0
WDT, 0
WDT prescaler
1
TO_, 1
PD_
0
WDT, 0
WDT prescaler
1
TO_, 0
PD_
No operation
0xFF A
0xFF
r
{A[3:0], A[7:4]} A
{A[3:0], A[7:4]}
r
{r[3:0], r[7:4]} A
{r[3:0], r[7:4]}
r
A A
r
r
A
r
31
Preliminary
10.1 Instruction Description
ADC
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Add A and Reg and Carry
ADC X, Y
1
0 ≤ X ≤ 127
Y = X or A
X + Y + C -> Y
C, H, Z
Add A with register X and C. Result
is stored back in X or A.
ADC
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Add A and literal and Carry
ADC A, #k
1
0 ≤ k ≤ 255
k + A + C -> A
C, H, Z
Add A with 8-bit literal ‘k’ and C.
Result is stored back in A.
ADD
Format:
Cycles:
Operands:
Add A and Reg
ADD X, Y
1
0 ≤ X ≤ 127
Y = X or A
X + Y -> Y
C, H, Z
Add A with register X. Result is
stored back in X or A.
Operations:
Flag Affected:
Description:
ADD
Binary:
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
ANL
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
ANL
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Add A and literal
1111 0001 kkkk kkkk
ADD A, #k
1
0 ≤ k ≤ 255
k + A -> A
C, H, Z
Add A with 8-bit literal ‘k’. Result is
stored back in A.
Logic AND A with Reg
ANL X, Y
1
0 ≤ X ≤ 127
Y = X or A
X & Y -> Y
Z
Logic AND A with register X. Result
is stored back in X or A.
Logic AND A with literal
ANL A, #k
1
0 ≤ k ≤ 255
k & A -> A
Z
Logic AND A with 8-bit literal ‘k’.
Result is stored back in A.
ASR
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Shift right arithmetic
ASR X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
{X[7], X[7:1]} -> Y, X[0] -> C
C, Z
Shift register X one bit from left to
right arithmetically. The MSB of X is
stay unchanged and LSB of X is
moved to C. Result is stored back
in X or A.
CLR
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Clear register
CLR X
1
X = A or 0 ≤ X ≤ 127
0 -> X, 1 -> Z
Z
Register X is clear and Z is set.
CLRW
Format:
Cycles:
Operands:
Operations:
Clear watchdog timer
CLRW
1
None
0 -> WDT, 0 -> WDT prescaler
1 -> TO_ ->PD_
TO_, PD_
Clear watchdog time and prescaler
of the WDT. Flags TO_ and PD_
are set.
Flag Affected:
Description:
CPL
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
DAA
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Complement
CPL X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
~X -> Y
Z
Complement X. Result is stored
back in X or A.
Decimal-adjust after addition
DAA X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
If X[3:0] > 9 or H = 1
X[3:0] + 6 -> Y[3:0]
else X[3:0] -> Y[3:0]
If X[7:4] > 9 or C = 1
X[7:4] + 6 -> Y[7:4]
else X[7:4] -> Y[7:4]
C
Adjust data in register X from
hexadecimal to decimal. Result is
stored back in X or A.
32
Preliminary
DEC
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
DSZ
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
HALT
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
INC
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
ISZ
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Decrement
DEC X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
X – 1 -> Y
Z
Decrement X. Result is stored back
in X or A.
Decrement, skip if 0
DSZ X, Y
1 (2)
0 ≤ X ≤ 127 or X = A
Y = X or A
X – 1 -> Y, skip if 0
None
Decrement X. Result is stored back
in X or A. If result is 0, skip next
instruction by executing a NOP.
Standby
HALT
1
None
0 -> WDT, 0 -> WDT prescaler
1 -> TO_, 0 -> PD_
TO_, PD_
Clear watchdog time and prescaler
of the WDT. Flags TO_ and PD_
are set. Then the device is put into
power-down mode and the
oscillator stopped.
Increment
INC X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
X + 1 -> Y
Z
Increment X. Result is stored back
in X or A.
Increment, skip if 0
ISZ X, Y
1 (2)
0 ≤ X ≤ 127 or X = A
Y = X or W
X + 1 -> Y, skip if 0
None
Increment X. Result is stored back
in X or A. If result is 0, skip next
instruction by executing a NOP.
JMP
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
JSR
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Unconditional branch
JMP k
2
0 ≤ k ≤ 2047
{Status[6:5],K[8:0]}
PC if LIN=0,
K[10:0] -> PC if LIN=1
None
JMP is an unconditional branch.
The immediate address k is loaded
into PC.
Call subroutine
JSR k
2
0 ≤ k ≤ 2047
PC + 1 -> STACK[top],
{Status[6:5],0,K[7:0]}
PC if
LIN=0,
K[10:0] -> PC if LIN=1
None
Call subroutine. Return address
(PC+1) is pushed onto the STACK.
The immediate address k is loaded
into PC.
MOV
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Move between Register and A
MOV X, A
1
0 ≤ X ≤ 127
A -> X
MOV
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Move between Register and A
MOV A, X
1
0 ≤ X ≤ 127
X -> A
Z
Move X to A.
MOV
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Move literal to A
MOV A, #k
1
0 ≤ k ≤ 255
k -> A
None
Move 8-bit literal ‘k’ to A.
NOP
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
No Operation
NOP
1
None
None
None
No operation.
Move A to X.
33
Preliminary
Logic OR A with Reg
ORL X, Y
1
0 ≤ X ≤ 127
Y = X or A
X | Y -> Y
Z
Logic OR A with register X. Result
is stored back in X or A.
RETI
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Return from interrupt
RETI
2
None
1 -> GIE, STACK[top] -> PC
None
Return from interrupt. Set GIE flag.
The top of the stack is poped and
loaded into PC.
ORL
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Logic OR A with literal
ORL A, # k
1
0 ≤ k ≤ 255
k | A -> A
Z
Logic OR A with 8-bit literal ‘k’.
Result is stored back in A.
RL
Format:
Cycles:
Operands:
PEEK
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Read value from CM
PEEK X
1
0 ≤ X ≤ 15
CR[X] -> A
Z
Read value from control register
and store back in A.
Rotate left
RL X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
{X[6:0], X[7]} -> Y, X[7] -> C
C
Rotate register X one bit from right
to left. Result is stored back in X or
A. The MSB of X is also moved to
C.
POKE
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Write A to CM
POKE X
1
0 ≤ X ≤ 15
A -> CR[X]
Z
Write A to control register.
RET
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Return from subroutine
RET
2
None
STACK[top] -> PC
None
Return from subroutine. The top of
the stack is poped and loaded into
PC.
RET
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Return with literal in A
RET #k
2
0 ≤ k ≤ 255
K -> A, STACK[top] -> PC
None
Return from interrupt. 8-bit literal ‘k’
is stored in A. The top of the stack
is poped and loaded into PC.
ORL
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Operations:
Flag Affected:
Description:
RLC
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Rotate left through carry
RLC X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
{X[6:0], C} -> Y, X[7] -> C
C
Rotate register X one bit from right
to left through carry flag. The LSB
of X is replaced by C flag and the
MSB value is moved to C flag.
Result is stored back in X or A.
RMB0-7
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Bit clear
RMB0-7 X
1
X = A or 0 ≤ X ≤ 127
0 -> X[b]
None
Bit ‘b’ in register X is clear.
RR
Format:
Cycles:
Operands:
Rotate right
RR X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
{X[0], X[7:1]} -> Y, X[0] -> C
C
Rotate register X one bit from left to
right. The LSB of X is also moved to
C. Result is stored back in X or A.
Operations:
Flag Affected:
Description:
34
Preliminary
RRC
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
SBC
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Rotate right through carry
RRC X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
{C, X[7:1]} -> Y, X[0] -> C
C
Rotate register X one bit from left to
right through carry flag. The MSB of
X is replaced by C flag and the LSB
value is moved to C flag. Result is
stored back in X or A.
Subtract A from Reg and Carry
SBC X, Y
1
0 ≤ X ≤ 127
Y = X or A
X – Y – C -> Y
C, H, Z
Subtract A from register X and C.
Result is stored back in X or A.
SBC
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Subtract A from literal and Carry
SBC A, #k
1
0 ≤ k ≤ 255
k – A – C -> A
C, H, Z
Subtract A from 8-bit literal ‘k’ and
C. Result is stored back in A.
SBR0-7
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Bit test, skip if zero
SBR0-7 X
1 (2)
X = A or 0 ≤ X ≤ 127
Skip if X[b] = 0
None
If X[b] = 0, skip next instruction by
executing a NOP.
SBS0-7
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Bit test, skip if not zero
SBS0-7 X
1 (2)
X = A or 0 ≤ X ≤ 127
Skip if X[b] ≠ 0
None
If X[b] ≠ 0, skip next instruction by
executing a NOP.
SE
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if equal
SE X
1 (2)
0 ≤ X ≤ 127
Skip if A = X
None
If A = X, skip next instruction by
executing a NOP.
SE
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if equal literal
SE #k
1 (2)
0 ≤ k ≤ 255
Skip if A = k
None
If A = k, skip next instruction by
executing a NOP.
SET
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Set register
SET X
1
X = A or 0 ≤ X ≤ 127
0xFF -> X
Z
Register X is set.
SG
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if greater
SG X
1 (2)
0 ≤ X ≤ 127
Skip if A > X
None
If A > X, skip next instruction by
executing a NOP.
SG
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if greater than literal
SG #k
1 (2)
0 ≤ k ≤ 255
Skip if A > k
None
If A > k, skip next instruction by
executing a NOP.
SGE
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if greater or equal
SGE X
1 (2)
0 ≤ X ≤ 127
Skip if A ≥ X
None
If A ≥ X, skip next instruction by
executing a NOP.
SGE
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if greater than or equal literal
SGE #k
1 (2)
0 ≤ k ≤ 255
Skip if A ≥ k
None
If A ≥ k, skip next instruction by
executing a NOP.
35
Preliminary
SHL
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
SHR
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
SL
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Shift left
SHL X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
{X[6:0], 0} -> Y, X[7] -> C
C, Z
Shift register X one bit from right to
left. The MSB of X is moved to C
and 0 is moved to LSB of X. Result
is stored back in X or A.
Shift right logical
SHR X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
{0, X[7:1]} -> Y, X[0] -> C
C, Z
Shift register X one bit from left to
right logically. 0 is moved to MSB of
X and LSB of X is moved to C.
Result is stored back in X or A.
Skip if less
SL X
1 (2)
0 ≤ X ≤ 127
Skip if A < X
None
If A < X, skip next instruction by
executing a NOP.
SL
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if less than literal
SL #k
1 (2)
0 ≤ k ≤ 255
Skip if A < k
None
If A < k, skip next instruction by
executing a NOP.
SLE
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if less or equal
SLE X
1 (2)
0 ≤ X ≤ 127
Skip if A ≤ X
None
If A ≤ X, skip next instruction by
executing a NOP.
SLE
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if less than or equal literal
SLE #k
1 (2)
0 ≤ k ≤ 255
Skip if A ≤ k
None
If A ≤ k, skip next instruction by
executing a NOP.
SMB0-7
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Bit set
SMB0-7 X
1
X = A or 0 ≤ X ≤ 127
1 -> A[b]
None
Bit ‘b’ in register A is set.
SNE
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if not equal
SNE X
1 (2)
0 ≤ X ≤ 127
Skip if A ≠ X
None
If A ≠ X, skip next instruction by
executing a NOP.
SNE
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Skip if not equal literal
SNE #k
1 (2)
0 ≤ k ≤ 255
Skip if A ≠ k
None
If A ≠ k, skip next instruction by
executing a NOP.
SUB
Format:
Cycles:
Operands:
Subtract A from Reg
SUB X, Y
1
0 ≤ X ≤ 127
Y = X or A
X – Y -> Y
C, H, Z
Subtract A from register X. Result is
stored back in X or A.
Operations:
Flag Affected:
Description:
SUB
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Subtract A from literal
SUB A, #k
1
0 ≤ k ≤ 255
k – A -> A
C, H, Z
Subtract A from 8-bit literal ‘k’.
Result is stored back in A.
SWAP
Format:
Cycles:
Operands:
Swap nibbles
SWAP X, Y
1
0 ≤ X ≤ 127 or X = A
Y = X or A
{X[3:0], X[7:4]] -> Y
None
The upper and lower nibbles of X
are exchange. Result is stored
back in X or A.
Operations:
Flag Affected:
Description:
36
Preliminary
TEST
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Test Register
TEST A
1
TEST
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Test Register
TEST X
1
0 ≤ X ≤ 127
X -> X
Z
Test a file register. Z flag is affected.
XCH
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Exchange between A and Reg
XCH X
1
0 ≤ X ≤ 127
A <-> X
None
The contents of A and register X are
exchanged.
XNL
Format:
Cycles:
Operands:
Logic exclusive NOR A with Reg
XNL X, Y
1
0 ≤ X ≤ 127
Y = X or A
~(X ⊕ Y) -> X
Z
Logic exclusive NOR A with register
X. Result is stored back in X or A.
Operations:
Flag Affected:
Description:
A -> A
Z
Test A. Z flag is affected.
XNL
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Logic exclusive NOR A with literal
XNL A, #k
1
0 ≤ k ≤ 255
~(k ⊕ A) -> A
Z
Logic exclusive NOR A with 8-bit
literal ‘k’. Result is stored back in A.
XRL
Format:
Cycles:
Operands:
Logic exclusive OR A with Reg
XRL X, Y
1
0 ≤ X ≤ 127
Y = X or A
X ⊕ Y -> X
Z
Logic exclusive OR A with register
X. Result is stored back in X or A.
Operations:
Flag Affected:
Description:
XRL
Format:
Cycles:
Operands:
Operations:
Flag Affected:
Description:
Logic exclusive OR A with literal
XRL A, #k
1
0 ≤ k ≤ 255
k ⊕ A -> A
Z
Logic exclusive OR A with 8-bit
literal ‘k’. Result is stored back in A.
37
Preliminary
11. Absolute Maximum Ratings
Supply Voltage ……………... -0.3V~5.5V
Input Voltage ……… VSS-0.3V~VDD+0.3V
Storage temperature ………...… -50℃~125℃
Operation temperature ……….…-40℃~85℃
(Industrial Grade)
12. DC Characteristics
Symbol
Parameter
VDD1 Operating Voltage
VDD2 Operating Voltage
VDD3 Operating Voltage
FOSC
Main Oscillator Frequency
VDD
5V
Conditions
XT4M
LP32K
HS16M
XT4M
LP32K
HS16M
Min.
2.2
2.2
3.0
0.2
32
4
TA=25℃
Typ. Max. Unit
5.5
V
5.5
V
5.5
V
4 MHz
200 KHz
20 MHz
1
mA
0.4
mA
4.5
mA
1.6
mA
32
uA
7
uA
1
uA
1
uA
-6
mA
-2.5
mA
20
mA
10
mA
KΩ
11
KΩ
32
5V
3V
5V
Operating Current 2
3V
5V
Operating Current 3
3V
5V
Standby Current
3V
I/O Port Source Current (PA, PB, 5V
PC)
3V
I/O Port Sink Current (PA, PB,
5V
PC)
3V
5V
PB Pull-high R
3V
VOH=4.5V
VOH=2.7V
VOL=0.5V
VOL=0.3V
-
VIL1
Input Low Voltage for Input Port
-
-
0
-
VIH1
Input High Voltage for Input Port
-
-
0.7VDD
-
VIL2
Input Low Voltage for RESET_
-
-
0
-
VIH2
Input High Voltage for RESET_
-
-
0.9VDD
-
IDD1
IDD2
IDD3
ISTB
IOH
IOL
RPH
Operating Current 1
XT4M (4MHz)
HS16M (16MHz)
LP32K (32KHz)
System halt, WDT disable
-
0.3VDD V
VDD
V
0.4VDD V
VDD
V
38