adolfshxq 发表于 2009-3-26 20:19:40

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)

xiaozheng 发表于 2009-3-27 08:03:20

我写的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

cyxavr 发表于 2009-4-13 21:47:33

有没有用C写的解释程序啊?

liuguangfeng 发表于 2010-5-28 07:08:06

这个软件怎样定义使用的IO对应单片机的引脚呢?找半天没有找到,谢

adolfshxq 发表于 2010-5-31 00:08:56

在下位机里面改的

liliang9554 发表于 2010-6-9 09:36:10

概率100%的中奖机会
http://www.21ic.com/invad/invad.htm

liuguangfeng 发表于 2010-9-13 19:34:46

给个例子行吗,多谢了

Elec_Ramble 发表于 2012-12-14 20:21:01

来学习的。。。
页: [1]
查看完整版本: OpenLogic中几条常见指令的实现方法,供大家参考