2013-03-14 73 views
0

我正在學習8051彙編編程。我在我的書中讀到「爲了使端口成爲輸入端口,必須通過將所有位寫入1來編程端口。」雖然這不是錯的嗎?從端口輸入

如果我將所有的位設置爲1,並且想要在輸入端輸入1010,我將按下連接到第二引腳和第四引腳的按鈕來輸入1010,但端口將讀取全1。我已經在Keil uVision Simulation上試過了,發現了這個問題。

這是一個問題還是我誤解了它?

org 00h 

Reset: 

mov P0,#00h 
mov P1,#00h 
mov P2,#00h 
mov P3,#00h 

TakeInput: 

jb P2.0,Addition// in assembler simulation, this condition is true if I set P2 to #0ffh, which is not required. The user should set this bit for making this condition true 

sjmp TakeInput 


Addition: 

MOV A,P0 添加A,P1

mov P3,A 

acall Delay 

ajmp Reset 


Delay: 

mov R0,#1 

here: 

mov R1,#1 

again: 

djnz R1,again 

djnz R0,here 

ret 

end 

如果我不重置所有端口爲0,所以它依賴於默認的端口值成爲真正的跳轉指令。

回答

1

這是正確的方法,你的模擬必須有問題。 8051個引腳具有這種電路:

pin circuit

source

注意上拉Vcc是可選的,請檢查您的特定芯片的數據表。

該電路的工作原理是,如果將引腳設置爲0,則輸出將被拉至地,只能讀取爲0,因爲外部無法將其拉高。如果您想允許輸入這兩個級別,則必須將該引腳設置爲1。在這種情況下,您可以:

  1. 休假輸出浮動,如果你有內部上拉(全文1
  2. 推輓輸出到Vcc(全文1
  3. 拉輸出對地(原文0

因此,如果你連接一個按鈕,你應該把它連接起來,以便它將引腳接地。如果需要,增加一個外部上拉電阻。

更新 到清楚這一點:如果你連線按鈕的指示以上(即按下按鈕理由銷)的輸入將被解讀爲1如果按鈕壓,並作爲0如果按下按鈕。這是連接按鈕的常用方法。

使用MCU 8051 IDE的插圖。注意兩個開關連接到端口1的引腳7和6(即兩個最高位),一個開路,另一個閉合(推動)。


如果端口位被設爲零,輸入將爲零無論開關的狀態: port bits set to 0


如果端口位被設置爲一個,輸入將是1用於開放和0爲閉合的開關: port bits set to 1

紅色佈線導致最左邊的開關指示P1.7Vcc(因爲輸出是1並且它沒有被交換機拉下來)。

+0

這是代碼,如果我想輸入'1010',我將不得不關閉其餘的位以方便起見,我用零初始化端口。 – Naruto 2013-03-14 14:39:42

+0

如果將所有引腳設置爲「0」,則永遠不應該看到具有標準8051端口的「1」輸入,因爲此時引腳被拉至地(請參見電路圖)。 – Jester 2013-03-14 15:26:59

+0

所以你的意思是模擬工作方式不同於8051端口本身。請問我的代碼在8051上運行正常 – Naruto 2013-03-14 15:30:44