微型嵌入式自编程控制器MEAPC.docx
《微型嵌入式自编程控制器MEAPC.docx》由会员分享,可在线阅读,更多相关《微型嵌入式自编程控制器MEAPC.docx(32页珍藏版)》请在冰豆网上搜索。
微型嵌入式自编程控制器MEAPC
微型嵌入式自编程控制器MEAPC
智能可编程控制电路,具有电路简单,控制方法灵活多变等优点,用它取代传统的纯硬件控制电路,已成为发展趋势。
近年来由于单片机的流行,用单片机制作的可编程控制器非常多。
但能熟练运用单片机的人并不多。
究其原因:
1:
学习单片机的设备费用高。
2:
单片机的功能复杂,非一般人能轻易掌握。
1、学习单片机的门槛太高
单片机不仅是一门理论学科,同时又是一门应用学科,而实践是学习单片机的主要方法。
但是能实践必须具有:
PC机、仿真器、编程器。
这三样设备全部具备,少则3000元,多则上万元。
即便购齐了上述设备,又要面临如何学习使用:
PC机、仿真器、编程器的问题。
试想一个50岁没有学习过单片机技术的老电子工程师,还会去学习吗?
一个青少年又如何入门呐?
2、单片机的功能复杂、指令太多
以现在最流行的单片机MCS-51为例,它的功能虽不算多,但是指令却有115条。
许多实际应用却只
用其中少数的指令和内部功能。
对一些非专业人员就没有必要全部掌握。
这样可以减轻学习的负担。
针对上述问题,本人根据自身多年使用单片机的经验,设计了一种微型、廉价的完全脱离:
PC机、仿真器、编程器的集开发、学习、应用于一身的开发设备:
微型嵌入式自编程控制器MEAPC。
3、MEAPC控制器简介
MEAPC控制器简单易学,只有43条指令。
凡具有数字电路基础的人,可以在1、2个小时内上手。
它可以反复编程几万次。
编制的程序可以任意备份。
在:
灯光、电机、开关逻辑等控制中,可以取代纯数字电路,成本低廉。
MEAPC在工业应用时,可以看成是一个具有13个I/O口、上千个软继电器的可编程控制器(PLC)。
而在学习时,又可看作是一个简易的可以自编程的单片机,无须其他开发设备。
MEAPC控制器的组成
MEAPC由MEAPC-C主控板和MEAPC-P编程板两部分组成(见图2-1)
MEAPC-C主控板是一块带有单片机的可重复编程的控制板,它由使用者插入MEAPC-P编程板编程,编程完毕后将它插入应用电路中即可工作。
单片机中固化了一套监控程序(MEAPC-V3.0),负责管理MEAPC-P编程板的编程和运行输入的用户程序。
MEAPC-P编程板是一块带有键盘、LED显示的编程板,用户必须用它将编制的程序输入MEAPC-C主控板。
它可以多次使用。
§2-1MEAPC-C主控板的引脚功能
MEAPC-C的引脚见图2-2,上电后的初始值见表2-2。
MEAPC-C主控板的引脚图2-2
MEAPC-C主控板的引脚表:
2-1
管脚
地址
管脚
地址
1
+5V电源
10
P9I/O脚,地址:
09H
2
P1I/O脚,地址:
01H
11
P10I/O脚,地址:
0AH
3
P2I/O脚,地址:
02H
12
P11I/O脚,地址:
0BH
4
P3I/O脚,地址:
03H
13
P12I/O脚,地址:
0CH
5
P4I/O脚,地址:
04H
14
P13I/O脚,地址:
0DH
6
P5I/O脚,地址:
05H
15
RST:
复位脚(高电平)
7
P6I/O脚,地址:
06H
16
SCL:
I2C时钟脚(悬空)
8
P7I/O脚,地址:
07H
17
SDA:
I2C数据脚(悬空)
9
P8I/O脚,地址:
08H
18
GND:
电源地
上电后的初始值表:
2-2
16个位的状态
16个寄存器的初始值
P0=P14=P15=0;P1~P13=1
R0~R15=0
§2-2MEAPC-C主控板的内部资源
MEAPC-C主控板具有以下内部资源:
1.具有13根I/O线:
P1~P13
输入时:
吸收电流<20uA
输出时:
灌入电流:
20mA;导出电流:
4mA
其中P11具有负脉冲检测功能,可以计数,最高频率<500KHz
2.内部有16个位:
P0~P15。
其中P1~P13是I/O线,P0、P14、P15是用户使用位;启动计数器T0后,P15是T0溢出标志位。
3.16个内部RAM字节:
R0~R15
4.256个外部FlashRam字节:
00~FFH
5.一个16位可编程硬件计数器:
T0
6.一个模拟SPI通讯口。
7.具有1。
5K的程序存放空间(使用E224C16),可存放近:
1500条指令。
8.指令平均执行速度:
400uS
§2-3MEAPC-C主控板的内存分布
MEAPC-C主控板的内存分布见图2-3,它可以寻址2K的地址范围。
其中:
16个位的地址:
0~FH;
16个RAM的地址:
0~FH;
256个外部存储器字节的地址:
00~FFH;
系统子程序的地址:
100~1FFH;
用户程序的地址:
200H~7FFH
202H~7FFH
1.5K程序空间
200H~201H
程序长度
100H~1FFH
系统子程序空间
00H~FFH
外部FLASHRAM
16个位
16个RAM
MEAPC-C主控板的内存分布图2-3
§2-4MEAPC-P编程板的引脚功能
MEAPC-P编程板负责为MEAPC-C主控板编程,它自带一个2K的备份程序存储器,便于复制程序;两位LED数码管显示指令和数据;5个按键负责将指令、数据输入MEAPC-C主控板。
1、MEAPC-P编程板的引脚(见图2-5)
2、MEAPC-P编程板的按键分布(见图2-4)
MEAPC-P编程板的按键功能表:
2-2
键号
功能
键号
功能
K1
LED数码管的数值加一
K4
确认并存入E224
K2
LED数码管的数值减一
K5
复位MEPAPC-C
K3
右移一位
点击进入:
MEAPC介绍资料2
第三章MEAPC指令表
MEAPC的指令系统由43条指令组成。
可完成:
位运算、数值运算、逻辑运算、移位、跳转等功能。
有一个“布尔处理器P0”,通过它可以处理大量的位数据信息,在工控中非常有用。
同时还有一些特殊功能的“宏指令”。
只需少量的代码就可方便地完成各种复杂的智能电路的设计。
用它取代一些传统的继电器控制电路易如反掌!
MEAPC的指令系统(见表3-1)。
自编程控制器MEAPC-C1指令表表:
3-1
序号
指令
助记符
字节
说明
位处理指令
1
0x
CLRPx
1
Px=0;x0~FH
2
1x
SETPx
1
Px=1
3
2x
INPx
1
P0=Px
4
3x
OUTPx
1
Px=P0
5
4x
ANDPx
1
Px与P0,结果在P0
6
5x
ORPx
1
Px或P0,结果在P0
7
6x
NOTPx
1
Px取反,结果在Px
寄存器处理指令
8
7x
INCRx
1
Rx=Rx+1
9
8x
DECRx
1
Rx=Rx-1
10
9x
CHERx
1
交换R0,Rx中的内容
11
Ax
ADCRx
1
带P0位加法:
R0=R0+Rx+P0
12
Bx
Bx
1
指定标号:
x=0~F
13
Cx
JMPx
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
JMPR14
1
上跳R14中指定的行数,范围(0~255)
36
D5
JMPR15
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
说明:
16个位:
P0~P15地址:
0~FH。
P1~P13对应13根I/O线;P0、P14、P15用户自定义位。
P11口是外部脉冲输入脚。
当使用T0计数器时,P15做溢出标志。
16个8位寄存器:
R0~R15地址:
0~FH。
256个8位E224存储器,地址:
00H~FFH。
X的范围:
0~F
D的范围:
0~FF
第四章指令系统使用详解
本章以指令的序号顺序,叙述每条指令的功能并举例。
除了指令:
MRx是2字节外,其余均是单字节指令。
使用时请注意以下几点:
1、D9~DF指令是伪指令,不会写入EE24中。
2、P代表:
位。
3、R代表:
8位寄存器。
4、只有指令:
ADCRx影响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:
0xCLRPx;x=0~F
例:
已知:
P0=1执行:
00CLRP0;P0位清零
结果:
P0=0
2:
1xSETPx;
例:
已知:
P15=0执行:
1FSETP15;P15位置1
结果:
P15=1
3:
2xINPx;x=0~F
例:
已知:
P7=1;P0=0执行:
27INP7;读入P7位的数据到P0位
结果:
P0=1
4:
3xOUTPx;
例:
已知:
P8=0;P0=1执行:
38OUTP8;P0位的数据送到P8位
结果:
P8=1
5:
4xANDPx;x=0~F
例:
已知:
P10=0;P0=1执行:
4AANDP10;P10位逻辑与P0位,结果送P0位。
结果:
P0=0
6:
5xORPx;
例:
已知:
P11=0;P0=1执行:
5BORP11;P11位逻辑或P0位,结果送P0位。
结果:
P0=1
7:
6xNOTPx;x=0~F
例:
已知:
P12=0执行:
6CNOTP12;P12位取反,结果送P12位
结果:
P12=1
§4-2寄存器指令
8:
7xINCRx;x=0~F
例:
已知:
R2=3执行:
70INCR2;R2寄存器加1,不影响P0位
结果:
R2=4
9:
8xDECRx;x=0~F
例:
已知:
R1=8执行:
81DECR1;R1数据减1
结果:
R1=7
10:
9xCHERx
例:
已知:
R0=8;R10=15执行:
9ACHER10;R10和P0的数据交换
结果:
R0=15;R10=8
11:
AxADCRx;
例:
已知:
R0=5;P0=1;R10=20执行:
AAADCR10;R10加P0位加R0,结果送R0
结果:
R0=26
12:
BxBx;产生标号
例:
00CLRP0
11SETP1
B0B0:
B0
02CLRP2
63NOTP3
70INCR0
C0JMPB0
13:
CxJMPx;见Bx指令
14:
ExMRx,#d;(2字节)
例:
已知:
R5=8;执行:
E5C8MR5,#200;200送入R5寄存器
结果:
R5=200
§4-3转移指令
15:
F0JP0
如果P0位=0,则跳过一行,否则顺序执行
例:
(采用间接跳转指令:
JMPR14)
EE02MR14,#2;设置上跳转的行数
。
。
。
L0:
;标号
00P0=0;P0=0
F0JP0;跳行
D4JMPR14;上跳2行(见指令表)
L1:
;继续执行
。
。
。
程序将进入L1标号继续执行,如果令P0=1,则程序进入L0标号执行。
例:
(采用标号指令:
Bx)
。
。
。
B0:
B0B0
00CLRP0
SETP0
F0JP0;跳行
C0JMPB0;跳到B0行
;继续执行
。
。
。
。
16:
F1JR0;当R0=0则跳行(见JP0指令)
17:
F2LRP;
例:
已知:
R0=5;(00000101B);P0=0执行:
F2LRP;R0代P0位循环左移1位,结果送R0
结果:
R0=0A0(00001010B)
18:
F3MRP;R0的值8位并行送到P1~P8位,P1对应低位。
例:
已知:
R0=0FFH;P1~P8=0
E0FFMR0,#0FFH
F3MRP
结果:
R0=0FF;P1~P8=1
19~21:
F4,F5,F6;延时不同时间(见指令表)
例4-1:
延时3S程序
程序1:
EE03MR14,#3;设定上跳的行数
E032MR0,#3;赋值R0=3
L0:
F61S;延时1S
80DECR0;R0=R0-1
F1JR0;R0=0跳行到L1执行
D4JMPR14;上跳3行
L1:
。
。
。
。
程序2:
F61S
F61S
F61S
程序进入延时后,计数器不影响工作。
22~24:
控制计数器T0的指令,要求外部脉冲是下降沿。
F7ST0;将R0R1中的值送入T0计数器,启动T0计数器
F8RT0;读出T0计数器的值,存入R0R1中,P15溢出标志。
F9CT0;关闭T0计数器,并读出T0计数器的值,存入R0R1中
说明:
RT0指令采用了“飞读”方法,不会产生错相。
例4-2:
记录外部5个脉冲后,停止计数并使P1=1
(采用比较法实现)
CLRP1;清P1=0
E005MR0,#05;设置5个脉冲
DBNOT;求R0的补码
70INCR0;+1
92CHER2;R2=FBH(05的补码)
E000MR0,#0;R0清0
E100MR1,#0;R1清0
EE04MR14,#04;上跳4行
F7ST0;启动T0计数
L0:
F8RT0;读T0放入R0R1(16位2进制,R0是高位)
91CHER1;交换R0,R1
A2ADCR2;R0=R0+R2
F1JR0;等于5个脉冲,跳行
D4JMPR14
L1:
F9CT0;停止T0计数
11SETP1;P1=1
。
。
。
例4-3:
(采用T0溢出法实现。
)
01CLRP1
E0FFMR0,#0FFH;R0R1=FFFB+5=10000溢出
E1FBMR1,#0FBH;
0FCLRP15;清标志
EE02MR14,#02;上跳2行
F7ST0;启动T0计数,T0=0FFFBH
L0:
2FINP15;P0=P15
F0JP0;等待溢出,跳1行
D4JMPR14
L1:
F9CT0;停止T0计数
11SETP1;P1=1
。
。
。
25:
FABCD;2进制转换成10进制
例4-4:
把:
16进制数:
033FFH转换成10进制数
E033MR0,#33H
E1FFMR1,#0FFH;设置数据:
033FFH
FABCD;转换
结果:
R0=01(万);R1=3(千);R2=3(百);R3=1(十);R4=1(个)
033FFH=13311
26:
FBSEG;提取相应数字的字符码(见字符码表4-1)例4-5:
已知:
R0=9
FBSEG
结果:
R0=01111111B;“9”的字符码按ABCDEFGH从高到低排列。
例4-6:
显示“9。
”
E009MR0,#09;R0=9
E120MR1,#32;间隔系数32
00CLRP0;清P0
A1ADCR1;指向“9。
”
FBSEG
结果:
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
说明
字符码的排列顺序:
abcdefgh=D7D6D5D4DD3DD2DD1D0
27:
FCSPI;建立SPI接口,P1:
数据,P2:
时钟
说明:
当P0=0时:
输出数据,P2脚输出8个脉冲。
当P0=1时:
输入数据,P2脚输出8个脉冲。
见波形图4-1:
D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D7
P1
P2
1234567812345678
P0=0:
写时序P0=1:
读时序
28:
FDWRE;写数据到E224单元
例3:
把数据28H写入E224的30H单元。
E130MR1,#30H;设置E224的地址
E028MR0,#28H;数据28H放入R0
FDWRE;写入
29:
FERDE;从E224单元读数据
例3:
把E224的30H单元的数据读出。
E130MR1,#30H;设置E224的地址
FERDE;读出
结果:
R0=28H
30:
FFPWN;停机并进入掉电状态
程序结束后,进入掉电状态,降低功耗。
31:
D0REP;程序返回首行继续执行
例:
在P1脚产生宽度约:
800uS的脉冲串
61NOTP1
D0REP;返回
32~34:
D1AND;R0逻辑“与”R1,结果在R0
D2OR;R0逻辑“或”R1,结果在R0
D3NOT;R0取反,结果在R0
例:
R0=0FFH;R1=01;求R0“与”R1
E0FFMR0,#0FFH
E101MR1,#01
D1AND
结果:
R0=01H;R1=01H
例:
R0=0FFH;R1=01;求R0“或”R1
E0FFMR0,#0FFH
E101MR1,#01
D2OR
结果:
R0=