EM78系列单片机将众多功能集于一身,这其中包括ALU、ROM、RAM、I/O、堆栈、 中断控制器、定时/计数器、看门狗、电压检测器、复位电路、振荡电路等。
EM78系列单片机采用RISC结构设计、单周期、单字节及流水线指令、五级堆栈、RAM 数量从32~157个,最短指令周期100ns,与其它一些单片机相比,EM78系列单片机具有更高、更快的运行处理速度。
符号注释
1.符号“R”:代表某个寄存器.
2.符号“B”:代表寄存器中的某一位.
3.符号“K”:代表一个8位或10位的常数.
4.符号“A”:代表累加寄存器.
5.在常数之前加@.
6.在十六进制之前加0x,在十进制之前不加.
7.注释语句前加;.
8.ORG为定义初始地址.
9.“= =”为定义代号值,在使用之前要进行定义.
操作指令
- 面向寄存器型操作指令
符号 | 指令动作 | 指令周期 | 注 |
---|---|---|---|
ADD A, R | A+R->A | 1 | A加R,结果保存到A |
ADD R, A | A+R->R | 1 | A加R,结果保存到R |
AND A,R | A&R->A | 1 | A和R相与,结果保存到A |
AND R,A | A&R->R | 1 | A和R相与,结果保存到R |
CLR R | 0->R | 1 | 清除寄存器R |
CLRA | 0->A | 1 | 清除累加器A |
COM R | /R->R | 1 | 寄存器R取反,结果保存到R |
COMA R | /R->A | 1 | 寄存器R取反,结果保存到A |
DAA | A 寄存器调整为 BCD 值 | 1 | 对累加器A做十进制调整(转换成BCD码) |
DEC R | R-1->R | 1 | 寄存器R的值减1,结果保存到R |
DECA R | R-1->A | 1 | 寄存器R的值减1,结果保存到A |
DJZ R | R-1->R 结果为零就跳过下一个指令 | 1 | 寄存器R减1,结果保存到R,值为0就跳过下一指令 |
DJZA R | R-1->A 结果为零就跳过下一个指令 | 1 | 寄存器R减1,结果保存到A,值为0就跳过下一指令 |
INC R | R+1->R | 1 | 寄存器R加1,结果保存到R |
INCA R | R+1->A | 1 | 寄存器R加1,结果保存到A |
JZ R | R+1->R, 结果为零就跳过下一个指令 | 1 | 寄存器R加1,结果保存到R,值为0就跳过下一指令 |
JZA R | R+1->A, 结果为零就跳过下一个指令 | 1 | 寄存器R加1,结果保存到A,值为0就跳过下一指令 |
MOV R,A | A->R | 1 | 将累加器A中内容送到寄存器R中 |
MOV A,R | R->A | 1 | 将寄存器R中内容送到累加器A中 |
MOV R,R | R->R | 1 | 将寄存器R中内容送到寄存器R中 |
OR A,R | A OR R ->A | 1 | A和B相或,结果保存到A |
OR R,A | A OR R->R | 1 | A和B相或,结果保存到R |
SUB A,R | R-A->A | 1 | 寄存器R减A,结果保存到A |
SUB R,A | R-A->R | 1 | 寄存器R减A,结果保存到R |
XOR A,R | A XOR R->A | 1 | A和B相异或,结果保存到A |
XOR R,A | A XOR R->R | 1 | A和B相异或,结果保存到R |
- 面向位操作指令
符号 | 指令动作 | 指令周期 | 注 |
---|---|---|---|
BC R,B | 0->R(B) | 1 | 寄存器R第B位清0 |
BS R,B | 1->R(B) | 1 | 寄存器R第B位置1 |
JBC R,B | 如果 R(B)=0, 则跳过下一个指令 | 1 | 如果寄存器R第B位为0,则跳过下一指令 |
JBS R,B | 如果 R(B)=1, 则跳过下一个指令 | 1 | 如果寄存器R第B位为1,则跳过下一指令 |
RLC R | R(N)->R(N+1),R(7)->C,C->R(0) | 1 | 寄存器R带进位标志C 循环左移 |
RLCA R | R(N)->A(N+1),R(7)->C,C->A(0) | 1 | 寄存器R带进位标志C 循环左移,结果保存到累加器A |
RRC R | R(N)->R(N-1),R(0)->C,C->R(7) | 1 | 寄存器R带进位标志C 循环右移 |
RRCA R | R(N)->A(N-1),R(0)->C,C->A(7) | 1 | 寄存器R带进位标志C 循环右移,结果保存到累加器A |
SWAP R | R(0-3)->R(4-7) ,R(4-7)->R(0-3) | 1 | 寄存器R高4位和低4位互换 |
SWAPA R | R(0-3)->A(4-7) ,R(4-7)->A(0-3) | 1 | 寄存器R高4位和低4位互换,结果保存到累加器A |
- 常数操作指令、控制类指令(其中K都为一常量)
符号 | 指令动作 | 指令周期 | 注 |
---|---|---|---|
ADD A,K | A+K->A | 1 | A加立即数K,结果保存到A |
AND A,K | A&K->A | 1 | A和K相与,结果保存到A |
CALL K | PC+1->[SP] ,(PAGE,K)->PC | 2 | 调用子程序,将返回地址入栈,由K指定的10位地址装入PC(9::0) |
CONTR | CONT->A | 1 | 读CONT寄存器,结果保存到A |
CONTW | A->CONT | 1 | 将寄存器A的值写入CONT寄存器 |
DISI | 禁止中断 | 1 | 清INT位0,禁止全局中断 |
ENI | 使能中断 | 1 | 置INT位1,使能全局中断 |
INT | PC+1->[SP] 001H->PC | 1 | 跳转到软件中断指令向量处 |
IOR R | IOCR->A | 1 | 将IO输入输出控制寄存器内容读出,结果保存到寄存器A |
IOW R | A->IOCR | 1 | 将寄存器A内容写入IO输入输出控制寄存器 |
JMP K | (PAGE,K)->PC | 2 | 无条件转移指令 |
MOV A,K | K->A | 1 | 将立即数K送到A |
NOP | No Operation | 1 | 空转 |
OR A,K | A OR K->A | 1 | A和K相或,结果保存到A |
RET | [堆栈顶端]->PC ;return | 2 | 使能中断,子程序返回并开启中断 |
RETI | [堆栈顶端]->PC | 2 | 使能中断,中断返回并返回到A值 |
RETL K | K->A, [堆栈顶端]->PC | 2 | 子程序返回,K载入累加器A,栈顶弹入PC(多用于查表) |
SLEP | 0->WDT, | 1 | 休眠指令,振荡器停止振荡 |
SUB A,K | K-A->A | 1 | K减A,结果保存到A |
TBL | PC+A->PC | 2 | 程序计数器PC和A相加,结果保存到PC |
WDTC | 0->WDT | 1 | ;清空看门狗计时器 |
XOR A,K | A XOR K->A | 1 | A和K相异或,结果保存到A |