128 1234567
发新话题
打印

难题,满足2个输入端都是低电平的汇编如何写?

难题,满足2个输入端都是低电平的汇编如何写?

输入端X0,输入端X1, 输出端口为Y0。

当X0和X1都是低电平时,Y0 为高电平。 这这个汇编如何写?

我的意思是有三种状态:
1,有时X0先低电平,然后X1低电平,
2 也有时是X0先低电平,然后X1低电平
3,X0 X1同时低电平

不管是哪种状态,只要满足X0 X1都是低电平,Y0就为高电平。

苦恼中,只知道一对一的开关。

TOP

修改

输入端X0,输入端X1, 输出端口为Y0。


当X0和X1都是低电平时,Y0 为高电平。 这这个汇编如何写?


我的意思是有三种状态:

1,有时X0先低电平,然后X1低电平,

2 也有时是X1先低电平,然后X0低电平

3,X0 X1同时低电平


不管是哪种状态,只要满足X0 X1都是低电平,Y0就为高电平。

TOP

;楼主可能走错地方,这里没有讨论PLC

看程序也简单点,用单片机来完成,可以吗?
MCU:AJMP MCU
QQ:1965912890

TOP

89C52的单片机,

TOP

回复 3# 明白 的帖子

教授,CPU 就是89C52的单片机工控板,想增加上述的功能,谢谢指教先

TOP

89C52R

按键输入端P0.1,输入端P0.2, 输出端口为P1.3。低电平有效。

当P0.1和P0.2都是低电平时,P1.3 为高电平。 这这个汇编如何写?

我的意思是有三种状态:
1,有时P0.1先低电平,然后P0.2低电平,
2,也有时是P0.2先低电平,然后P0.2低电平,
3,P0.1, P0.2同时为低电平,

不管是哪种状态,只要满足P0.1,P0.2都是低电平,P1.3就为高电平。

TOP

还没有交代,P0.1,P0.2不是低电平的时候,P1.3是高电平还是低电平?

这里假设为低电平。
P0.1,P0.2都是低电平,P1.3就为高电平。

      ORG   00
      SETB  P0.1
      SETB  P0.2
      CLR  P1.3
LOOP:
     CLR   F0
     JB  P0.1,UUU
     CALL  DL15MS
     JB  P0.1,UUU
     SETB   F0
UUU:
     JB  P0.2,UUUA
     CALL  DL15MS
     JB  P0.2,UUUA
     SETB   C
     AJMP    UUUB
UUUA: CLR   C
UUUB: ORL C,F0
      MOV  P1.3, C
      AJMP   LOOP
      END
延时程序:DL15MS,  自己完成
没有通过编译,试试看
MCU:AJMP MCU
QQ:1965912890

TOP

提示: 作者被禁止或删除 内容自动屏蔽

TOP

回复 7# 明白 的帖子

非常感谢。
但是不能编译成HEX文件。显示:

RAMSIZE(256)
*** FATAL ERROR L210: I/O ERROR ON INPUT FILE:
EXCEPTION 0021H: PATH OR FILE NOT FOUND
FILE: .\ TEXT1.obj
Target not created

__________________________________
P0.1,P0.2 高电平的时候,P1.3是低电平

[ 本帖最后由 wytwz 于 2011-7-29 19:38 编辑 ]

TOP

你照样吗?延时程序:DL15MS, 自己要完成吗?
MCU:AJMP MCU
QQ:1965912890

TOP

是的,我按照你的程序,然后后面加上DL15MS的延时程序。编译是提示有严重错误,

TOP

回复 11# wytwz 的帖子

加上延时之后,把程序放到上面来
MCU:AJMP MCU
QQ:1965912890

TOP

刚才编译一下通过啊!
附件: 您所在的用户组无法下载或查看附件
MCU:AJMP MCU
QQ:1965912890

TOP

,我再编译一下

TOP

我也不是很懂,贴出程序是为了大家交流交流,有错的地方欢迎指正。

根据你的题意,采用逐个比较法,先判断P0.1是不是低,如果是再判断P0.2是否为低,如果其中有一个为高就返回再判断,如果采用按键置位P0.1和P0.2,请自行加入延时消抖动程序。

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H
START:
SETB P0.1                      0.1=1
SETB P0.2                      0.2=1
CLR P1.3                        1.3=0
CLR A
LOOP:
MOV 20H,P0        0送可位寻址20H单元
XRL 20H,A                             ;和A异或
CLR C                ;
MOV C,00H         ;00H位送C
JC LOOP                ;=1转到LOOP
CLR C                ;
MOV C,01H                             ;01H位送C
JC LOOP                ;=1转到LOOP
OUTPUT:
SETB P1.3                            0.1和P0.2都为0时,置位P1.3输出高电平
;如果你想P1.3保持高电平一段时间,在这里加一个延时,如果不加延时P1.3输出就是方波
LJMP START        ;返回再判断
END

其实这个功能用一个或门就可以实现,不知楼主要搞这么复杂做什么用。

TOP

回复 15# laimeidiy 的帖子

您好,我绝对是菜鸟一个哦。

因为这个2个端口 01 和02,大部分时间不会同时处于低电平状态。举个例子:我要1.3高电平关断继电器,条件就是判断2个位置开关0.1,0.2都处于低电平状态。因为0.1 和0.2都是接有传感器,用来感应位置的变化,一旦0.1和0.2都的位置已经到指定位置,0.1和0.2都处于低电平。这里有个问题就是:不能确定0.1和0.2 这2个传感器哪个先处于低电平,有时01先低电平,有时02先低电平。

难道是我的KEIL 有问题,您的这个程序编译我同不过。。。

TOP

回复 15# laimeidiy 的帖子

编译好了,写入STC89C52,但是0.1和0.2都底电平时,1.3不能置高电平 郁闷

TOP

程序已在keil中调试通过,如果你不通过就查查你的程序有没有问题。
我在程序中已有说明,我这个程序是不管你的P0.1和P0.2谁先低的,只要扫描到P0=0XXXXXXX00(X不理会),P1.3就置位1。

你把HEX文件写入52放在电路上运行,当然看不到P1.3置位高电平了,因为太快了,所以我说了你要加一段延时程序。

你要说明你的电路中行程开关动作后是一直保持的还是只接通一次就断开的?程序会很不一样的哦。

[ 本帖最后由 laimeidiy 于 2011-7-30 14:28 编辑 ]

TOP

回复 13# 明白 的帖子

编译OK, 写入芯片测试,发现问题:0.1和0.2任何一个低电平,1.3就高电平。我的意思是0.1 0.2只要有任何一个端口是高电平,1.3还是保持低电平。必须0.1和 0.2都是低电平时,1.3才高电平。

TOP

回复 18# laimeidiy 的帖子

您好 laimeidiy,

非常感谢您的帮助。

我已经编译好并且写入芯片。但是测试时置0.1和0.2都0时,1.3还是0(继电器没有关断)。

我先前的描述没有准确,正确的是:电路中行程开关0.1 和0.2 是接通一次就断开的,判断0.1和0.2 都接通过(低电平),1.3就高电平

TOP

 128 1234567
发新话题