Manufact. Intel various STM PHILIPS DALLAS/MAXIM DALLAS/MAXIM SILABS AD GOAL GOAL RAMTRON CYROD ATMEL WINBOND TI SAMSUNG TEZZARON MEGAWIN STC TI NORDIC SEMI MAXIM RDC DCD DCD



Type 8051 RD2 (incl. P89C668) uPSD3354 (obsolete) P89LPC935 DS80C320 DS89C450 C8051F120 ADuC841 VERSA1 (obsolete) VMX1020 (obsolete) VRS51L3074 (obsolete) CRD89C51AD1T AT89LP4052 W77E516 MSC1211Y5 S3FI1BG TSCR8051 MG82FE564 STC12C5A60S2 CC1111F32 nRF9E5 71M6543G R8032TTEX IP-core DP805x IP-core DR805x IP-core



max.freq. 12MHz 20MHz 40MHz 12MHz 33MHz 33MHz 100MHz 20MHz 16MHz 14MHz 40MHz 25MHz 20MHz 40MHz 30MHz 25MHz 200MHz 24MHz 35MHz 24MHz 20MHz 5MHz





SRAM no 0.75kB (1kB-7.75kB) 32kB (program may execute) 0.5kB no 1kB 8kB 2kB (can contain stack) 1kB 1kB 4kB (program can execute) 2kB no 1kB 1kB (program can execute) 4kB 128kB (shared for program + data) 1kB 1kB 4kB 4kB (shared for program + data) 5kB





FLASH 4kB 64kB (+8kB) 256kB+32kB 8kB no 64kB 128kB 62kB 64kB(+2kB OTP) 56kB 64kB 64kB 4kB 64kB+4kB 32kB (can be mapped data) 384kB no 64kB 60kB 32kB no 128kB





EEPROM no (2kB) no 0.5kB no no no 4kB no
8kB FRAM no no 64B no
no no 1kB no no no





bus UART UART, (I2C, SPI) 2xUART (IrDA), SPI, I2C UART, I2C, SPI 2xUART 2xUART 2xUART,I2C,SPI UART, I2C or SPI 2xUART, SPI, RS485 2xUART, SPI, I2C, RS485 2xUART, SPI, I2C 2xUART, SPI, I2C UART, SPI 2xUART 2xUART, SPI, I2C USB, UART, SPI 2xUART 2xUART, SPI 2xUART, SPI USB, 2xUART/SPI, I2S SPI 2xUART, SPI/I2C, SPI slave





other
PCA, WDT 16 macrocell PLD, freely mappable FLASH/RAM via PLD, JTAG onchip debug, PCA, WDT, BOD, 8MUX 10bit 100ksps ADC, push-pull output (8x) onchip RC oscillator, 2x 4MUX 8bit ADC, push-pull outputs, 2x comparator, BOD, WDT, RTC, capture/compare unit BOD, WDT BOD, WDT onchip oscillator + PLL, onchip JTAG debugger, 8MUX 12bit 100ksps ADC, 8MUX 8bit 500ksps ADC, 2x 12bit DAC, MAC, 5x 16bit timers, WDT, BOD, onchip temperature sensor, PCA, push-pull outputs, partially exchangable 8MUX 420kSPS 12bit ADC, on chop reference, 2x12bit DAC, PWM, on chip temperature monitor, WD, power supply monitor 4MUX 12bit ADC BOD, MAC onchip debugger (UART), 3xcompare/capture, onchip voltage reference, 4x16-bit PWM, 4MUX 12bit 10kSps ADC, programmable current source, OPAMP, 2x digipot, 1x switch, BOD, WDT onchip JTAG debugger, MUL/DIV/ACC unit, indirect SFR access, 2x pulse width counter, PWM, internal oscillator, WDT, POR, BOD internal RC oscillator, 4xPWM, PCA, hw mult/div unit, 8x10-bit ADC, compar/OPA, WDT, RTC WDT,BOD,POR,Push-pull capable IO, comparator, PWM WDT,WaitState for XRAM 8xMUX 24-bit ADC+PGA, 4x16bit DAC, onchip reference, WaitState, BOD, WDT, LowVoltage detect, 16-bit PWM, 2 HW breakpoints, boot+debug ROM ADPCM voice codec, BRJPEG decoder, 6x10-bit ADC, 10-bit DAC, LCD controller, serial FLASH controller, PWM, RTC, JTAG WDT, CCU, floating point unit PCA, 8x 10-bit ADC, WDT, BOD, internal oscillator PCA, 8x10-bit ADC, WDT, internal RC oscillator 433/868/915 MHz transceiver, 8x12-bit ADC, 128-bit AES security coproc., random number generator, DMA, hardware debug, unified (von Neumann) memory space 433/868/915 MHz transceiver, 4x10-bit ADC, PWM, internal oscillator polyphase power meter + computing engine, LCD driver, RTC, WDT, ICE





package DIL40, PLCC44 DIL40, PLCC44 (TQFP44) TQPF52, TQFP80 TSSOP28, PLCC28, HVQFN28 DIP40, PLCC44, TQFP44 DIP40, PLCC44, TQFP44 TQFP100 PQFP52, CSP56 PQFP44 QFP64 QFP64 DIP40, PLCC44, QFP44, QFP48 DIL20,SOIC20,TSSOP20 DIL40,PLCC44,QFP44 TQFP64 TQFP80 PLCC44 DIL40,QFP44, QFP48 DIL40,QFP44, QFP48, PLCC44, QFN40 QFN36 QFN32 QFP100





supply volt. 5V 5V (3V) 5V+3.3V/3.3V 3.3V 5V 5V 3.3V 3V/5V 5V 5V 3.3V 5V 2.4-5V 5V 2.7-5V
3.3V+1.8V 5V 3.5-5V 2.0-3.6V 1.9-3.6V 3.3V





flash programming parallel parallel, UART ISP, IAP parallel, JTAG ISP, IAP parallel, SPI-like "ICP", IAP (enabling UART ISP) no UART ISP, IAP JTAG, IAP parallel, UART ISP, IAP I2C (12V) I2C (12V) JTAG parallel, ICP, IAP parallel, SPI parallel, IAP parallel, UART
runs from RAM loaded through SPI ISP/IAP ISP/IAP through debug runs from RAM loaded through SPI ICE or SPI





DPTR 1 2 2, autotoggle, autoinc/dec 2 2 (different SFR) 2 (different SFR), autotoggle, autoinc/dec 1 2, autotoggle, autoinc/dec/LSB-toggle 2 (different SFR) 2 (different SFR) 2 (different SFR) 2 (different SFR) 1 2 2 (different SFR)
2 (different SFR) 2 2 2 (different SFR) 2 (different SFR) 2 (different SFR)





external memory yes yes yes (80-pin only) no yes yes data only (A-bus may be non-muxed) data only (up to 16MB) no no data only data only no yes yes
no data only data only no no no































Mnemonic Description Size(bytes) Hex Code 12x 6x 4x 2x 4x 1x 1x 1x 4x 1x 1x 1x 1x 4x 4x 1x 1x 1x 1x 1x 4x 1x 1x 1x 1x
Arithmetic instructions



























