1. 介绍 Application Notes EM78/EM88 系列是基于 RISC 的精简指令微控制器, 每条指令是 13 位 15 位, 除 LCALL LJMP MOV R2,A ADD R2,A 改变 PC 指针的指令是 2 个指令 * 周期, 其余为单指令周期 ( 部分第一代芯片 JMP CALL RET RETL RETI JBS JBC JZ JZA DJZ DJZA 指令为 2 个指令周期 ) ( * :EM78P134N,EM78P150,EM78P152S,EM78P153S/B/K,EM78P154N,EM78P156E/N/K, EM78P157N,EM78P159N,EM78P163N,EM78P257,EM78P311N,EM78P312N, EM78P447N/S,EM78P451,EM78P458/9,EM78P809N) 2. 符号说明 符号说明 A 累加器 R RAM 寄存器 R(b) 寄存器 R 的第 b 位 b bit 位 (b=0~7) 立即数 ( 二元操作数指令中需以 @ 开头, 以区分于地址操作数, 例 k 如 :MOV A,@0xFF; 单一操作数则不需要 @ 开头, 例如 :JMP 0x1A0; RETL 100 等 ) & 与操作 或操作 异或操作 / 取反操作 AP- -001C-v1.1 05.15.2016 1
3. 指令表格 序号指令 描述 适用指令位数 13bit 15bit 页 1 NOP 空指令 5 2 DAA 十进制调整指令 5 3 CONTW 给 CONT 寄存器赋值 5 4 CONTR 读取 CONT 寄存器的值 6 5 SLEP 睡眠指令 6 6 WDTC 清 WDT 指令 6 7 IOW A 值写入 IOC 寄存器 6 8 IOR 读取 IOC 寄存器的值给 A 7 9 ENI 使能全局中断 7 10 DISI 禁止全局中断 7 11 RET 子程序返回 7 12 RETI 中断返回 8 13 RETL k 带 A 值返回 8 14 MOV R,A A 值给 R 8 15 MOV A,R R 值给 A 9 16 MOV R,R 读取 PORT 状态 9 17 MOV A,K 立即数给 A 9 18 CLRA A 清零 9 19 CLR R R 清零 10 20 SUB A,R R-A->A 10 21 SUB R,A R-A->R 10 22 SUB A,K K-A->A 11 23 DECA R R-1->A 11 24 DEC R R-1->R 11 25 OR A,R A 与 R 相或给 A 12 26 OR R,A R 与 A 相或给 R 12 27 OR A,K A 与 K 相或给 A 12 28 AND A,R A 与 R 相与给 A 13 29 AND R,A A 与 R 相与给 R 13 30 AND A,K A 与 K 相与给 A 13 31 XOR A,R A 与 R 异或给 A 14 32 XOR R,A R 与 A 异或给 R 14 33 XOR A,K A 与 K 异或给 A 14 34 ADD A,R A+R 给 A 15 2 05.15.2016 AP- -001C-v1.1
( 续表 ) 序号指令 描述 适用指令位数 13bit 15bit 页 35 ADD R,A R+A 给 R 15 36 ADD A,K A+K 给 A 15 37 COMA R R 取反给 A 16 38 COM R R 取反 16 39 INC R R+1->R 16 40 INCA R R+1->A 17 41 DJZA R R-1 给 A 若 A=0 跳过下一条指令 17 42 DJZ R R-1 等于 0 跳过下一条指令 17 43 RRCA R 带进位位的 R 值右移一位给 A 18 44 RRC R 带进位位的 R 值右移一位 18 45 RLCA R 带进位位的 R 值左移一位给 A 19 46 RLC R 带进位位的 R 值左移一位 19 47 SWAPA R R 的高 4 位与低 4 位交换后给 A 19 48 SWAP R R 的高 4 位与低 4 位交换 20 49 JZA R R 值加 1 给 A, 如果 A=0 则跳过下一条指令执行 20 50 JZ R R 值加 1 给 R, 如果 R=0 则跳过下一条指令执行 20 51 BC R,b R 的 bit b 清零 21 52 BS R,b R 的 bit b 置 1 21 53 JBC R,b R 的 bit b 为 0 跳过下一条指令执行 21 54 JBS R,b R 的 bit b 为 1 跳过下一条指令执行 22 55 CALL K 调用子程序 K( 一页内 ) 22 56 LCALL K 长调用子程序 K( 任意页 ) 22 57 JMP K 跳到 K( 一页内 ) 23 58 LJMP K 跳到 K( 任意页 ) 23 59 BANK K 切换 bank 23 60 SBANK K 切换特殊控制寄存器 bank 24 61 GBANK K 切换通用寄存器 bank 24 62 TBRD R 读 ROM 指令,(TABPTR) 指向的 ROM 数据给 R ( 结合 HLB 来读取低 8 位还是高 8 24 位数据 ) 63 TBRDA R 读 ROM 指令,(TABPTR) 指向的 ROM 数据的低字节给 A, 高字节给 R ** 25 64 XCH R A 的值与 R 互换 ** 25 65 BTG R,b 位 R(b) 取反 ( 只对 R5~RA 有效 ) ** 25 66 JE R R 与 A 相等则跳过下一条指令 ** 26 67 JGE R R 大于 A 则跳过下一条指令 ** 26 AP- -001C-v1.1 05.15.2016 3
( 续表 ) 序号指令 描述 适用指令位数 13bit 15bit 页 68 JLR R R 小于 A 则跳过下一条指令 ** 26 69 JE K A 与 K 相等则跳过下一条指令 ** 27 70 SJC K 如果有进位 (C=1) 则跳到 k( 地址范围 +127~ -128) ** 27 71 SJNC K 如果无进位 (C=0) 则跳到 k( 地址范围 +127~ -128) ** 27 72 SJZ K 如果为零 (Z=1) 则跳到 k( 地址范围 +127~ -128) ** 28 73 SJNZ K 如果不为零 (Z=0) 则跳到 k( 地址范围 +127~ -128) ** 28 74 ADC A,R 带进位加法, 结果给 A ** 28 75 ADC R,A 带进位加法, 结果给 R ** 29 76 SUBB A,R 带借位减法, 结果给 A ** 29 77 SUBB R,A 带借位减法, 结果给 A ** 29 78 TBWR ROM table 写开始指令 ** 30 79 INT K 软件中断 ** 30 80 INT 软件中断 30 81 RLA R R 的值左移一位给 A ** 31 82 RL R R 的值左移一位 ** 31 83 RRA R R 的值右移一位给 A ** 31 84 RR R R 的值右移一位 ** 31 85 NEG R R 的值转为二进制补码 ( 取反加 1) ** 32 86 RESET 软件复位 ** 32 ( ** : EM88 系列 IC 才有提供, 不提供 EM78 系列 15 位 IC) 4 05.15.2016 AP- -001C-v1.1
4. 指令說明 4.1 NOP(No Operation) NOP 无操作无空操作, 用于延时 P50 输出 3us 脉冲 (MCU 频率 4MHz, 4 个时钟周期 ) BS 0X5,0 ;P50 输出高 NOP NOP BC 0X5,0 ;P50 输出低 4.2 DAA DAA 如果 A 的低 4 位大于 9 或 DC=1, 那么低 4 位 +6; 如果高 4 位大 于 9 或 C=1, 那么高 4 位 +6 C C: 调整结果有进位则 C=1; 否则 C=0 十进制调整指令,A 的值转为 2 位十进制数 执行一个十进制 6+9 的操作 : MOV A,@0X06 MOV 0X10,A MOV A,@0X09 ADD A,0X10 ;A=0X0F DAA ;A=0X15 4.3 CONTW CONTW A CONT 无把 A 值赋给 CONT 寄存器 MOV A,@0B10000011 CONTW AP- -001C-v1.1 ; 向 CONT 寄存器中写入 @0B10000011 05.15.2016 5
4.4 CONTR CONTR CONT A 无把 CONT 寄存器值读到 A CONTR ; 读 CONT 寄存器的值 4.5 SLEP SLEP 0 WDT, 振荡器停止 P T P : P=0 T : T=1 进入 sleep 模式 SLEP ; 进入睡眠模式 4.6 WDTC WDTC 00h WDT,0 WDT Prescaler P,T P : P=1 T : T=1 看门狗时间清零, 如果设置了分频比, 分频比计数也清零 WDTC ; 清 WDT 时间 4.7 IOW 6 05.15.2016 IOW R A IOCR 无 A 值赋给 IOCR 寄存器, 此指令只适用于 IOC page 控制寄存器 通过控制寄存器 IOC6, 将 PORT6 的 IO 口为输入 输出, MOV A,@0XAA IOW IOC6 ;0 为输出,1 为输入 AP- -001C-v1.1
4.8 IOR IOR R IOCR A 无将 IOCR 寄存器的值读到 A, 此指令只适用于 IOC page 控制寄存器 IOR 0XF ; 读取 IOCF 寄存器的值 MOV 0X10,A ; 保存在 0x10 4.9 ENI ENI 1 INT 无使能总中断 ENI ; 使能总中断 4.10 DISI DISI 0 INT 无禁止总中断 DISI ; 禁止总中断 4.11 RET RET 堆栈栈顶值 PC 无子程序返回 AP- -001C-v1.1 05.15.2016 7
TEST: ;TEST 子程序 RET ; 子程序返回 MAIN: CALL TEST ; 调用 TEST 子程序 JMP MAIN 4.12 RETI RETI 堆栈栈顶值 PC;1 INT 位无中断返回, 该指令只可用于中断返回 TCC_INT: RETI ;TCC 中断程序 ; 中断程序返回 4.13 RETL k RETL k k A, 堆栈栈顶值 PC 无立即数 k 赋给 A, 子程序返回 RETL @0X55 ;A 的值为 0X55 并返回 4.14 MOV R,A MOV R,A A R 无 A 值赋给寄存器 R 8 05.15.2016 MOV A,@0x11 MOV 0x10,A ;0X11 给 A ;A 的值给 0X10(R) AP- -001C-v1.1
4.15 MOV A,R MOV A,R R A Z Z: 当 A 为 0 时 Z=1; 否则 Z=0 寄存器 R 的值给 A MOV A,0x19 ;0X19 寄存器的值给 A 4.16 MOV R,R MOV R,R R R Z Z: 当 R=0 时 Z=1;R!=0 时 Z=0 R 的值给 R, 此指令只可用于 IO 口状态保存 ( 多用于睡眠之前, 两个 R 为同一 IO 口, 例如 :MOV PORT6,PORT6) MOV 0X6,0X6 ;port6 值给 port6, 保存 PORT6 的状态 4.17 MOV A,k MOV A,k k A 无立即数 k 值赋给 A MOV A,@9 ; 立即数 9 赋给 A 4.18 CLRA CLRA 0 A Z Z: Z=1 A 清零 CLRA ;A 值清零 AP- -001C-v1.1 05.15.2016 9
4.19 CLR R CLR R 0 R Z Z: Z=1 R 清零 CLR 0X10 ;R 值清零 4.20 SUB A,R 语法 SUB A,R 操作 R-A A 影响状态 Z,C,DC,OV,N C: 有借位则 C=0; 反之 C=1 DC: 低 4 位有借位则 DC=0; 反之 DC=1 OV: 结果超出 -128~127 OV=1; 反之 OV=0 说明 R 的值减去 A 的值, 差值赋给 A MOV A,@0X23 SUB A,0X20 ;A=R-A 4.21 SUB R,A SUB R,A R-A R Z,C,DC,OV,N C: 有借位则 C=0; 反之 C=1 DC: 低 4 位有借位则 DC=0; 反之 DC=1 OV: 结果超出 -128~127 OV=1; 反之 OV=0 R 的值减去 A 的值, 差值赋给 R MOV A,@0x99 MOV 0x10,A MOV A,@0x55 SUB A,0x10 ;R10 = 0x99 ;A = R10-A = 0x44 10 05.15.2016 AP- -001C-v1.1
4.22 SUB A,k SUB A,k k-a A Z,C,DC,OV,N C: 有借位则 C=0; 反之 C=1 DC: 低 4 位有借位则 DC=0; 反之 DC=1 OV: 结果超出 -128~127 OV=1; 反之 OV=0 立即数 k 减去 A 的值, 差值赋给 A MOV A,@0x01 SUB A,@0x02 ;A = 0x01 ;A = 0x02-0x01 = 0x01 4.23 DECA R DECA R R-1 A Z,C,DC,OV,N C: 有借位则 C=0; 反之 C=1 DC: 低 4 位有借位则 DC=0; 反之 DC=1 OV: 结果超出 -128~127 OV=1; 反之 OV=0 R-1 的值赋给 A DECA 0x10 ;0X10 的值减 1 给 A 4.24 DEC R DEC R R-1 R Z,C,DC,OV,N C: 有借位则 C=0; 反之 C=1 DC: 低 4 位有借位则 DC=0; 反之 DC=1 OV: 结果超出 -128~127 OV=1; 反之 OV=0 R-1 的值赋给 R AP- -001C-v1.1 05.15.2016 11
MOV A,@0xF MOV 0x10,A DEC 0x10 ; 此时,0X10 寄存器的值为 0XE 4.25 OR A,R 语法 OR A,R 操作 A R A 影响状态 Z,N 说明 A 与 R 相或的值赋给 A MOV A,@0x55 MOV 0x10,A MOV A,@0xAA OR A,0x10 ;0X55 与 0XAA 或的结果给 A,A=0XFF 4.26 OR R,A 语法 OR R,A 操作 R A R 影响状态 Z,N 说明 A 与 R 相或的值赋给 R MOV A,@0x55 MOV 0x10,A MOV A,@0xAA OR 0x10,A ;A 与 R(0X10) 或的结果给 R R=0XFF 4.27 OR A,k 12 05.15.2016 OR A,k A k A Z,N A 与立即数 k 相或的值赋给 A AP- -001C-v1.1
MOV A,@0xAA OR A,@0x55 ;0XAA 与 0X55 或的结果给 A.A=0XFF 4.28 AND A,R 语法 AND A,R 操作 A&R A 影响状态 Z,N 说明 A 与 R 相与的值赋给 A MOV A,@0x6 AND A,0x10 ;0x6 与 R(0x10) 相与的值给 A 4.29 AND R,A 语法 AND R,A 操作 R&A R 影响状态 Z,N 说明 A 与 R 相与的值赋给 R MOV A,@0x6 AND 0x10,A ;0x6 与 R(0x10) 相与的值给 R 4.30 AND A,k AND A,k k&a A Z,N A 与立即数 k 相与的值赋给 A MOV A,@0x6 AND A,@0x10 ;0x6 与 0x10 相与的值给 A AP- -001C-v1.1 05.15.2016 13
4.31 XOR A,R XOR A,R A R A Z,N A 与 R 相异或的值赋给 A MOV A,@0x55 XOR A,0x10 ;R 与 A 异或的值给 A JBS STATUS,Z ; 异或的值是否为 0 JMP ERROR ; 不为 0 跳转到 ERROR 4.32 XOR R,A XOR R,A A R R Z,N A 与 R 相异或的值赋给 R MOV A,@0x55 XOR 0x10,A ;R 与 A 异或的值给 R JBS STATUS,Z ; 异或的值是否为 0 JMP ERROR ; 不为 0 跳转到 ERROR 4.33 XOR A,k XOR A,k k A A Z,N A 与立即数 k 异或的值赋给 A MOV A,@0x55 XOR A,@0XAA ;0X55 与 A 异或的值给 A JBS STATUS,Z ; 异或的值是否为 0 JMP ERROR ; 不为 0 跳转到 ERROR 14 05.15.2016 AP- -001C-v1.1
4.34 ADD A,R ADD A,R A+R A Z,C,DC,OV,N C: 有进位则 C=1; 反之 C=0 DC: 低 4 位有进位则 DC=1; 反之 DC=0 OV: 结果超出 -128~127 OV=1; 反之 OV=0 A 与 R 相加之和赋给 A MOV A,0x11 ADD A,0x12 ;R(0X12) 与 A 值相加 4.35 ADD R,A ADD R,A A+R R Z,C,DC,OV,N C: 有进位则 C=1; 反之 C=0 DC: 低 4 位有进位则 DC=1; 反之 DC=0 OV: 结果超出 -128~127 OV=1; 反之 OV=0 A 与 R 相加之和赋值给 R MOV A,0x11 ADD 0x12,A ;R(0X12) 与 A 值相加给 R(0X12) 4.36 ADD A,k 语法操作影响状态 说明 AP- -001C-v1.1 ADD A,k A+k A Z,C,DC,OV,N C: 有进位则 C=1; 反之 C=0 DC: 低 4 位有进位则 DC=1; 反之 DC=0 OV: 结果超出 -128~127 OV=1; 反之 OV=0 A 与立即数 k 相加之和赋值给 A 05.15.2016 15
MOV A,0x11 ADD A,@0x12 ;0X12 与 A 值相加给 A 4.37 COMA R 语法 COMA R 操作 /R A 影响状态 Z,N 说明 R 的值取反赋给 A MOV A,0x6 MOV 0x10,A COMA 0x10 MOV 0x6,A ;R(0X10) 取反给 A 4.38 COM R COM R /R R Z,N R 的值取反赋值给 R MOV A,0x6 MOV 0x10,A COM 0x10 ;R(0X10) 取反给 R(0X10) 4.39 INC R 语法 INC R 操作 R+1 R 影响状态 Z,C,DC,OV,N C: 有进位则 C=1; 反之 C=0 DC: 低 4 位有进位则 DC=1; 反之 DC=0 OV: 结果超出 -128~127 OV=1; 反之 OV=0 说明 R 的值加 1 赋值给 R 16 05.15.2016 AP- -001C-v1.1
INC COUNTER ; COUNTER = COUNTER +1 4.40 INCA R 语法 INCA R 操作 R+1 A 影响状态 Z,C,DC,OV,N C: 有进位则 C=1; 反之 C=0 DC: 低 4 位有进位则 DC=1; 反之 DC=0 OV: 结果超出 -128~127 OV=1; 反之 OV=0 说明 R 的值加 1 赋值给 A INCA COUNTER ;counter+1 给 A MOV COUNTER,A 4.41 DJZA R DJZA R R-1 A, 如果 A=0 则跳过下一条指令无 R 减 1 的值赋值给 A, 如果 A=0 则跳过下一条指令 HERE: CONT: SKIP: DJZA 0x9 ; A = R(0x9)-1 如果为 0 跳到 SKIP 执行 MOV A,0x10 ; ADD A,@10 4.42 DJZ R 语法 DJZ R 操作 R-1 R, 如果 R=0 则跳过下一条指令 影响状态 无 说明 R 的值减 1 赋值给 R, 如果 R=0 则跳过下一条指令, AP- -001C-v1.1 05.15.2016 17
MOV A,@100 MOV 0x10,A LOOP: DJZ 0x10 ;0X10-1 等于 0? JMP LOOP ; 否, 跳到 loop RET ; 是, 返回 4.43 RRCA R 语法 RRCA R 操作 R(n) A(n-1),C A(7),R(0) C 影响状态 C,N C: R(0) 移位给 C N: A 结果为负数则 N=1; 反之 N=0 说明 带进位的 R 值右移一位给 A MOV A,@0x8 MOV COUNTER,A LOOP: RRCA BIT_BUF RRCA BIT_BUF MOV 0x5,A MOV BIT_BUF,A DJZ COUNTER JMP LOOP 4.44 RRC R RRC R R(n) R(n-1),C R(7),R(0) C C,N C: R(0) 移位给 C N: R 结果为负数则 N=1; 反之 N=0 带进位的 R 值右移一位给 R 18 05.15.2016 MOV A,@0x0f CLR 0x3,0 MOV 0x10,A ; 清 C 标志 ;R10 = 0B00001111 RRC 0x10 ;R10 = 0B00000111, C = 1 AP- -001C-v1.1
4.45 RLCA R RLCA R R(n) A(n+1),C A(0),R(7) C C,N C: R(7) 移位给 C N: A 结果为负数则 N=1; 反之 N=0 带进位的 R 值左移一位给 A MOV A,@0x0f CLR 0x3,0 ; 清 C 标志 MOV 0x10,A ;R10 = 0B00001111 RLCA 0x10 ;R10 = 0B00001111, A=0B00011110 C=0 4.46 RLC R RLC R R(n) R(n+1),C R(0),R(7) C C,N C: R(7) 移位给 C N: R 结果为负数则 N=1; 反之 N=0 带进位的 R 值左移一位给 R BC 0X3,0 RLC 0x10 ;0X10 左移一位 RLC 0x11 ;0x11 左移一位 4.47 SWAPA R 语法 SWAPA R 操作 R(3~0) A(7~4) R(7~4) A(3~0) 影响状态 无 说明 半字节交换指令,R 的低四位给 A 的高四位,R 的高四位给 A 的低四位 MOV A,@0x6 MOV 0x10,A ;R=0X06 SWAPA 0x10 MOV 0x6,A ;R=0X60 AP- -001C-v1.1 05.15.2016 19
4.48 SWAP R SWAP R R(3~0) R(7~4) 无 半字节交换指令,R 的高四位与 R 低四位互换 MOV A,@0x43 MOV 0x10,A ;R10 = 0x43 SWAP 0x10 ;R10 = 0x34 4.49 JZA R JZA R R+1 A 如果 A=0 跳过下一条指令执行无 R 值加 1 给 A, 如果 A=0 则跳过下一条指令执行 MOV A,@x00 LOOP: MOV 0x10,A JZA 0x10 ;R+1 给 A A=0? JMP LOOP ; 否, 跳到 loop RET ; 是, 返回 4.50 JZ R JZ R R+1 R 如果结果为 0 跳过下一条指令执行无 R 值加 1, 如果为 0 则跳过下一条指令执行 HERE: JZ 0x10 ;0X10 +1=0? CONT: MOV A,0x10 SKIP: ADD A,@10 20 05.15.2016 AP- -001C-v1.1
4.51 BC R,b 语法 BC R,b 操作 0 R(b) 影响状态 无 说明 位清零指令,R 的 bit b 清零 (b=0~7) MOV A,@0x0f MOV 0x10,A ;R10 = 00001111 BC 0x10,3 ;R10 = 00000111 4.52 BS R,b 语法 BS R,b 操作 1 R(b) 影响状态 无 说明 位置 1 指令,R 的 bit b 置 1 ( b=0~7) MOV A,@0x07 MOV 0x10,A ;R10 = 00000111 BS 0x10,3 ;R10 = 00001111 4.53 JBC R,b JBC R,b R(b) 为 0 则跳过下一条指令无判断 R 的 bit b 是否为 0, 如果是跳过下一条指令 (b=0~7) JBC 0x6,0 BS 0x10,0 JBS 0x6,0 BC 0x10,0 AP- -001C-v1.1 05.15.2016 21
4.54 JBS R,b JBS R,b R(b) 为 1 则跳过下一条指令无判断 R 的 bit b 是否为 1, 如果是跳过下一条指令 (b=0~7) JBS 0x6,0 BC 0x10,0 JBC 0x6,0 BS 0x10,0 4.55 CALL k 语法 CALL k PC+1 的值 堆栈操作 k PC(9~0) 影响状态无说明调用子程序 ( 页内调用 ) MAIN: CALL KEY_SCAN JMP MAIN KEY_SCAN: RET ;MAIN,KEY_SCAN 子函数必须在同一页 4.56 LCALL k LCALL k PC+1 的值 堆栈 k PC 无长调用指令, 任意页调用子程序 22 05.15.2016 ORG 0x100 ;page 0 MAIN: LCALL KEY_SCAN ;KEY_SCAN 地址可以在任意位置 JMP KEY_SCAN: MAIN Org 0x400 ;page 1 RET AP- -001C-v1.1
4.57 JMP k JMP k k PC(9~0) 无页内跳转指令, 同一页内跳转到地址 k 执行程序 JBS 0X6,0 JMP KEY_SCAN KES_SCAN: RET 4.58 LJMP k LJMP k k PC 无长跳转指令, 任意页跳转到地址 k 执行程序 ORG 0X100 ;PAGE 0 JBS 0X6,0 LJMP KEY_SCAN ;KEY_SCAN 的地址可以在任意页 ORG 0X400 ;PAGE 1 KES_SCAN: RET 4.59 BANK k BANK k k R4(7.6) 无 切换到 BANK k(gbank 或者 SBANK) MOV A,@0X0F BANK 1 MOV 0X20,A ;0X0F 给 BANK 1 的 0x20 AP- -001C-v1.1 05.15.2016 23
4.60 SBANK k 语法影响状态说明 SBANK k 无切换特殊控制寄存器 BANK SBANK 1 MOV A,@0XFF MOV 0X06,A 4.61 GBANK k 语法影响状态说明 GBANK k 无切换通用 RAM BANK SBANK 1 MOV A,@0XFF MOV 0X20,A 4.62 TBRD R 语法 TBRD R 操作 ROM[(TABPTR)] R 影响状态 无 说明 读 ROM 指令,(TABPTR) 指向的 ROM 数据给 R ( 结合 HLB 来读取低 8 位还是高 8 位数据 ) CLR CLR BC TBRD BS TBRD MOV AND TBPTL TBPTH HLB 0x10 HLB 0x11 A,@0x1F 0x11,A 24 05.15.2016 AP- -001C-v1.1
4.63 TBRDA R TBRDA R ROM[(TABPTR)](H) A,ROM[(TABPTR)](L) R 无读 ROM 指令,(TABPTR) 指向的 ROM 数据的低字节给 A, 高字节给 R CLR CLR BC TBRD TBPTL TBPTH HLB 0x10 4.64 XCH R XCH R A R 无 A 的值与 R 互换 MOV MOV MOV XCH A,@0X55 0X10,A A,@0XAA 0X10 4.65 BTG R,b 语法 BTG R,b 操作 /R(b) R(b) 影响状态 无 说明 位 R(b) 取反 ( 只对 R5~RA 有效 ) BTG 0X6,0 ;P60 取反 AP- -001C-v1.1 05.15.2016 25
4.66 JE R 语法影响状态说明 JE R 无 R 与 A 比较, 相等则跳过下一条指令 MOV A,@0X03 JE 0X50 JMP next1 ;R 与 A 不相等执行 next1 程序 JMP next2 ;R 与 A 相等执行 next2 程序 4.67 JGE R 语法影响状态说明 JGE R 无 R 与 A 比较,R 大于 A 则跳过下一条指令 MOV A,@0X03 JGE 0X50 jmp next1 ;R 小于 A 执行 next1 程序 jmp next2 ;R 大于 A 执行 next2 程序 4.68 JLE R 语法 JLE R 影响状态 无 说明 R 与 A 比较,R 小于 A 则跳过下一条指令 MOV A,@0X03 JLE 0X50 JMP next1 ;R 大于 A 执行 next1 程序 JMP next2 ;R 小于 A 执行 next2 程序 26 05.15.2016 AP- -001C-v1.1
4.69 JE k 语法影响状态说明 JE k 无立即数 k 与 A 比较, 相等则跳过下一条指令 MOV A,@0X03 JE @0x05 JMP next1 ;A 不等于 5 执行 next1 程序 JMP next2 ;A 等于 5 执行 next2 程序 4.70 SJC k 语法 SJC k 影响状态 无 说明 如果有进位 (C=1) 则跳到 k( 地址范围 +127~-128) MOV A,@0X03 ADD A,0X50 SJC NEXT ;R+0X03 有进位, 则跳到 next 4.71 SJNC k 语法 SJNC k 影响状态 无 说明 如果无进位 (C=0) 则跳到 k( 地址范围 +127~ -128) MOV A,@0X03 ADD A,0X50 SJNC NEXT ;R(0X50)+0X03 无进位, 则跳到 NEXT AP- -001C-v1.1 05.15.2016 27
4.72 SJZ k 语法 SJZ k 影响状态 无 说明 如果 Z=1, 则跳到 k( 地址范围 +127~-128) MOV A,0x50 SJZ NEXT ; 如果 Z=1, 则跳到 next 4.73 SJNZ k 语法 SJNZ k 影响状态 无 说明 如果 Z=0, 则跳到 k( 地址范围 +127~-128) MOV A,0x50 SJNZ NEXT ; 如果 Z=0, 则跳到 next 4.74 ADC A,R ADC A,R A+R+C A Z,C,DC,OV,N C: 有进位则 C=1; 反之 C=0 DC: 低 4 位有进位则 DC=1; 反之 DC=0 OV: 结果超出 -128~127 OV=1; 反之 OV=0 带进位加法, 结果给 A MOV ADC A,@0x10 A,0X50 28 05.15.2016 AP- -001C-v1.1
4.75 ADC R,A ADC R,A A+R+C R Z,C,DC,OV,N C: 有进位则 C=1; 反之 C=0 DC: 低 4 位有进位则 DC=1; 反之 DC=0 OV: 结果超出 -128~127 则 OV=1; 反之 OV=0 带进位加法, 结果给 R MOV ADC A,@0x10 0X50,A 4.76 SUBB A,R 语法 SUBB A,R 操作 R-A-/C A 影响状态 Z,C,DC,OV,N C: 有借位则 C=0; 反之 C=1 DC: 低 4 位有借位则 DC=0; 反之 DC=1 OV: 结果超出 -128~127 则 OV=1; 反之 OV=0 说明 带借位减法, 结果给 A MOV A,@0x10 SUBB A,0X50 4.77 SUBB R,A SUBB R,A R-A-/C A Z,C,DC,OV,N C: 有借位则 C=0; 反之 C=1 DC: 低 4 位有借位则 DC=0; 反之 DC=1 OV: 结果超出 -128~127 则 OV=1; 反之 OV=0 带借位减法, 结果给 R AP- -001C-v1.1 05.15.2016 29
MOV A,@0x10 SUBB 0X50,A 4.78 TBWR 语法影响状态说明 TBWR 无 ROM table 写开始指令 MOV TBWR A,@0x10 4.79 INT k INT k 将 PC+1 压栈,k*2 PC 无软件中断 INT 0X200 ;0X200*2=0X400 给 PC 4.80 INT INT 将 PC+1 压栈,002H 或 001H PC 无软件中断 INT 30 05.15.2016 AP- -001C-v1.1
4.81 RLA R RLA R R(n) A(n+1),R(7) A(0) N R 的值左移一位给 A RLA 0X50 4.82 RL R 语法 RL R 操作 R(n) R(n+1),R(7) R(0) 影响状态 N 说明 R 的值左移一位 RL 0X50 4.83 RRA R RRA R R(n) A(n-1),R(0) A(7) N R 的值右移一位给 A RRA 0X50 4.84 RR R RR R R(n) R(n-1),R(0) R(7) N R 的值右移一位 RR 0X50 AP- -001C-v1.1 05.15.2016 31
4.85 NEG R 语法 NEG R 操作 /R+1 R 影响状态 Z,C,DC,N,OV C: 有进位则 C=1; 反之 C=0 DC: 低 4 位有进位则 DC=1; 反之 DC=0 OV: 结果超出 -128~127 OV=1; 反之 OV=0 说明 R 的值转为二进制补码 ( 取反加 1) NEG 0X50 4.86 RESET 语法影响状态说明 RESET 所有寄存器 = 复位值软件复位 MOV RESET A,@0x10 ; 复位 32 05.15.2016 AP- -001C-v1.1
5. 纪录 Data version Modify item comment 2016/04/15 v1.0 指令介绍说明初版 2016/5/15 v1.1 修改 DCC 指令操作说明 AP- -001C-v1.1 05.15.2016 33