[問題] 8051組合語言語法
板上的高手們能幫小弟我看一下寫的東西
小弟我剛接觸8051,所以概念可能不太好,希望能不吝於指教
內容:利用指撥開關 四個單鍵與文字形LCD來設計簡單的計算機,其中乘法以連加表示,除
法已連減表示
指撥開關輸入a值與b值
模式鍵:乘除法轉換
出題鍵:在LCD上顯示出乘法或除法算式 ex:a*b或a/b
解答鍵:每計算一次顯示一次
清除鍵:全部清除
問題:跑的出東西但只能控制a值跟部分的單鍵功能
我想可能是我有邏輯的錯誤
但自己寫的東西不容易找出來,希望高手能給我一些指點
如果問題很大的話,那我在砍掉重練
感謝你們
板大如果這篇不允許的話,我在自D吧!
以下為程式碼
;模式鍵P1.3 出題鍵P1.4 解答鍵P1.5 清除鍵P1.6 指撥開關P2
E REG P1.2
RS REG P1.0
RW REG P1.1
;**********************************主程式********************************
;初始設定
SETTING:
MOV R0,#0 ;被乘數 被除數
MOV R1,#0 ;乘數 除數
MOV R2,#0 ;
MOV R3,#0 ;
MOV R4,#0 ;
MOV A,#0 ;
;出題鍵P1.4
START:
JB P1.4,$ ;判斷出題鍵是否按下
;指撥題目顯示於LCD
SHOWQUESTION:
MOV DPTR,#DATA
MOV A,P2
CPL A ;取A的補數=1
ANL A,#0F0H
SWAP A ;高低四位元互換
MOV R0,A
ANL A,#0OFH
MOV R1,A
ACALL LCDFIRST ;顯示於LCD第一行
MOV A,R0 ;顯示被乘數 被除數
ACALL LOOP
ACALL DIVMODE ;顯示乘 除
ACALL LOOP
MOV A,R1 ;顯示乘數 除數
ACALL LOOP
MOV A,#18 ;顯示 =
ACALL LOOP
MOV A,#19 ;顯示 ?
ACALL LOOP
ACALL LCDSECOND ;換至LCD第二行
ACALL ANSWER
;解答鍵P1.5
ANSWER:
JB P1.5,$
MOV A,R0
MOV B,R1
DIV AB
MOV R4,A
INC R4
JNB P1.3,DIV0
MUL0:
CLR A
ACALL LOOP
ACALL SDATA
MUL1:
MOV A,R0
JZ CLEAR
MOV A,R1
JZ CLEAR
MUL2:
ACALL LCDSECOND
MOV A,R3
ADD A,R0
MOV R3,A
ANL A,#11110000B
SWAP A
ACALL LOOP
MOV A,R3
ANL A,#00001111B
ACALL LOOP
DJNZ R1,MUL2
ACALL DELAY5MS
AJMP CLEAR
DIV0:
MOV A,R1
JZ ERROR
DIV1:
MOV A,R3
ACALL LOOP
ACALL DOT
MOV A,R0
ACALL LOOP
MOV A,R0
SUBB A,R1
MOV R0,A
ACALL LCDSECOND
INC R3
DJNZ R4,DIV1
ACALL DELAY5MS
AJMP CLEAR
ERROR:
ACALL LCDSECOND
MOV A,#14
ACALL LOOP
MOV A,#22
ACALL LOOP
MOV A,#22
ACALL LOOP
MOV A,#21
ACALL LOOP
MOV A,#22
ACALL LOOP
AJMP CLEAR
;清除鍵P1.6
CLEAR:
JB P1.6,$ ;判斷是否有按
MOV A,#1 ;清除全螢幕
ACALL COMMAND
AJMP SETTING
END
;***********************************以下為副程式******************************
;模式鍵P1.3
DIVMODE:
JB P1.3,MULMODE
MOV A,#16 ;除號
RET
MULMODE:
MOV A,#17 ;乘號
RET
DOT:
MOV A,#20
MOVC A,@A+DPTR
ACALL SDATA
ACALL SDATA
ACALL SDATA
RET
;顯示LCD第一行
LCDFIRST:
MOV A,#10000000B
ACALL COMMAND
RET
;顯示LCD第二行
LCDSECOND:
MOV A,#11000000B
ACALL COMMAND
RET
;從DATA讀取後寫入
LOOP:
MOVC A,@A+DPTR
ACALL SDATA
RET
;LCD顯示重複寫入
COMMAND:
MOV P0,A
SETB E
CLR RW
CLR RS
CLR E
ACALL DELAY2MS
RET
;LCD顯示不重複寫入
SDATA:
MOV P0,A
SETB E
CLR RW
SETB RS
CLR E
RET
;延遲副程式
DELAY5MS:
ACALL DELAY1MS
ACALL DELAY2MS
ACALL DELAY2MS
RET
DELAY2MS:
ACALL DELAY1MS
ACALL DELAY1MS
RET
include delay.inc
DATA:
DB "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"
DB "/","*","=","?",".","O","R"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.143.64.76
ASM 近期熱門文章
PTT數位生活區 即時熱門文章