ADD A, Rn Add register to A 1 28-2Fh 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 2 1 2
ADD A, direct Add direct byte to A 2 25h 1 1 1 1 2 2 2 2 2 2 3 2 2 2 2 2 2 3 3 2 2 2 3 2 3
ADD A, @Ri Add data memory to A 1 26-27h 1 1 1 1 1 2 2 2 1 2 3 2 2 1 1 2 2 3 3 2 1 2 4 2 3
ADD A, #data Add immediate to A 2 24h 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
ADDC A, Rn Add register to A with carry 1 38-3Fh 1 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 2 1 2
ADDC A, direct Add direct byte to A with carry 2 35h 1 1 1 1 2 2 2 2 2 2 3 2 2 2 2 2 2 3 3 2 2 2 3 2 3
ADDC A, @Ri Add data memory to A with carry 1 36-37h 1 1 1 1 1 2 2 2 1 2 3 2 2 1 1 2 2 3 3 2 1 2 4 2 3
ADDC A, #data Add immediate to A with carry 2 34h 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
SUBB A, Rn Subtract register from A with borrow 1 98-9Fh 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 2 1 2
SUBB A, direct Subtract direct byte from A with borrow 2 95h 1 1 1 1 2 2 2 2 2 2 3 2 2 2 2 2 2 3 3 2 2 2 3 2 3
SUBB A, @Ri Subtract data memory from A with borrow 1 96-97h 1 1 1 1 1 2 2 2 1 2 3 2 2 1 1 2 2 3 3 2 1 2 4 2 3
SUBB A, #data Subtract immediate from A with borrow 2 94h 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
INC A Increment A 1 04h 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2
INC Rn Increment register 1 08-0Fh 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 3 3 2 1 2 2 2 3
INC direct Increment direct byte 2 05h 1 1 1 1 2 2 2 2 2 3 3 3 2 2 2 3 3 4 4 3 2 3 3 3 4
INC @Ri Increment data memory 1 06-07h 1 1 1 1 1 2 2 2 1 3 3 3 2 1 1 3 3 4 4 3 1 3 4 3 4
DEC A Decrement A 1 14h 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2
DEC Rn Decrement register 1 18-1Fh 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 3 3 2 1 2 2 2 3
DEC direct Decrement direct byte 2 15h 1 1 1 1 2 2 2 2 2 3 3 3 2 2 2 3 3 4 4 3 2 3 3 3 4
DEC @Ri Decrement data memory 1 16-17h 1 1 1 1 1 2 2 2 1 3 3 3 2 1 1 3 3 4 4 3 1 3 4 3 4
INC DPTR Increment data pointer 1 A3h 2 2 2 2 3 1 1 3 3 1 2 1 2 2 3 1 1 1 1 1 3 1 2 1 1
MUL AB Multiply A by B 1 A4h 4 4 4 4 5 9 4 9 5 5 2 5 2 5 5 1 5 4 4 5 5 5 1 2 4
DIV AB Divide A by B 1 84h 4 4 4 4 5 10 8 9 5 5 2 5 4 5 5 11 5 5 5 5 5 5 14 6 5
DA A Decimal adjust A 1 D4h 1 1 1 1 1 2 1 2 1 1 4 1 1 1 1 1 1 4 4 1 1 1 1 3 4
Logical Instructions



























ANL A, Rn AND register to A 1 58-5Fh 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 2 1 2
ANL A, direct AND direct byte to A 2 55h 1 1 1 1 2 2 2 2 2 2 3 2 2 2 2 2 2 3 3 2 2 2 3 2 3
ANL A, @Ri AND data memory to A 1 56-57h 1 1 1 1 1 2 2 2 1 2 3 2 2 1 1 2 2 3 3 2 1 2 4 2 3
ANL A, #data AND immediate to A 2 54h 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
ANL direct, A AND A to direct byte 2 52h 1 1 1 1 2 2 2 2 2 3 3 3 2 2 2 3 3 4 4 3 2 3 3 3 4
ANL direct, #data AND immediate data to direct byte 3 53h 2 2 2 2 3 3 3 3 3 4 3 4 3 3 3 3 4 4 4 4 3 4 4 3 4
ORL A, Rn OR register to A 1 48-4Fh 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 2 1 2
ORL A, direct OR direct byte to A 2 45h 1 1 1 1 2 2 2 2 2 2 3 2 2 2 2 2 2 3 3 2 2 2 3 2 3
ORL A, @Ri OR data memory to A 1 46-47h 1 1 1 1 1 2 2 2 1 2 3 2 2 1 1 2 2 3 3 2 1 2 4 2 3
ORL A, #data OR immediate to A 2 44h 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
ORL direct, A OR A to direct byte 2 42h 1 1 1 1 2 2 2 2 2 3 3 3 2 2 2 3 3 4 4 3 2 3 3 3 4
ORL direct, #data OR immediate data to direct byte 3 43h 2 2 2 2 3 3 3 3 3 4 3 4 3 3 3 3 4 4 4 4 3 4 4 3 4
XRL A, Rn Exclusive-OR register to A 1 68-6Fh 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 2 1 2
XRL A, direct Exclusive-OR direct byte to A 2 65h 1 1 1 1 2 2 2 2 2 2 3 2 2 2 2 2 2 3 3 2 2 2 3 2 3
XRL A, @Ri Exclusive-OR data memory to A 1 66-67h 1 1 1 1 1 2 2 2 1 2 3 2 2 1 1 2 2 3 3 2 1 2 4 2 3
XRL A, #data Exclusive-OR immediate to A 2 64h 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
XRL direct, A Exclusive-OR A to direct byte 2 62h 1 1 1 1 2 2 2 2 2 3 3 3 2 2 2 3 3 4 4 3 2 3 3 3 4
XRL direct, #data Exclusive-OR immediate to direct byte 3 63h 2 2 2 2 3 3 3 3 3 4 3 4 3 3 3 3 4 4 4 4 3 4 4 3 4
CLR A Clear A 1 E4h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
CPL A Compliment A 1 F4h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 2
RL A Rotate A left 1 23h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
RLC A Rotate A left through carry 1 33h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
RR A Rotate A right 1 03h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
RRC A Rotate A right through carry 1 13h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
SWAP A Swap nibbles of A 1 C4h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Data Transfer Instructions



























