OpenLogic中几条常见指令的实现方法,供大家参考
梯形图程序:http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_428656.jpg
(原文件名:test.jpg)
语句表代码:
LD X1
OR X2
AND X3
OUT Y1
对应的汇编代码:
LD X1
__asm (
"movw r5, 0x4\n"
"movt r5, 0x2204\n"//将X1地址放进寄存器R6中,注意:0x2204004是X1的位绑定地址
"ldrb r6, \n" //将X1地址的值放进寄存器R5中
"lsl r4, r4,#1\n" //R4是运行堆栈 左移一位
"orr r4, r6\n" //R4与R6相或,这样R4的最后一位就是X1中的值
: : :"r4", "r5", "r6" //告诉编译器这几个地址代码修改
);
OR X2
__asm (
"movw r5, 0x8\n"
"movt r5, 0x2204\n"
"ldrb r6, \n"//将X2的值读到R6中去
"orr r4, r6\n"//R4与R6相或 ,此时R4的最后一位是X1|X2
: : :"r4", "r5", "r6"
);
AND X3
__asm (
"movw r5, 0xc\n"
"movt r5, 0x2204\n"
"ldrb r6, \n"//将X3的值读到R6中去
"tst r6, 0x1\n"//检测R6的最后一位,也就是X3的值
"it eq\n"
"biceq r4, r4,0x1\n"//如果X2==0 R4最后一位需要复位,否则不用动
: : :"r4", "r5", "r6"
);
OUT Y1
__asm (
"movw r5, 0x1004\n"
"movt r5, 0x2204\n"
"tst r4, 0x1\n"//检测位堆栈R4最后一位
"ite eq\n"
"moveq r6, 0x0\n"//如果R4最后一位 为0
"movne r6, 0x1\n"//如果R4最后一位 为1
"strb r6, ,#0\n"//将R6输出到 地址Y1中
: : :"r4", "r5", "r6"
);
运行监控画面:
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_428657.jpg
(原文件名:monitor.jpg) 我写的51汇编一部分指令解释!
LD X
LD: LCALL LOAD ;取数据类型地址存R7中
LCALL I_Q_X ;新采集的数据在C中
mov a,SP_RAM
rlc a
mov SP_RAM,a ;新采集的数据在20h.0中
LJMP MM
;===========================================
OR X
OR: LCALL LOAD ;取数据类型地址存R7中
mov r7,a
LCALL I_Q_X
anl C,SP_RAM.0
mov SP_RAM.0,c
LJMP MM
;===========================================
ON: LCALL LOAD ;取数据类型地址存R7中
mov r7,a
LCALL I_Q_X
CPL C
anl C,SP_RAM.0
mov SP_RAM.0,c
LJMP MM
;===========================================
AA: LCALL LOAD ;取数据类型地址存R7中
mov r7,a
LCALL I_Q_X
orl C,SP_RAM.0
mov SP_RAM.0,c
LJMP MM
;===========================================
AN: LCALL LOAD ;取数据类型地址存R7中
mov r7,a
LCALL I_Q_X
CPL C
orl C,SP_RAM.0
mov SP_RAM.0,c
LJMP MM 有没有用C写的解释程序啊? 这个软件怎样定义使用的IO对应单片机的引脚呢?找半天没有找到,谢 在下位机里面改的 概率100%的中奖机会
http://www.21ic.com/invad/invad.htm 给个例子行吗,多谢了 来学习的。。。
页:
[1]