Skip to content
Surf Wiki
Save to docs
general/microcontrollers

From Surf Wiki (app.surf) — the open knowledge base

COP8

8-bit microcontroller


8-bit microcontroller

FieldValue
nameNational Semiconductor COP8
produced-start
numinstructions69
data-width8 (RAM), 8 (ROM)
address-width8 (RAM), 15 (ROM)
slowest0slow-unit = Hz
fastest2fast-unit = MHz
manuf1National Semiconductor
applicationEmbedded
archCOP8
pack120, 28, and 40-pin DIP; 16, 20, and 28 pin SOIC; 44-pin PLCC
predecessorCOP400
successornone

|produced-start = |produced-end = |data-width = 8 (RAM), 8 (ROM) |address-width = 8 (RAM), 15 (ROM)

The National Semiconductor COP8 is an 8-bit CISC core microcontroller. COP8 is an enhancement to the earlier COP400 4-bit microcontroller family. COP8 main features are:

  • Large amount of I/O pins
  • Up to 32 KB of Flash memory/ROM for code and data
  • Very low EMI
  • Many integrated peripherals (meant as single chip design)
  • In-System Programming
  • Free assembler toolchain. Commercial C compilers available
  • Free Multitasking OS and TCP/IP stack
  • Peak of 2 million instructions per second

The COP8 has a basic instruction cycle time 1/10 of the clock frequency; a maximum 10 MHz clock will result in a maximum 1 MHz instruction execution rate. (The 10 MHz clock is used directly by some timer peripherals.) The maximum instruction execution rate is 1 cycle per byte, and most 1-byte instructions operate in one instruction cycle. Some, particularly branch instructions, take one or two cycles more. Some models include a clock doubler, and although they still accept a maximum 10 MHz input clock, they internally double it to a 20 MHz master clock which then results in a 2 MHz instruction execution rate.

The chip is a static logic design which can tolerate an arbitrarily slow clock; most models include a second quartz clock crystal oscillator which can be used for the CPU clock while the high-speed clock is disabled to save power.

Registers and memory map

Note: All other programmer-visible registers and status bits are allocated in RAM.

|} The COP8 uses separate instruction and data spaces (Harvard architecture). Instruction address space is 15-bit (32 KiB maximum), while data addresses are 8-bit (256 bytes maximum, extended via bank-switching).

To allow software bugs to be caught, all invalid instruction addresses read as zero, which is a trap instruction. Invalid RAM above the stack reads as all-ones, which is an invalid address.

The CPU has an 8-bit accumulator and 15-bit program counter. 16 additional 8-bit registers (R0–R15) and an 8-bit program status word are memory mapped. There are special instructions to access them, but general RAM access instructions may also be used.

The memory map is divided into half RAM and half control registers as follows:

AddressesUse
0x00–6F
0x70–7F
0x80–8F
0x90–BF
0xC0–CF
0xD0–DF
0xE0–E8
0xE9
0xEA–ED
0xEE
0xEF
0xF0–FB
0xFC
0xFD
0xFE
0xFF

If RAM is not banked, then R15 (S) is just another general-purpose register. If RAM is banked, then the low half of the data address space (addresses 0x00–7F) is directed to a RAM bank selected by S. The special purpose registers in the high half of the data address space are always visible. The data registers at 0xFx can be used to copy data between banks.

RAM banks other than bank 0 have all 128 bytes available. The stack (addressed via the stack pointer) is always on bank 0, no matter how the S register is set.

Control transfers

In addition to 3-byte and instructions which can address the entire address space, 2-byte versions of these instructions, and , can jump within a 4K page. The instruction specifies the low 12 bits, and the high 3 bits of the PC are preserved. (These are intended primarily for models with up to 4K of ROM.) For short-distance branches, there are 63 1-byte instructions, , which perform PC-relative branches from PC−32 to PC+31. This is a 15-bit addition, and no page boundary requirements apply.

There are also jump indirect and load accumulator indirect instructions which use the accumulator contents as the low 8 bits of an address; the high 7 bits of the current PC are preserved.

Conditional branches per se do not exist, nor does the processor provide the traditional ZCVN status flags, although the program status word contains carry and half-carry flags for multi-byte arithmetic. Rather, there are a number of compare-and-skip instructions. For example, compares its two operands, and skips the following instruction if they are unequal. Any instruction may be skipped; it is not limited to branches.

An interesting extension of this mechanism is the return-and-skip instruction, which lets any subroutine conditionally skip the instruction following the call. This provides a very compact way to return a boolean value from a subroutine.

Another feature unique to the COP8 architecture is the instruction. This one-byte instruction compares the low 4 bits of the B (memory pointer) register with a 4-bit immediate constant, and can be used to loop until B has reached the end of a small (up to 16 byte) buffer. There is also a one-byte instruction.

Instruction set

COP8 operands are listed in destination, source order. Most instructions have the accumulator A as one of the operands. The other operand is generally chosen from an 8-bit immediate value, an 8-bit RAM address, or , the RAM address selected by the B register. The and (exchange with accumulator) instructions also support RAM addressing by the X register () and post-inc/decrement variants (, , , ).

Indirect addressing via B is particularly fast, and can be done in the same cycle that the instruction is executed; even is a one-cycle instruction.

On the other hand, absolute RAM addressing is only directly encoded for five instructions: LD A,*addr8*, X A,*addr8*, IFEQ *addr8*,#*imm8*, LD *addr8*,#*imm8*, and DIR *addr8*. The latter is a "direct addressing" opcode prefix which may be prepended to any instruction with a operand, and changes the operand to the specified memory location. (Conditional-skip instructions skip the prefix and following instruction as a pair.) Using with the , and LD [B],#*imm8* instructions is not documented, as the dedicated instructions are more efficient.

All "move" instructions are called (load) even if the destination is a memory address (LD *addr8*,#*imm8*). Unusually, there are no instructions with the accumulator as a source; stores must be done with the instruction which exchanges the accumulator with the memory operand, storing A and loading the previous memory contents.

There are instructions to fetch from tables in ROM. These combine the high 7 bits of the program counter (PCU) with the accumulator, fetch a byte from that address, and place it in the accumulator ( instruction) or the low 8 bits of the program counter PCL ( instruction). Because the next instruction executed must be in the same 256-byte page of ROM as the table itself, a 256-entry table is not possible.

Opcodecolspan=2Operandsrowspan=2Mnemonicrowspan=2Cyclesrowspan=2Description76543210b2b301100colspan=3*opcode*colspan=3Miscellaneous instructions011colspan=2*opc*colspan=3*bit*colspan=3Bit operations on [B]100*m*0colspan=3*opcode**k?*colspan=3Binary operations, A ← A op *operand*10001colspan=3*opcode*colspan=3Zero-operand instructions10011colspan=3*opcode**k*colspan=3Instructions with immediate operand101colspan=3*opcode*0*c*colspan=3Miscellaneous instructions101*R**L**=*1*±*colspan=3Load/exchange operations76543210b2b3MnemonicCyclesDescription
00000000
000*offset*JP +*disp5*3PC ← PC + *offset*; jump 1–31 bytes forward (offset≠0)
0010*high**low*JMP *addr12*3PC[11:0] ← *addr*. Top 3 bits of PC preserved.
0011*high**low*JSR *addr12*5Jump to subroutine: push PC, proceed as JMP.
0100*k*IFBNE #*imm4*1Skip next instruction if (B & 15) = *k*.
0101*k*LD B,#*imm4*1B ← 15 − *k* (zero-extended)
01100000*k*
01100001*addr*
0110001
01100100
01100101
01100110
01100111
01101*bit*RBIT #*bit*,[B]1
01110*bit*IFBIT #*bit*,[B]1
01111*bit*SBIT #*bit*,[B]1
10000*opcode**OP* A,[B]1
10010*opcode**k**OP* A,#*imm8*2
100*m*0000*k?*
100*m*0001*k?*
100*m*0010*k?*
100*m*0011*k?*
100*m*0100*k?*
100*m*0101*k?*
100*m*0110*k?*
100*m*0111*k?*
10001000
10001001
10001010
10001011
10001100
10001101
10001110
10001111
10011000*k*
10011001*k*
10011010*k*
10011011*k*
10011100*addr*
10011101*addr*
10011110*k*
10011111*k*
10100000
10100001
10100100
10100101
10101000
10101001*addr**k*
10101100*high**low*
10101101*high**low*
10110000
10110001
10110100
10110101
10111000
10111001
10111100*addr**k*
10111101*addr*
10100010
10100011
10100110
10101010
10101011
10101110
10110010
10110011
10110110
10111010
10111011
10111110
101111*(reserved)*
1100*register*DRSZ *register*3*register* ← *register* − 1, skip if result is zero
1101*register**k*LD *register*,#*imm8*3*register* ← *k* (=LD 0xf0+*register*,#*k*, one byte shorter)
111*offset*JP −*disp5*3PC ← PC − 32 + *offset*; jump 1–32 bytes backward

Notable uses

  • The COP8 family is employed in the FMU-139 aerial bomb fuze
  • The COP822 is employed in the M732A2 artillery fuze

References

References

  1. (June 1996). "COP8 Basic Family User's Manual". [[National Semiconductor]].
  2. (March 1999). "COP8 Feature Family User's Manual". [[National Semiconductor]]}} Extracted from [[ZIP (file format).
  3. Aleaf, Abdul. (July 1996). "Comparison of COP878x to the Enhanced COP8SAx7 Family - Hardware/Software Considerations". [[National Semiconductor]].
  4. (January 1997). "COP8SAx Designer's Guide". [[National Semiconductor]].
  5. (April 2002). "COP8SBR9/COP8SCR9/COP8SDR98-Bit CMOS Flash Based Microcontroller with 32k Memory, Virtual EEPROM and Brownout". [[National Semiconductor]].
  6. Liberatore, David. (11 May 2006). "FMU-139C/B Electronic Bomb Fuze Design Update".
  7. (November 1991). "Application Note 761 - Electronic Fuzing". Texas Instruments.
Info: Wikipedia Source

This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page.

Want to explore this topic further?

Ask Mako anything about COP8 — get instant answers, deeper analysis, and related topics.

Research with Mako

Free with your Surf account

Content sourced from Wikipedia, available under CC BY-SA 4.0.

This content may have been generated or modified by AI. CloudSurf Software LLC is not responsible for the accuracy, completeness, or reliability of AI-generated content. Always verify important information from primary sources.

Report