1、微型嵌入式自编程控制器MEAPC微型嵌入式自编程控制器MEAPC智能可编程控制电路,具有电路简单,控制方法灵活多变等优点,用它取代传统的纯硬件控制电路,已成为发展趋势。近年来由于单片机的流行,用单片机制作的可编程控制器非常多。但能熟练运用单片机的人并不多。究其原因: 1:学习单片机的设备费用高。 2:单片机的功能复杂,非一般人能轻易掌握。1、学习单片机的门槛太高单片机不仅是一门理论学科,同时又是一门应用学科,而实践是学习单片机的主要方法。但是能实践必须具有:PC机、仿真器、编程器。这三样设备全部具备,少则3000元,多则上万元。即便购齐了上述设备,又要面临如何学习使用:PC机、仿真器、编程器的
2、问题。试想一个50岁没有学习过单片机技术的老电子工程师,还会去学习吗?一个青少年又如何入门呐?2、单片机的功能复杂、指令太多 以现在最流行的单片机MCS-51为例,它的功能虽不算多,但是指令却有115条。许多实际应用却只用其中少数的指令和内部功能。对一些非专业人员就没有必要全部掌握。这样可以减轻学习的负担。 针对上述问题,本人根据自身多年使用单片机的经验,设计了一种微型、廉价的完全脱离:PC机、仿真器、编程器的集开发、学习、应用于一身的开发设备:微型嵌入式自编程控制器MEAPC。3、MEAPC控制器简介 MEAPC控制器简单易学,只有43条指令。凡具有数字电路基础的人,可以在1、2个小时内上手
3、。它可以反复编程几万次。编制的程序可以任意备份。在:灯光、电机、开关逻辑等控制中,可以取代纯数字电路,成本低廉。 MEAPC在工业应用时,可以看成是一个具有13个I/O口、上千个软继电器的可编程控制器(PLC)。而在学习时,又可看作是一个简易的可以自编程的单片机,无须其他开发设备。 MEAPC控制器的组成MEAPC由MEAPC-C主控板和MEAPC-P编程板两部分组成(见图2-1) MEAPC-C主控板是一块带有单片机的可重复编程的控制板,它由使用者插入MEAPC-P编程板编程,编程完毕后将它插入应用电路中即可工作。单片机中固化了一套监控程序(MEAPC-V3.0),负责管理MEAPC-P编程
4、板的编程和运行输入的用户程序。 MEAPC-P编程板是一块带有键盘、LED显示的编程板,用户必须用它将编制的程序输入MEAPC-C主控板。它可以多次使用。 2-1 MEAPC-C主控板的引脚功能MEAPC-C的引脚见图2-2,上电后的初始值见表2-2。MEAPC-C主控板的引脚 图2-2 MEAPC-C主控板的引脚 表:2-1管脚地址管脚地址1+5V电源10P9 I/O脚,地址:09H2P1 I/O脚,地址:01H11P10 I/O脚,地址:0AH3P2 I/O脚,地址:02H12P11 I/O脚,地址:0BH4P3 I/O脚,地址:03H13P12 I/O脚,地址:0CH5P4 I/O脚,地
5、址:04H14P13 I/O脚,地址:0DH6P5 I/O脚,地址:05H15RST:复位脚 (高电平)7P6 I/O脚,地址:06H16SCL:I2C时钟脚(悬空)8P7 I/O脚,地址:07H17SDA:I2C数据脚(悬空)9P8 I/O脚,地址:08H18GND:电源地上电后的初始值 表:2-216个位的状态16个寄存器的初始值P0=P14=P15=0;P1P13=1R0R15=0 2-2 MEAPC-C主控板的内部资源MEAPC-C主控板具有以下内部资源:1具有13根I/O线:P1P13 输入时:吸收电流20uA输出时:灌入电流:20mA ;导出电流:4mA其中P11具有负脉冲检测功能
6、,可以计数,最高频率500KHz2内部有16个位:P0P15 。 其中P1P13是I/O线,P0、P14、P15是用户使用位;启动计数器T0后,P15是T0溢出标志位。316个内部RAM字节:R0R154256个外部FlashRam字节:00FFH 5一个16位可编程硬件计数器:T06一个模拟SPI通讯口。7具有1。5K的程序存放空间(使用E224C16),可存放近:1500条指令。8指令平均执行速度:400uS 2-3 MEAPC-C主控板的内存分布MEAPC-C主控板的内存分布见图2-3,它可以寻址2K的地址范围。其中:16个位的地址:0FH;16个RAM的地址:0FH;256个外部存储器
7、字节的地址:00FFH;系统子程序的地址:1001FFH;用户程序的地址:200H7FFH202H7FFH15K程序空间200H201H程序长度100H1FFH系统子程序空间00HFFH外部FLASHRAM16个位16个RAMMEAPC-C主控板的内存分布 图2-3 2-4 MEAPC-P编程板的引脚功能MEAPC-P编程板负责为MEAPC-C主控板编程,它自带一个2K的备份程序存储器,便于复制程序;两位LED数码管显示指令和数据;5个按键负责将指令、数据输入MEAPC-C主控板。1、MEAPC-P编程板的引脚(见图2-5)2、MEAPC-P编程板的按键分布(见图2-4) MEAPC-P编程板
8、的按键功能 表:2-2键号功能键号功能K1LED数码管的数值加一K4确认并存入E224K2LED数码管的数值减一K5复位MEPAPC-CK3右移一位点击进入:MEAPC介绍资料2第三章 MEAPC指令表 MEAPC的指令系统由43条指令组成。可完成:位运算、数值运算、逻辑运算、移位、跳转等功能。有一个“布尔处理器 P0”,通过它可以处理大量的位数据信息,在工控中非常有用。同时还有一些特殊功能的“宏指令”。只需少量的代码就可方便地完成各种复杂的智能电路的设计。用它取代一些传统的继电器控制电路易如反掌!MEAPC的指令系统(见表3-1)。自编程控制器MEAPC-C1指令表 表:3-1序号指令助记符
9、字节说明位处理指令10xCLR Px1Px=0 ;x0FH21xSET Px1Px=132xIN Px1P0=Px43xOUT Px1Px=P054xAND Px1Px与P0,结果在P065xOR Px1Px或P0,结果在P076xNOT Px1Px取反,结果在Px寄存器处理指令87xINC Rx1Rx=Rx+198xDEC Rx1Rx=Rx-1109xCHE Rx1交换R0,Rx中的内容11AxADC Rx1带P0位加法: R0=R0+Rx+P012BxBx1指定标号:x=0F13CxJMP x1跳转到指定标号:x=0F14ExMRx,#d2赋值:Rx=#d ;d=0255宏处理指令15F0
10、JP01P0=0,跳过一行16F1JR01R0=0,跳过一行17F2LRP 1R0带P0位左循环移1位18F3MRP1R0中的内容并行送到P1P8口19F410mS1延时 10毫秒20F5100mS1延时 100毫秒21F61S1延时 1秒22F7ST01将R0R1中的值送入T0计数器后,启动T0计数器23F8RT01读出T0计数器的值,存入R0R1中,P15溢出标志。24F9CT01关闭T0计数器,并读出T0计数器的值,存入R0R125FABCD1R0R1中16位二进制数转换成BCD码,存入R0R1R2R3R426FBSEG1用R0中的序号,读取相应的字符段码,存入R027FCSPI1当P0
11、=0时:R0中的值从低位开始,串行输出到P1口,P2输出8个移位负脉冲;当P0=1时:将P1口的数据串行输入到R0中,P2输出8个移位负脉冲。28FDWRE1将R0中的值写入R1指定的E224单元。(范围:0255)29FERDE1读取R1指定的E224单元的值,存入R0。(范围:0255)30FFPWN1进入掉电状态。31D0REP1返回到程序的开始行32D1AND1R0与R1,结果在R033D2OR 1R0或R1,结果在R034D3NOT 1R0取反,结果在R035D4JMP R141上跳R14中指定的行数,范围(0255)36D5JMP R151下跳R15中指定的行数,范围(0255)伪
12、指令37D9SEE查看程序的长度,并写入E224中,地址:200H,201H38DACOPYM 控制板上E224中的值复制到编程板上E224中编程板上E224中的值复制到控制板上E224中编程指针倒退3行编程指针回到第1行编程指针回到中间行编程指针回到最后1行39DBCOPYS40DCBACK41DDSTART42DEMID43DFEND说明:16个位:P0P15地址:0FH。P1P13对应13根I/O线;P0、P14、P15用户自定义位。P11口是外部脉冲输入脚。当使用T0计数器时,P15做溢出标志。 16个8位寄存器:R0R15地址:0FH。 256个8位E224存储器,地址:00HFFH
13、。 X的范围:0F D的范围:0FF 第四章 指令系统使用详解本章以指令的序号顺序,叙述每条指令的功能并举例。除了指令:MRx是2字节外,其余均是单字节指令。使用时请注意以下几点:1、D9DF指令是伪指令,不会写入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进制书写。数
14、字:015的十进制、二进制、十六进制之间转换关系见表4-1 十进制、二进制、十六进制之间转换关系 表:4-1十进制二进制十六进制十进制二进制十六进制000000000B00H800001000B08H100000001B01H900001001B09H200000010B02H1000001010B0AH300000011B03H1100001011B0BH400000100B04H1200001100B0CH500000101B05H1300001101B0DH600000110B06H1400001110B0EH700000111B07H1500001111B0FH 4-1 位操作指令1:
15、 0x CLR Px ;x=0F例: 已知:P0=1 执行: 00 CLR P0 ;P0位清零结果:P0=02: 1x SET Px ;例: 已知:P15=0 执行: 1F SET P15 ;P15位置1结果:P15=13: 2x IN Px ;x=0F例: 已知:P7=1 ;P0=0 执行: 27 IN P7 ;读入P7位的数据到P0位结果:P0=14: 3x OUT Px ;例: 已知:P8=0 ;P0=1 执行: 38 OUT P8 ;P0位的数据送到P8位结果:P8=15: 4x AND Px ;x=0F例: 已知:P10=0 ;P0=1 执行: 4A AND P10 ;P10位逻辑与
16、P0位,结果送P0位。结果:P0=06: 5x OR Px ;例: 已知:P11=0 ;P0=1 执行: 5B OR P11 ;P11位逻辑或P0位,结果送P0位。结果:P0=17: 6x NOT Px ;x=0F例: 已知:P12=0 执行: 6C NOT P12 ;P12位取反,结果送P12位结果:P12=1 4-2 寄存器指令8: 7x INC Rx ;x=0F例: 已知:R2=3 执行:70 INC R2 ;R2寄存器加1,不影响P0位结果:R2=49: 8x DEC Rx ;x=0F例: 已知:R1=8 执行:81 DEC R1 ;R1数据减1结果:R1=710: 9x CHE Rx
17、例: 已知:R0=8;R10=15 执行:9A CHE R10 ;R10和P0的数据交换结果:R0=15;R10=811: Ax ADC Rx ;例: 已知:R0=5;P0=1;R10=20 执行:AA ADC R10 ;R10加P0位加R0,结果送R0结果:R0=2612: Bx Bx ;产生标号例: 00 CLR P011 SET P1B0 B0:B002 CLR P263 NOT P370 INC R0C0 JMP B013: Cx JMP x ;见Bx指令14: Ex MRx ,#d ;(2字节)例: 已知:R5=8; 执行:E5 C8 MR5,#200 ;200送入R5寄存器结果:R
18、5=200 4-3 转移指令15: F0 JP0 如果 P0位=0 ,则跳过一行 ,否则 顺序执行例:(采用间接跳转指令:JMP R14) EE 02 MR14 ,#2 ;设置上跳转的行数。L0: ;标号00 P0=0 ;P0=0F0 JP0 ;跳行 D4 JMP R14 ;上跳2行 (见指令表)L1: ;继续执行 。 程序将进入L1标号继续执行,如果令P0=1,则程序进入L0标号执行。例:(采用标号指令:Bx)。B0:B0 B000 CLR P0SET P0 F0 JP0 ;跳行C0 JMP B0 ;跳到B0行 ;继续执行。16: F1 JR0 ;当R0=0 则跳行 (见JP0指令)17:
19、F2 LRP ;例: 已知:R0=5;(00000101B);P0=0 执行:F2 LRP ;R0代P0位循环左移1位,结果送R0结果:R0=0A0 (00001010B) 18: F3 MRP ;R0的值8位并行送到P1P8位,P1对应低位。例: 已知: R0=0FFH ;P1P8=0E0 FF MR0,#0FFHF3 MRP 结果: R0=0FF ;P1P8=11921: F4,F5,F6 ;延时不同时间 (见指令表)例4-1: 延时3S程序 程序1:EE 03 MR14 ,#3 ;设定上跳的行数 E0 32 MR0 ,#3 ;赋值R0=3L0:F6 1S ;延时1S80 DEC R0 ;
20、R0=R0-1F1 JR0 ;R0=0 跳行到L1执行 D4 JMP R14 ;上跳3行L1:。程序2:F6 1SF6 1SF6 1S程序进入延时后,计数器不影响工作。2224: 控制计数器T0的指令,要求外部脉冲是下降沿。F7 ST0 ;将R0R1中的值送入T0计数器,启动T0计数器F8 RT0 ;读出T0计数器的值,存入R0R1中,P15溢出标志。F9 CT0 ;关闭T0计数器,并读出T0计数器的值,存入R0R1中 说明: RT0 指令采用了“飞读”方法,不会产生错相。例4-2: 记录外部5个脉冲后,停止计数并使P1=1(采用比较法实现)CLR P1 ;清P1=0 E0 05 MR0 ,#
21、05 ;设置5个脉冲DB NOT ;求R0的补码70 INC R0 ;+192 CHE R2 ;R2=FBH (05的补码) E0 00 MR0 ,#0 ;R0清 0E1 00 MR1 ,#0 ;R1清0EE 04 MR14 ,#04 ;上跳4行F7 ST0 ; 启动T0计数L0: F8 RT0 ;读T0 放入R0R1(16位2进制,R0是高位)91 CHE R1 ;交换R0,R1A2 ADC R2 ;R0=R0+R2F1 JR0 ;等于5个脉冲,跳行D4 JMP R14L1:F9 CT0 ;停止T0计数 11 SET P1 ;P1=1。例4-3: (采用T0溢出法实现。)01 CLR P1E
22、0 FF MR0 ,#0FFH ;R0R1=FFFB+5=10000 溢出E1 FB MR1 ,#0FBH ;0F CLR P15 ;清标志EE 02 MR14 ,#02 ;上跳2行F7 ST0 ; 启动T0计数,T0=0FFFBHL0: 2F IN P15 ;P0=P15F0 JP0 ;等待溢出,跳1行D4 JMP R14L1:F9 CT0 ;停止T0计数 11 SET P1 ;P1=1。25: FA BCD ;2进制转换成10进制例4-4: 把:16进制数:033FFH 转换成10进制数E0 33 MR0 ,#33HE1 FF MR1 ,#0FFH ;设置数据:033FFHFA BCD ;
23、转换结果: R0=01(万);R1=3(千);R2=3(百);R3=1(十);R4=1(个)033FFH=1331126: FB SEG ;提取相应数字的字符码 (见字符码表4-1) 例4-5: 已知:R0=9FB SEG 结果: R0=01111111B ;“9”的字符码按ABCDEFGH从高到低排列。例4-6: 显示“9。”E0 09 MR0,#09 ;R0=9E1 20 MR1,#32 ;间隔系数3200 CLR P0 ;清P0A1 ADC R1 ;指向“9。”FB SEG结果: R0=1111111111111B;“9。”的字符码字符码 表:4-2序号字符字符码序号字符字符码0“0”1
24、1111100B21“o”00111010B1“1”01100000B22“P”11001110B2“2”11011010B23“q”11100110B3“3”11110010B24“r”00001010B4“4”01100110B25“S”10110110B5“5”10110110B26“U”01111100B6“6”10111110B27“u”00111000B7“7”11100000B28“ ”00000000B8“8”11111110B29“8.”11111111B9“9”11110110B30“-”00000010b10“A”11101110B31“t”00011110b11“b”0
25、0111110B32“0.”11111101B12“C”10011100B33“1.”01100001B13“d”01111010B34“2.”11011011B14“E”10011110B35“3.”11110011B15“F”10001110B36“4.”01100111B16“H”01101110B37“5.”10110111B17“L”00011100B38“6.”10111111B18“N”11101100B39“7.”11100001B19“n”00101010B40“8.”11111111B20“O”11111100B41“9.”11110111B说明字符码的排列顺序:a b c
26、 d e f g h= D7 D6 D5 D4D D3D D2D D1D 027: 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 D7P1 P21 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
27、28 MR0,#28H ;数据28H放入R0FD WRE ;写入29: FE RDE ;从E224单元读数据例3: 把E224的30H单元的数据读出。E1 30 MR1,#30H ;设置E224的地址FE RDE ;读出结果: R0=28H30: FF PWN ;停机并进入掉电状态程序结束后,进入掉电状态,降低功耗。 31: D0 REP ;程序返回首行继续执行例: 在P1脚产生宽度约:800uS的脉冲串61 NOT P1D0 REP ;返回3234: D1 AND ;R0逻辑“与”R1,结果在R0D2 OR ;R0逻辑“或”R1,结果在R0 D3 NOT ;R0取反,结果在R0例: R0=0FFH ;R1=01 ;求 R0“与”R1E0 FF MR0 ,#0FFH E1 01 MR1 ,#01D1 AND结果: R0=01H ;R1=01H 例: R0=0FFH ;R1=01 ;求 R0“或”R1E0 FF MR0 ,#0FFH E1 01 MR1 ,#01D2 OR结果: R0=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1