微型嵌入式自编程控制器MEAPC
第三章 MEAPC指令表
MEAPC的指令系统由43条指令组成。可完成:位运算、数值运算、逻辑运算、移位、跳转等功能。有一个“布尔处理器 P0”,通过它可以处理大量的位数据信息,在工控中非常有用。同时还有一些特殊功能的“宏指令”。只需少量的代码就可方便地完成各种复杂的智能电路的设计。用它取代一些传统的继电器控制电路易如反掌!MEAPC的指令系统(见表3-1)。
自编程控制器MEAPC-C1指令表 表:3-1
序号 |
指令 |
助记符 |
字节 |
说明 |
位处理指令 |
||||
1 |
0x |
CLR Px |
1 |
Px=0 ;x0~FH |
2 |
1x |
SET Px |
1 |
Px=1 |
3 |
2x |
IN Px |
1 |
P0=Px |
4 |
3x |
OUT Px |
1 |
Px=P0 |
5 |
4x |
AND Px |
1 |
Px与P0,结果在P0 |
6 |
5x |
OR Px |
1 |
Px或P0,结果在P0 |
7 |
6x |
NOT Px |
1 |
Px取反,结果在Px |
寄存器处理指令 |
||||
8 |
7x |
INC Rx |
1 |
Rx=Rx+1 |
9 |
8x |
DEC Rx |
1 |
Rx=Rx-1 |
10 |
9x |
CHE Rx |
1 |
交换R0,Rx中的内容 |
11 |
Ax |
ADC Rx |
1 |
带P0位加法: R0=R0+Rx+P0 |
12 |
Bx |
Bx |
1 |
指定标号:x=0~F |
13 |
Cx |
JMP x |
1 |
跳转到指定标号:x=0~F |
14 |
Ex |
MRx,#d |
2 |
赋值:Rx=#d ;d=0~255 |
宏处理指令 |
||||
15 |
F0 |
JP0 |
1 |
P0=0,跳过一行 |
16 |
F1 |
JR0 |
1 |
R0=0,跳过一行 |
17 |
F2 |
LRP |
1 |
R0带P0位左循环移1位 |
18 |
F3 |
MRP |
1 |
R0中的内容并行送到P1~P8口 |
19 |
F4 |
10mS |
1 |
延时 10毫秒 |
20 |
F5 |
100mS |
1 |
延时 100毫秒 |
21 |
F6 |
1S |
1 |
延时 1秒 |
22 |
F7 |
ST0 |
1 |
将R0R1中的值送入T0计数器后,启动T0计数器 |
23 |
F8 |
RT0 |
1 |
读出T0计数器的值,存入R0R1中,P15溢出标志。 |
24 |
F9 |
CT0 |
1 |
关闭T0计数器,并读出T0计数器的值,存入R0R1 |
25 |
FA |
BCD |
1 |
R0R1中16位二进制数转换成BCD码,存入R0R1R2R3R4 |
26 |
FB |
SEG |
1 |
用R0中的序号,读取相应的字符段码,存入R0 |
27 |
FC |
SPI |
1 |
当P0=0时:R0中的值从低位开始,串行输出到P1口,P2输出8个移位负脉冲;当P0=1时:将P1口的数据串行输入到R0中,P2输出8个移位负脉冲。 |
28 |
FD |
WRE |
1 |
将R0中的值写入R1指定的E224单元。(范围:0~255) |
29 |
FE |
RDE |
1 |
读取R1指定的E224单元的值,存入R0。(范围:0~255) |
30 |
FF |
PWN |
1 |
进入掉电状态。 |
31 |
D0 |
REP |
1 |
返回到程序的开始行 |
32 |
D1 |
AND |
1 |
R0与R1,结果在R0 |
33 |
D2 |
OR |
1 |
R0或R1,结果在R0 |
34 |
D3 |
NOT |
1 |
R0取反,结果在R0 |
35 |
D4 |
JMP R14 |
1 |
上跳R14中指定的行数,范围(0~255) |
36 |
D5 |
JMP R15 |
1 |
下跳R15中指定的行数,范围(0~255) |
伪指令 |
||||
37 |
D9 |
SEE |
查看程序的长度,并写入E224中,地址:200H,201H |
|
38 |
DA |
COPYM |
控制板上E224中的值复制到编程板上E224中 编程板上E224中的值复制到控制板上E224中 编程指针倒退3行 编程指针回到第1行 编程指针回到中间行 编程指针回到最后1行 |
|
39 |
DB |
COPYS |
||
40 |
DC |
BACK |
||
41 |
DD |
START |
||
42 |
DE |
MID |
||
43 |
DF |
END |
||
说明:
|
第四章 指令系统使用详解
本章以指令的序号顺序,叙述每条指令的功能并举例。除了指令:MRx是2字节外,其余均是单字节指令。使用时请注意以下几点:
1、D9~DF指令是伪指令,不会写入EE24中。
2、P代表:位。
3、R代表:8位寄存器。
4、只有指令:ADC Rx 影响P0位。
5、Bx指令为程序提供了16个标号,便于编程。如果不够用,可以使用:JMPR14、JMPR15指令完成间接跳转(详见MEAPC-C1指令表3-1)。
6、输入数据必须采用16进制。16进制表示:xxH ;10进制:xx ;2制:xxB。编写程序时为了便于阅读,助记符的数字一般采用10进制书写。
数字:0~15的十进制、二进制、十六进制之间转换关系见表4-1
十进制、二进制、十六进制之间转换关系 表:4-1
十进制 |
二进制 |
十六进制 |
十进制 |
二进制 |
十六进制 |
|
0 |
00000000B |
00H |
8 |
00001000B |
08H |
|
1 |
00000001B |
01H |
9 |
00001001B |
09H |
|
2 |
00000010B |
02H |
10 |
00001010B |
0AH |
|
3 |
00000011B |
03H |
11 |
00001011B |
0BH |
|
4 |
00000100B |
04H |
12 |
00001100B |
0CH |
|
5 |
00000101B |
05H |
13 |
00001101B |
0DH |
|
6 |
00000110B |
06H |
14 |
00001110B |
0EH |
|
7 |
00000111B |
07H |
15 |
00001111B |
0FH |
§ 4-1 位操作指令
1: 0x CLR Px ;x=0~F
例: 已知:P0=1 执行:
00 CLR P0 ;P0位清零
结果:P0=0
2: 1x SET Px ;
例: 已知:P15=0 执行:
1F SET P15 ;P15位置1
结果:P15=1
3: 2x IN Px ;x=0~F
例: 已知:P7=1 ;P0=0 执行:
27 IN P7 ;读入P7位的数据到P0位
结果:P0=1
4: 3x OUT Px ;
例: 已知:P8=0 ;P0=1 执行:
38 OUT P8 ;P0位的数据送到P8位
结果:P8=1
5: 4x AND Px ;x=0~F
例: 已知:P10=0 ;P0=1 执行:
4A AND P10 ;P10位逻辑与P0位,结果送P0位。
结果:P0=0
6: 5x OR Px ;
例: 已知:P11=0 ;P0=1 执行:
5B OR P11 ;P11位逻辑或P0位,结果送P0位。
结果:P0=1
7: 6x NOT Px ;x=0~F
例: 已知:P12=0 执行:
6C NOT P12 ;P12位取反,结果送P12位
结果:P12=1
§ 4-2 寄存器指令
8: 7x INC Rx ;x=0~F
例: 已知:R2=3 执行:
70 INC R2 ;R2寄存器加1,不影响P0位
结果:R2=4
9: 8x DEC Rx ;x=0~F
例: 已知:R1=8 执行:
81 DEC R1 ;R1数据减1
结果:R1=7
10: 9x CHE Rx
例: 已知:R0=8;R10=15 执行:
9A CHE R10 ;R10和P0的数据交换
结果:R0=15;R10=8
11: Ax ADC Rx ;
例: 已知:R0=5;P0=1;R10=20 执行:
AA ADC R10 ;R10加P0位加R0,结果送R0
结果:R0=26
12: Bx Bx ;产生标号
例: 00 CLR P0
11 SET P1
B0 B0:B0
02 CLR P2
63 NOT P3
70 INC R0
C0 JMP B0
13: Cx JMP x ;见Bx指令
14: Ex MRx ,#d ;(2字节)
例: 已知:R5=8; 执行:
E5 C8 MR5,#200 ;200送入R5寄存器
结果:R5=200
§ 4-3 转移指令
15: F0 JP0
如果 P0位=0 ,则跳过一行 ,否则 顺序执行
例:(采用间接跳转指令:JMP R14)
EE 02 MR14 ,#2 ;设置上跳转的行数
。。。
L0: ;标号
00 P0=0 ;P0=0
F0 JP0 ;跳行
D4 JMP R14 ;上跳2行 (见指令表)
L1: ;继续执行
。。。
程序将进入L1标号继续执行,如果令P0=1,则程序进入L0标号执行。
例:(采用标号指令:Bx)
。。。
B0:B0 B0
00 CLR P0
F0 JP0 ;跳行
C0 JMP B0 ;跳到B0行
;继续执行
。。。。
16: F1 JR0 ;当R0=0 则跳行 (见JP0指令)
17: F2 LRP ;
例: 已知:R0=5;(00000101B);P0=0 执行:
F2 LRP ;R0代P0位循环左移1位,结果送R0
结果:R0=0A0 (00001010B)
18: F3 MRP ;R0的值8位并行送到P1~P8位,P1对应低位。
例: 已知: R0=0FFH ;P1~P8=0
E0 FF MR0,#0FFH
F3 MRP
结果: R0=0FF ;P1~P8=1
19~21: F4,F5,F6 ;延时不同时间 (见指令表)
例4-1: 延时3S程序
程序1:
EE 03 MR14 ,#3 ;设定上跳的行数
E0 32 MR0 ,#3 ;赋值R0=3
L0:
F6 1S ;延时1S
80 DEC R0 ;R0=R0-1
F1 JR0 ;R0=0 跳行到L1执行
D4 JMP R14 ;上跳3行
L1:
。。。。
程序2:
F6 1S
F6 1S
F6 1S
程序进入延时后,计数器不影响工作。
22~24: 控制计数器T0的指令,要求外部脉冲是下降沿。
F7 ST0 ;将R0R1中的值送入T0计数器,启动T0计数器
F8 RT0 ;读出T0计数器的值,存入R0R1中,P15溢出标志。
F9 CT0 ;关闭T0计数器,并读出T0计数器的值,存入R0R1中
说明: RT0 指令采用了“飞读”方法,不会产生错相。
例4-2: 记录外部5个脉冲后,停止计数并使P1=1
(采用比较法实现)
E0 05 MR0 ,#05 ;设置5个脉冲
DB NOT ;求R0的补码
70 INC R0 ;+1
92 CHE R2 ;R2=FBH (05的补码)
E0 00 MR0 ,#0 ;R0清 0
E1 00 MR1 ,#0 ;R1清0
EE 04 MR14 ,#04 ;上跳4行
F7 ST0 ; 启动T0计数
L0:
F8 RT0 ;读T0 放入R0R1(16位2进制,R0是高位)
91 CHE R1 ;交换R0,R1
A2 ADC R2 ;R0=R0+R2
F1 JR0 ;等于5个脉冲,跳行
D4 JMP R14
L1:
F9 CT0 ;停止T0计数
11 SET P1 ;P1=1
。。。
例4-3: (采用T0溢出法实现。)
01 CLR P1
E0 FF MR0 ,#0FFH ;R0R1=FFFB+5=10000 溢出
E1 FB MR1 ,#0FBH ;
0F CLR P15 ;清标志
EE 02 MR14 ,#02 ;上跳2行
F7 ST0 ; 启动T0计数,T0=0FFFBH
L0:
2F IN P15 ;P0=P15
F0 JP0 ;等待溢出,跳1行
D4 JMP R14
L1:
F9 CT0 ;停止T0计数
11 SET P1 ;P1=1
。。。
25: FA BCD ;2进制转换成10进制
例4-4: 把:16进制数:033FFH 转换成10进制数
E0 33 MR0 ,#33H
E1 FF MR1 ,#0FFH ;设置数据:033FFH
FA BCD ;转换
结果: R0=01(万);R1=3(千);R2=3(百);R3=1(十);R4=1(个)
033FFH=13311
26: FB SEG ;提取相应数字的字符码 (见字符码表4-1) 例4-5: 已知:R0=9
FB SEG
结果: R0=01111111B ;“9”的字符码按ABCDEFGH从高到低排列。
例4-6: 显示“9。”
E0 09 MR0,#09 ;R0=9
E1 20 MR1,#32 ;间隔系数32
00 CLR P0 ;清P0
A1 ADC R1 ;指向“9。”
FB SEG
结果: R0=1111111111111B;“9。”的字符码
字符码 表:4-2
序号 |
字符 |
字符码 |
序号 |
字符 |
字符码 |
|
0 |
“0” |
11111100B |
21 |
“o” |
00111010B |
|
1 |
“1” |
01100000B |
22 |
“P” |
11001110B |
|
2 |
“2” |
11011010B |
23 |
“q” |
11100110B |
|
3 |
“3” |
11110010B |
24 |
“r” |
00001010B |
|
4 |
“4” |
01100110B |
25 |
“S” |
10110110B |
|
5 |
“5” |
10110110B |
26 |
“U” |
01111100B |
|
6 |
“6” |
10111110B |
27 |
“u” |
00111000B |
|
7 |
“7” |
11100000B |
28 |
“ ” |
00000000B |
|
8 |
“8” |
11111110B |
29 |
“8.” |
11111111B |
|
9 |
“9” |
11110110B |
30 |
“-” |
00000010b |
|
10 |
“A” |
11101110B |
31 |
“t” |
00011110b |
|
11 |
“b” |
00111110B |
32 |
“0.” |
11111101B |
|
12 |
“C” |
10011100B |
33 |
“1.” |
01100001B |
|
13 |
“d” |
01111010B |
34 |
“2.” |
11011011B |
|
14 |
“E” |
10011110B |
35 |
“3.” |
11110011B |
|
15 |
“F” |
10001110B |
36 |
“4.” |
01100111B |
|
16 |
“H” |
01101110B |
37 |
“5.” |
10110111B |
|
17 |
“L” |
00011100B |
38 |
“6.” |
10111111B |
|
18 |
“N” |
11101100B |
39 |
“7.” |
11100001B |
|
19 |
“n” |
00101010B |
40 |
“8.” |
11111111B |
|
20 |
“O” |
11111100B |
41 |
“9.” |
11110111B |
|
说明 |
字符码的排列顺序:a b c d e f g h= D7 D6 D5 D4D D3D D2D D1D 0 |
27: FC SPI ;建立SPI接口,P1:数据,P2:时钟
说明:当P0=0时:输出数据,P2脚输出8个脉冲。
当P0=1时:输入数据,P2脚输出8个脉冲。
见波形图4-1:
D0 D1 D2 D3 D4 D5 D6 D7 D0 D1 D2 D3 D4 D5 D6 D7
P1
P2
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
P0=0:写时序 P0=1:读时序
28: FD WRE ;写数据到E224单元
例3: 把数据28H 写入E224的30H单元。
E1 30 MR1,#30H ;设置E224的地址
E0 28 MR0,#28H ;数据28H放入R0
FD WRE ;写入
29: FE RDE ;从E224单元读数据
例3: 把E224的30H单元的数据读出。
E1 30 MR1,#30H ;设置E224的地址
FE RDE ;读出
结果: R0=28H
30: FF PWN ;停机并进入掉电状态
程序结束后,进入掉电状态,降低功耗。
31: D0 REP ;程序返回首行继续执行
例: 在P1脚产生宽度约:800uS的脉冲串
61 NOT P1
D0 REP ;返回
32~34: D1 AND ;R0逻辑“与”R1,结果在R0
D2 OR ;R0逻辑“或”R1,结果在R0
D3 NOT ;R0取反,结果在R0
例: R0=0FFH ;R1=01 ;求 R0“与”R1
E0 FF MR0 ,#0FFH
E1 01 MR1 ,#01
D1 AND
结果: R0=01H ;R1=01H
例: R0=0FFH ;R1=01 ;求 R0“或”R1
E0 FF MR0 ,#0FFH
E1 01 MR1 ,#01
D2 OR
结果: R0=0FFH ;R1=01H
例:
R0=0FFH ;R1=01
;求 R0“反”
E0
FF MR0 ,#0FFH
D3 NOT
结果: R0=00H
35: F4 JMP R14 ;上跳1~255行(见例4-1)
36: F5 JMP R15 ;下跳1~255行(同 JMP R14)
当R14、R15=0时,进入死循环,要避免!
§ 4-4 转移指令
37: D9 SEE
说明:程序输入完毕后,请输入(D9),LED数码管分两次显示程序的长度,先显示地位字节,再显示高位字节。
38: DA COPYM
说明:程序输入完毕后,请输入(DA),MEAPC-C主控板内的程序,将拷贝到MEAPC-P编程板上,LED数码管显示正在拷贝的地址。
39: DB COPYS
说明:程序输入完毕后,请输入(DB),MEAPC-P编程板内的程序,将拷贝到MEAPC-C主控板上,LED数码管显示正在拷贝的地址。
40: DC BACK
说明:程序输入时,输入(DC),将退回一行。
41~43: DD START
DE MID
DF END
说明:程序输入时,控制编程指针的位置。
§ 4-5 MEAPC应编程技巧 程序1段 JMP R15 (到程序2段) |
空指令 |
程序2段 JMP R15 (到程序3段) |
空指令 |
程序3段 JMP R15 |
MR0,#08;移位8次
B0: B0CHE R1 ;R0=R1
LRP ;R0代P0位左移1位
OUT P5
CLR P6
SET P6 ;P6脚输出正脉冲
CHE R1 ;恢复R0值
DEC R0 ;指针减一
JR0
JMP B0
;输出完毕!
。。。
4:用P1~P8口并行输出字符码,驱动LED数码管(当程序执行周期>20mS时,不宜采用!) 例:将R2、R3中存放的BCD码转换成字符码输出 CHE R2 ;取R2数据到R0 SEG ;转换成字符码 MRP ;并行输出 CLR P9 ;点亮LED1数码管 CHE R3 ;取R3数据到R0 SET P9 ;关闭LED1数码管 SEG ;转换成字符码 MRP ;并行输出 CLR P10 ;点亮LED2数码管 D6 ;空指令,延时400uSSET P9 ;关闭LED2数码管
点击进入:MEAPC介绍资料3
相关键连:AT89C2051的智能时钟
微型嵌入式自编程控制器MEAPC 缺货中
邮局汇款地址:邮编226200 江苏省启东市江海中路511号水晶苑 A1 谢刚 收
电话/传真:0513-83342087 小灵通:0513-83082087 联系人:谢刚
电子信箱: