8051組合語言問題



贊助商連結


bp912306
2008-01-04, 02:41 PM
:lovely: 編碼如下
小弟現在卡在不知道如何讓他由鍵盤輸出我要的文字
如按1的時候顯示 I LOVE
按2顯示 HAPPY
而且要想辦法清除第1次輸入的結果才能顯示第2次的
清除的部份測試的結果都是無法完全清除
不知道這兩個問題該如何解決
有大大可以幫忙解答一下嗎??
用過好多方法了~"~

MASK EQU 00001111B
DSEG AT 30H
KBDBUF: DS 1

CSEG AT 00H
ORG 00H
JMP START
ORG 13H
JMP KBD_ISR
START:
MOV SP,#5FH

CLR P1.3

CLR P1.7 ;設定4bit模式
CLR P1.6 ;
SETB P1.5 ;
CLR P1.4 ;
SETB P1.2 ;
CLR P1.2 ;
CALL DELAY ;
;游標歸位
SETB P1.2 ;設定4bit
CLR P1.2 ;
SETB P1.7 ;改變bit
SETB P1.2 ;在設定4bit
CLR P1.2
CALL DELAY
;輸入模式設定
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4
SETB P1.2
CLR P1.2
SETB P1.6
SETB P1.5
SETB P1.2
CLR P1.2
CALL DELAY
;顯示器控制
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4
SETB P1.2
CLR P1.2
SETB P1.7
SETB P1.6
CLR P1.5 ;游標開關
SETB P1.4
SETB P1.2
CLR P1.2
CALL DELAY

MOV P0,#11111111B ;中斷程式
MOV P0,#11110000B ;<--
SETB IT1 ;
SETB EA ;
SETB EX1 ;

SETB P1.3

LOOP:
JMP $

CLEAR_LCD:
CLR P1.3
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4
SETB P1.2
CLR P1.2
SETB P1.4
SETB P1.2
CLR P1.2
CALL LONG_DELAY
RET

SendChar:
MOV C,ACC.7
MOV P1.7,C
MOV C,ACC.6
MOV P1.6,C
MOV C,ACC.5
MOV P1.5,C
MOV C,ACC.4
MOV P1.4,C
SETB P1.2
CLR P1.2
MOV C,ACC.3
MOV P1.7,C
MOV C,ACC.2
MOV P1.6,C
MOV C,ACC.1
MOV P1.5,C
MOV C,ACC.0
MOV P1.4,C
SETB P1.2
CLR P1.2
CALL DELAY
RET
KBD_ISR:
PUSH ACC
CLR EX1
MOV P0,#11111111B
CALL KEY_SCAN
JNB F0,RECOUNT
CALL TRANS
MOV A,KBDBUF
CALL SendChar
RECOUNT:
MOV P0,#11110000B
JNB P3.3,$
SETB EX1
POP ACC
RETI
TRANS:
MOV A,KBDBUF
MOV DPTR,#KEY_TAB
MOVC A,@A+DPTR
MOV KBDBUF,A
RET


KEY_SCAN:
CLR F0
MOV KBDBUF,#0
CLR P0.3
CALL COL_SCAN
SETB P0.3
JB F0,FINISH_SCAN


CLR P0.2
CALL COL_SCAN
SETB P0.2
JB F0,FINISH_SCAN

CLR P0.1
CALL COL_SCAN
SETB P0.1
JB F0,FINISH_SCAN

CLR P0.0
CALL COL_SCAN
SETB P0.0

FINISH_SCAN:
RET
COL_SCAN:
JNB P0.6,GET_KEY
INC KBDBUF
JNB P0.5,GET_KEY
INC KBDBUF
JNB P0.4,GET_KEY
INC KBDBUF
RET
GET_KEY:
SETB F0
RET
DELAY:
PUSH 0
MOV R0,#50
DJNZ R0,$
POP 0
RET
LONG_DELAY:
PUSH 0
PUSH 1
MOV R0,#100
L0:
MOV R0,#200
DJNZ R0,$
DJNZ R1,L0
POP 1
POP 0
RET
KEY_TAB:

DB '1'
DB '2'
DB '3'
DB '4'
DB '5'
DB '6'
DB '7'
DB '8'
DB '9'
DB '*'
DB '0'
DB '#'
END

贊助商連結


門神
2008-01-04, 04:26 PM
^^

誰知道你的板子長怎樣 !!

bp912306
2008-01-04, 11:00 PM
^^

誰知道你的板子長怎樣 !!

我並沒有要用板子做出來
而是要用edsim51模擬出來就可以了

rushoun
2008-01-04, 11:51 PM
液晶顯示?LED七段顯示?
看起來應該是LED七段顯示,可以到超韌派 (http://www.fwdev.com/)問問。

星之蘿莉控
2008-01-05, 10:27 PM
沒有縮排看起來好痛苦....

直接清掉 DD RAM不行嗎?

DDSC
2008-01-06, 12:04 AM
程式可用 [CODE] 的對映來表示,就不會省掉起頭的空格了。
另,原PO不是用模擬器嗎?就算單步追蹤也該找得出問題所在吧...

門神
2008-01-06, 07:06 AM
edsim51

Java寫的模擬器

rushoun
2008-01-06, 12:23 PM
模擬器確實好用,學習上是可以,不過實際上要進行電路製作時,只怕
會有很大的差距。