2016-01-18 93 views
2

我似乎無法找到這個問題的答案。8051組裝按鈕點擊

一個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 
+0

如果你發現任何值得一給予好評或接受以及如何橫空出世的答案我有興趣知道。 –

回答

0

你永遠不告訴我們你是如何有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, $ 

修訂根據您的更新 您已經定義算作一個值,但是你有沒有保留任何內存。其結果是(有可能)無意中增加了內存中的一個字節,而不是您控制的一個字節。您將需要爲此保留內存。實際上,我必須啓動模擬器中的功能,以瞭解它在現實世界中的作用。

我希望它可以是這個樣子:

DSEG 
     ORG 30h 
COUNT DS 1 

CSEG 
     ORG 0h 
    <Your code goes here> 
+0

我忘了程序啓動LED EQU P2.4按鈕EQU P1.7 COUNT EQU 30H ORG 00H LJMP MAIN .... –

+0

並且是MOV COUNT#0但不工作。 –

0

看來你使用COUNT來檢查,如果數量爲偶奇,並設置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變量,但我不知道,當你打算增加它。在您提供您提供的代碼的情況下釋放按鈕後,我就會假設。

這假定您的端口是正確的。我不相信LED在P2上,我不確定P1是否是開關。是否有可能讓他們逆轉?如果他們是你可能要改變前兩行是:

LED EQU P1.4 
button EQU P2.7