MOV A, Rn Move register to A 1 E8-EFh 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1
MOV A, direct Move direct byte to A 2 E5h 1 1 1 1 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 3 2 2
MOV A, @Ri Move data memory to A 1 E6-E7h 1 1 1 1 1 2 2 2 1 2 3 2 2 1 1 2 2 2 2 2 1 2 4 2 2
MOV A, #data Move immediate to A 2 74h 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
MOV Rn, A Move A to register 1 F8-FFh 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 2 2 2 2 1 2 1 1 2
MOV Rn, direct Move direct byte to register 2 A8-AFh 2 2 2 2 2 2 2 2 2 4 3 4 2 2 2 3 4 4 4 4 2 4 3 3 4
MOV Rn, #data Move immediate to register 2 78-7Fh 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
MOV direct, A Move A to direct byte 2 F5h 1 1 1 1 2 2 2 2 2 3 3 3 2 2 2 2 3 3 3 3 2 3 2 2 2(SFR)-3(ACC)
MOV direct, Rn Move register to direct byte 2 88-8Fh 2 2 2 2 2 2 2 2 2 3 3 3 2 2 2 2 3 3 3 3 2 3 3 2 2(SFR)-3(ACC)
MOV direct, direct Move direct byte to direct byte 3 85h 2 2 2 2 3 3 3 3 3 4 3 4 3 3 3 3 4 4 4 4 3 4 4 3 3(SFR)-4(ACC)
MOV direct, @Ri Move data memory to direct byte 2 86-87h 2 2 2 2 2 2 2 2 2 4 3 4 2 2 2 3 4 4 4 4 2 4 4 3 3(SFR)-4(ACC)
MOV direct, #data Move immediate to direct byte 3 75h 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
MOV @Ri. A Move A to data memory 1 F6-F7h 1 1 1 1 1 1 2 2 1 3 2 3 1 1 1 2 3 3 3 3 1 3 3 2 3
MOV @Ri, direct Move direct byte to data memory 2 A6-A7h 2 2 2 2 2 2 2 2 2 5 3 5 2 2 2 3 5 3 4 5 2 5 4 3 4
MOV @Ri, #data Move immediate to data memory 2 76-77h 1 1 1 1 2 2 2 2 2 3 2 3 2 2 2 2 3 3 3 3 2 3 3 2 3
MOV DPTR, #data16 Move immediate to data pointer 3 90h 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
MOVC A, @A+DPTR Move code byte relative DPTR to A 1 93h 2 2 2 2 3 3 3 4 3 3 3+1 3 3 2 3 4 3 4 4 3 3 3 7 5 4
MOVC A, @A+PC Move code byte relative PC to A 1 83h 2 2 2 2 3 3 3 4 3 3 3+1 3 3 2 3 4 3 4 4 3 3 3 5 4 4
MOVX A, @Ri Move external data (A8) to A 1 E2-E3h 2 2 2 2 2-9 2 3 4 3 3-10 3+n 3 - 2-9 2-9 3 3-10 3+n 4 3-10 2-9 3-10 6 3+n 3+n
MOVX A, @DPTR Move external data (A 16) to A 1 E0h 2 2 2 2 2-9 2 3 4 3 3-10 2+n 3 - 2-9 2-9 3 3-10 3+n 3 3-10 2-9 3-10 4 2+n 2+n
MOVX @Ri, A Move A to external data (A8) 1 F2-F3h 2 2 2 2 2-9 2 3 4 3 4-11 2+n 4 - 2-9 2-9 3-4 4-11 3+n 3 4-11 2-9 4-11 6 4-5+n 4+n
MOVX @DPTR, A Move A to external data (A 16) 1 F0h 2 2 2 2 2-9 2 3 4 3 4-11 1+n 4 - 2-9 2-9 3-4 4-11 3+n 3 4-11 2-9 4-11 4 3-4+n 3+n
PUSH direct Push direct byte onto stack 2 C0h 2 2 2 2 2 2 2 2 2 4 3 4 2 2 2 3 4 4 4 4 2 4 3 3 4
POP direct Pop direct byte from stack 2 D0h 2 2 2 2 2 2 2 2 2 3 2 3 2 2 2 2 3 3 3 3 2 3 4 2 2(SFR)-3(ACC)
XCH A, Rn Exchange A and register 1 C8-CFh 1 1 1 1 1 2 1 1 1 2 3 2 1 1 1 2 2 3 3 2 1 2 4 2 2
XCH A, direct Exchange A and direct byte 2 C5h 1 1 1 1 2 3 2 2 2 3 4 3 2 2 2 3 3 4 4 3 2 3 4 3 3
XCH A, @Ri Exchange A and data memory 1 C6-C7h 1 1 1 1 1 3 2 2 1 3 4 3 2 1 1 3 3 4 4 3 1 3 6 3 3
XCHD A, @Ri Exchange A and data memory nibble 1 D6-D7h 1 1 1 1 1 3 2 2 1 3 4 3 2 1 1 3 3 4 4 3 1 3 8 3 3
Boolean Instructions



























