微型嵌入式自编程控制器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

PxP0,结果在P0

6

5x

OR Px

1

PxP0,结果在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

交换R0Rx中的内容

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

R0P0位左循环移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

R0R116位二进制数转换成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

R0R1,结果在R0

33

D2

OR

1

R0R1,结果在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中,地址:200H201H

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

     

说明:

  1. 16个位:P0~P15地址:0~FHP1~P13对应13I/O线;P0P14P15用户自定义位。P11口是外部脉冲输入脚。当使用T0计数器时,P15做溢出标志。
  2. 168位寄存器:R0~R15地址:0~FH
  3. 2568E224存储器,地址:00H~FFH
  4. X的范围:0~F
  5. D的范围:0~FF

第四章 指令系统使用详解

本章以指令的序号顺序,叙述每条指令的功能并举例。除了指令:MRx2字节外,其余均是单字节指令。使用时请注意以下几点:

1D9~DF指令是伪指令,不会写入EE24中。

2P代表:位。

3R代表:8位寄存器。

4、只有指令:ADC Rx 影响P0位。

5Bx指令为程序提供了16个标号,便于编程。如果不够用,可以使用:JMPR14JMPR15指令完成间接跳转(详见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=8R10=15 执行:

9A CHE R10 R10P0的数据交换

结果:R0=15R10=8

11 Ax ADC Rx

例: 已知:R0=5P0=1R10=20 执行:

AA ADC R10 R10P0位加R0,结果送R0

结果:R0=26

12Bx Bx ;产生标号

例: 00 CLR P0

11 SET P1

B0 B0B0

02 CLR P2

63 NOT P3

70 INC R0

C0 JMP B0

13Cx JMP x ;见Bx指令

14Ex MRx #d 2字节)

例: 已知:R5=8 执行:

E5 C8 MR5#200 200送入R5寄存器

结果:R5=200

§ 4-3 转移指令

15F0 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

。。。

B0B0 B0

00 CLR P0

    1. SET P0

F0 JP0 ;跳行

C0 JMP B0 ;跳到B0

;继续执行

。。。。

16F1 JR0 ;当R0=0 则跳行 (见JP0指令)

17F2 LRP

例: 已知:R0=5;(00000101B);P0=0 执行:

F2 LRP R0P0位循环左移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 F4F5F6 ;延时不同时间 (见指令表)

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

(采用比较法实现)

    1. CLR P1 ;清P1=0

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 R10

EE 04 MR14 #04 ;上跳4

F7 ST0 启动T0计数

L0

F8 RT0 ;读T0 放入R0R1162进制,R0是高位)

91 CHE R1 ;交换R0R1

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

。。。

25FA 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 写入E22430H单元。

E1 30 MR1#30H ;设置E224的地址

E0 28 MR0#28H ;数据28H放入R0

FD WRE ;写入

29 FE RDE ;从E224单元读数据

3: 把E22430H单元的数据读出。

E1 30 MR1#30H ;设置E224的地址

FE RDE ;读出

结果: R0=28H

30FF 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

R14R15=0时,进入死循环,要避免!

§ 4-4 转移指令

37D9 SEE

说明:程序输入完毕后,请输入(D9),LED数码管分两次显示程序的长度,先显示地位字节,再显示高位字节。

38DA COPYM

说明:程序输入完毕后,请输入(DA),MEAPC-C主控板内的程序,将拷贝到MEAPC-P编程板上,LED数码管显示正在拷贝的地址。

39DB COPYS

说明:程序输入完毕后,请输入(DB),MEAPC-P编程板内的程序,将拷贝到MEAPC-C主控板上,LED数码管显示正在拷贝的地址。

40DC BACK

说明:程序输入时,输入(DC),将退回一行。

41~43DD START

DE MID

DF END

说明:程序输入时,控制编程指针的位置。

§ 4-5 MEAPC应编程技巧

1:程序段独立存放 在编程时,为了修改的方便,可将各功能程序段,彼此拉开距离单独存放见表5-5-1。 采用JMP R15间接从程序1段跳转到程序2段,或在中间直接添加空指令(D6~D8)。表5-5-1

程序1段

JMP R15

(到程序2段)

空指令

程序2段

JMP R15

(到程序3段)

空指令

程序3段

JMP R15

2:数据转移指令的合成 例:将R2中的数据转移到R3中。 CLR P0 P0=0 MR0#0 R0=0 ADC R2 R0=R0+R2+P0 CHE R3 R3=R0=R2 3:用MEAPC指令虚拟一个软“SPI”口 例:将R1中的数据从P5脚输出,P6脚同步输出8个正脉冲。

MR0#08;移位8

B0B0

CHE R1 R0=R1

LRP R0P0位左移1

OUT P5

CLR P6

SET P6 P6脚输出正脉冲

CHE R1 ;恢复R0

DEC R0 ;指针减一

JR0

JMP B0

;输出完毕!

。。。

4:用P1~P8口并行输出字符码,驱动LED数码管(当程序执行周期>20mS时,不宜采用!) 例:将R2R3中存放的BCD码转换成字符码输出 CHE R2 ;取R2数据到R0 SEG ;转换成字符码 MRP ;并行输出 CLR P9 ;点亮LED1数码管 CHE R3 ;取R3数据到R0 SET P9 ;关闭LED1数码管 SEG ;转换成字符码 MRP ;并行输出 CLR P10 ;点亮LED2数码管 D6 ;空指令,延时400uS

SET P9 ;关闭LED2数码管

点击进入:MEAPC介绍资料3

相关键连:AT89C2051的智能时钟

相关键连:MEAPC可自编程嵌入式控制器

相关键连:
AT89C2051的倒计时器

微型嵌入式自编程控制器MEAPC 缺货中

银行帐号及邮购需知    立即进入订货系统!    查看全部邮购清单

邮局汇款地址:邮编226200 江苏省启东市江海中路511号水晶苑 A1 谢刚 收

电话/传真:0513-83342087 小灵通:0513-83082087 联系人:谢刚

电子信箱:

电子制作实验室网站主页 www.xie-gang.com