我似乎找不到这个问题的答案。
一个LED连接到P2.4端口,一个按钮连接端口P1.7。我们有COUNT变量,每次单击按钮时都会增加它。所以,如果我们按下5次led是开的,如果我们按下10次led是关闭的,它的持续15次led是开的,20是关闭的。我认为使用CJNE指令可能是必要的,但我不确定。
LED EQU P2.4
button EQU P1.7
COUNT EQU 30H
ORG 00H
LJMP main
main:
CLR P2.4
SETB P1.7
MOV COUNT,#0
again:
JB button,$
JNB button,$
INC COUNT
MOV A,COUNT
ANL A,#01h
MOV P2.4,A
JMP again
END发布于 2016-01-19 10:24:32
您从未告诉我们如何定义COUNT和BUTTON。这就引出了两个可能的错误。
首先,我不确定这是否是复制粘贴错误,但我不相信
MOV COUNT是合法的。我相当肯定,您需要指定源和目的地。我猜这应该是:
MOV COUNT,0第二,你有:
SETB P1.7你从来不告诉我们,但我假设这是连接按钮的引脚。然而,稍后,你会这样做:
JB BUTTON, $
JNB BUTTON, $因为我没有看到您将BUTTON定义为P1.7的标识符,所以我将假设您的代码被无限地卡在JNB BUTTON,$上。我相信这会纠正这一点:
JB P1.7, $
JNB P1.7, $修订基于您的更新--您已经将count定义为一个值,但是您没有为它保留任何内存。其结果是,您(可能)无意中增加了内存中的一个字节,而不是您控制的一个字节。您将希望为此保留内存。实际上,我必须启动模拟器中的内容,看看它在现实世界中会做些什么。
我希望这个看起来像这样:
DSEG
ORG 30h
COUNT DS 1
CSEG
ORG 0h
<Your code goes here>发布于 2016-01-19 21:27:21
似乎您正在使用计数来检查一个数字是否为偶数,并相应地设置LED。我不确定你一定要这么做。简化的版本可以是:
LED EQU P2.4
button EQU P1.7
COUNT EQU 30H
ORG 00H
main:
MOV COUNT, #0
SETB button ; Enabled button
again:
SETB LED ; Turn off LED segment
JB button,$ ; Wait until button pressed
CLR LED ; Turn on the LED segment
JNB button,$ ; Wait until button released
INC COUNT ; Increment count on release
JMP again ; Do again
END我保留了COUNT变量,但我不确定您打算何时增加它。我以为在您释放按钮后,给出了您所提供的代码。
这假设您的端口正确。我不相信发光二极管是在P2,我也不确定P1是开关。你有可能让他们倒车吗?如果是,您可能希望将前两行修改为:
LED EQU P1.4
button EQU P2.7https://stackoverflow.com/questions/34861864
复制相似问题