CLR C Clear carry 1 C3h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
CLR bit Clear direct bit 2 C2h 1 1 1 1 2 2 2 2 2 3 4 3 2 2 2 3 3 4 4 3 2 3 3 3 4
SETB C Set carry 1 D3h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
SETB bit Set direct bit 2 D2h 1 1 1 1 2 2 2 2 2 3 4 3 2 2 2 3 3 4 4 3 2 3 3 3 4
CPL C Complement carry 1 B3h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
CPL bit Complement direct bit 2 B2h 1 1 1 1 2 2 2 2 2 3 4 3 2 2 2 3 3 4 4 3 2 3 3 3 4
ANL C, bit AND direct bit to carry 2 82h 2 2 2 2 2 2 2 2 2 2 4 2 2 2 2 2 2 3 3 2 2 2 3 2 3
ANL C, /bit AND direct bit inverse to carry 2 B0h 2 2 2 2 2 2 2 2 2 2 4 2 2 2 2 2 2 3 3 2 2 2 3 2 3
ORL C, bit OR direct bit to carry 2 72h 2 2 2 2 2 2 2 2 2 2 4 2 2 2 2 2 2 3 3 2 2 2 3 2 3
ORL C, /bit OR direct bit inverse to carry 2 A0h 2 2 2 2 2 2 2 2 2 2 4 2 2 2 2 2 2 3 3 2 2 2 3 2 3
MOV C, bit Move direct bit to carry 2 A2h 1 1 1 1 2 2 2 2 2 2 4 2 2 2 2 2 2 3 3 2 2 2 3 2 3
MOV bit, C Move carry to direct bit 2 92h 2 2 2 2 2 2 2 2 2 3 3 3 2 2 2 3 3 4 4 3 2 3 3 3 4
Branching Instructions



























