微算機原理及應用(I)_林淵翔_單元五 8051 的輸入與輸出埠控制_PART C_8051 的C語言 ... 高中程式設計_ 語法 篇_繼承與虛擬函式_繼承方式_公開繼承_劉政鑫. ... <看更多>
8051語法 在 s78718/8051-82g516-sda178: 大學專題8051組合語言系列 的推薦與評價
Contribute to s78718/8051-82g516-sda178 development by creating an account on GitHub. ... 大學專題語音計步器從自己去找材料自己焊接並自己研究組合語言語法完成 ... ... <看更多>
8051語法 在 國立臺東高級中學第一次期中考單晶片微電腦 的推薦與評價
(A)8031 (B)8086 (C)89C51 (D)8051。 3. ( A )單晶片89S51 內部程式記憶體為 ... ( B )如下表A 欄所標示底線語法中,哪一項為運算碼?(A)START (B)MOV (C)A (D)#0FH 。 ... <看更多>
8051語法 在 8051 clock | Jason note 的推薦與評價
8051 clock. 一個機械週期(Machine Cycle) 是由6 個狀態週期(State) S1-S6 組成。而每一個狀態週期包含2 個振盪週期分別稱為Pl 與P2 。 ... <看更多>
8051語法 在 [問題] 8051組合語言語法- 看板ASM - 批踢踢實業坊 的推薦與評價
板上的高手們能幫小弟我看一下寫的東西
小弟我剛接觸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
... <看更多>