ACALL addr 11 Absolute call to subroutine 2 11-F1h 2 2 2 2 3 2 3 3 3 6 4+1 6 3 3 3 3 6 6 6 6 3 6 4 4 6
LCALL addr 16 Long call to subroutine 3 12h 2 2 2 2 4 3 4 4 4 6 5+1 6 4 4 4 3 6 6 6 6 4 6 6 4 6
RET Return from subroutine 1 22h 2 2 2 2 4 3 5 4 4 4 3+1 4 4 2 4 4 4 4 4 4 4 4 6 4 4
RETI Return from interrupt 1 32h 2 2 2 2 4 3 5 4 4 4 3+1 4 4 2 4 4 4 4 4 4 4 4 6 4 4
AJMP addr 11 Absolute jump unconditional 2 01-E1h 2 2 2 2 3 2 3 3 3 3 2+1 3 3 3 3 3 3 3 3 3 3 3 2 3 3
LJMP addr 16 Long jump unconditional 3 02h 2 2 2 2 4 3 4 4 4 4 3+1 4 4 4 4 3 4 4 4 4 4 4 3 4 4
SJMP rel Short jump (relative address) 2 80h 2 2 2 2 3 3 3 3 3 3 3+1 3 3 3 3 3 3 3 3 3 3 3 3 3 3
JC rel Jump on carry = 1 2 40h 2 2 2 2 3 3 2/3 3 3 3 3+1 3 3 3 3 2/3 3 3 3 3 3 3 2 3 2(no jump)-3(jump)
JNC rel Jump on carry = 0 2 50h 2 2 2 2 3 3 2/3 3 3 3 3+1 3 3 3 3 2/3 3 3 3 3 3 3 3 3 2(no jump)-3(jump)
JB bit, rel Jump on direct bit = 1 3 20h 2 2 2 2 4 4 3/4 4 4 4 3/4+1 4 4 4 4 3/4 4 4 4 4 4 4 5 5 4
JNB bit, rel Jump on direct bit = 0 3 30h 2 2 2 2 4 4 3/4 4 4 4 3/4+1 4 4 4 4 3/4 4 4 4 4 4 4 5 5 4
JBC bit, rel Jump on direct bit = 1 and clear 3 10h 2 2 2 2 4 4 3/4 4 4 4 3/4+1 4 4 4 4 3/4 4 5 5 4 4 4 5 5 5
JMP @A+DPTR Jump indirect relative DPTR 1 73h 2 2 2 2 3 3 3 3 3 2 2+1 2 3 2 3 3 2 3 3 2 3 2 4 5 3
JZ rel Jump on accumulator = 0 2 60h 2 2 2 2 3 3 2/3 3 3 3 3+1 3 3 3 3 2/3 3 3 3 3 3 3 3 4 3
JNZ rel Jump on accumulator 1= 0 2 70h 2 2 2 2 3 3 2/3 3 3 3 3+1 3 3 3 3 2/3 3 3 3 3 3 3 3 4 3
CJNE A, direct, rel Compare A, direct JNE relative 3 B5h 2 2 2 2 4 5 3/4 4 4 4 4/5+1 4 4 4 4 3/4 4 5 5 4 4 4 4 5 5
CJNE A, #d, rel Compare A, immediate JNE relative 3 B4h 2 2 2 2 4 4 3/4 4 4 4 3/4+1 4 4 4 4 3/4 4 4 4 4 4 4 4 4 4
CJNE Rn, #d, rel Compare reg, immediate JNE relative 3 B8-BFh 2 2 2 2 4 4 3/4 4 4 4 3/4+1 4 4 4 4 3/4 4 4 4 4 4 4 4 4 4
CJNE @Ri, #d, rel Compare ind, immediate JNE relative 3 B6-B7h 2 2 2 2 4 5 4/5 4 4 4 4/5+1 4 4 4 4 3/4 4 5 5 4 4 4 5 5 5
DJNZ Rn, rel Decrement register, JNZ relative 2 D8-DFh 2 2 2 2 3 4 2/3 3 3 3 3/4+1 3 3 3 3 2/3 3 4 4 3 3 3 4 4 4
DJNZ direct, rel Decrement direct byte, JNZ relative 3 D5h 2 2 2 2 4 5 3/4 4 4 4 3/4+1 4 4 4 4 3/4 4 5 5 4 4 4 4 5 5
Miscellaneous Instruction



























NOP No operation 1 00h 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1


























































SerialISR: PUSH PSW

2 2 2 2 2 2 2 2 2 4 3 4 2 2 2




2




PUSH ACC

2 2 2 2 2 2 2 2 2 4 3 4 2 2 2




2




SETB RS0

1 1 1 1 2 2 2 2 2 3 4 3 2 2 2




2




JBC TI,TI_ISR

2 2 2 2 4 4 4 4 4 4 5 4 4 4 4




4



TI_ISREnd: JBC RI,RI_ISR

2 2 2 2 4 4 4 4 4 4 5 4 4 4 4




4



SerialISREnd: POP ACC

2 2 2 2 2 2 2 2 2 3 2 3 2 2 2




2




POP PSW

2 2 2 2 2 2 2 2 2 3 2 3 2 2 2




2




RETI

2 2 2 2 3 3 5 4 4 4 4 4 4 2 3




3



TI_ISR: MOV A,TI_PTR

1 1 1 1 2 2 2 2 2 2 3 2 2 2 2




2




JZ TI_ISREnd

2 2 2 2 3 3 2 3 3 3 4 3 3 3 3




3




DEC TI_PTR

1 1 1 1 2 2 2 2 2 3 3 3 2 2 2




2




ADD A,#LOW(TxBuff-1)

1 1 1 1 2 2 2 2 2 2 2 2 2 2 2




2




MOV R0,A

1 1 1 1 1 1 1 1 1 2 1 2 1 1 1




1




MOV R2,P2

2 2 2 2 2 2 2 2 2 4 3 4 2 2 2




2




CLR A

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1




1




ADDC A,#HIGH(TxBuff-1)

1 1 1 1 2 2 2 2 2 2 2 2 2 2 2




2




MOV P2,A

1 1 1 1 2 2 2 2 2 3 3 3 2 2 2




2




MOVX A,@R0

2 2 2 2 2 2 3 4 3 3 3 3 ? (4) 2 2




2




MOV P2,R2

2 2 2 2 2 2 2 2 2 3 3 3 2 2 2




2




MOV SBUF,A

1 1 1 1 2 2 2 2 2 3 3 3 2 2 2




2




SJMP TI_ISREnd

2 2 2 2 3 3 3 3 3 3 4 3 3 3 3




3



RI_ISR: MOV R1,RX_Head

2 2 2 2 2 2 2 2 2 4 3 4 2 2 2




2




MOV @R1,SBUF

2 2 2 2 2 2 2 2 2 5 3 5 2 2 2




2




INC R1

1 1 1 1 1 1 1 1 1 2 2 2 1 1 1




1




CJNE R1,#RXBuffEnd,RI_ISR_X1

2 2 2 2 4 4 4 4 4 4 5 4 4 4 4




4




MOV R1,#RXBuff

1 1 1 1 2 2 2 2 2 2 2 2 2 2 2




2



RI_ISR_X1: MOV A,R1

1 1 1 1 1 1 1 1 1 1 2 1 1 1 1




1




CJNE A,RX_Tail,RI_ISR_X2

2 2 2 2 5 5 4 4 4 4 6 4 4 4 5




5




SJMP SerialISREnd

2 2 2 2 3 3 3 3 3 3 4 3 3 3 3




3



RI_ISR_X2: MOV RX_Head,A

1 1 1 1 2 2 2 2 2 3 3 3 2 2 2




2




SJMP SerialISREnd

2 2 2 2 3 3 3 3 3 3 4 3 3 3 3




3


































cycles
49 49 49 49 72 72 73 74 73 94 97 94 74 70 72




72





clocks
588 294 196 98 288 72 73 74 292 94 97 94 74 280 288




288





execution time [us]
49,00 14,70 4,90 8,17 8,73 2,18 0,73 3,70 18,25 6,71 2,43 3,76 3,70 7,00 9,60




14,40











































































+1 if executed from FLASH (not from RAM)




based on CAST R8051XC2 core (according to CAST website)


based on DW8051 macrocell from Synopsis core referred to in Teridian (now Maxim) materials as 80515 frequency stated 66MHz for 0.5u technology, "silicon proven" frequency stated max. 300MHz when speed optimized for 0.18u technology










conditional X/Y: X when jump not taken, Y when taken


conditional X/Y: X when jump not taken, Y when taken








cycle timing identical to Dallas DS80C320

sheet from Keil's database sheet from Keil's database










jumps may result in speed penalty (up to 4+3 cycles) due to slower FLASH - see jump cache description in datasheet


MOVX involves adjustable waitstetes for external memory and fixed delay for FRAM MOVX to/from external memory "complies with 12T timing" (it is not clear if this means +12T to the above timing)











not on DCD website, but they have DT805x which may be similar according to the quoted cca 8x performance


The results of the "mini-benchmark" are of course only approximative, as the real performance depends on a particular instruction mix in the given application. Where instructions are of various execution time (e.g. branches at SiLabs, or external memory access with possible waitstates at more processors), a minimum time is assumed, which might not be always appropriate. The faster clocked mcus (SiLabs, STM uPSD) have also branch caches, so performance depends on hits/misses on them.

Original excel table can be found here. A simplified version is also available in xls and pdf format.