標題: 8086匯編語言 按鍵控制發(fā)光二極管 [打印本頁]
作者: 大白是小白 時間: 2023-12-21 20:07
標題: 8086匯編語言 按鍵控制發(fā)光二極管
具體要求:基于8086芯片實現(xiàn)。按鍵要求能夠實現(xiàn)對二極管的點亮與熄滅的控制,用S1~S4組成的鍵盤分別控制4個發(fā)光二極管的點亮,S5按鍵來熄滅各二極管。按鍵具有防抖動功能,例如:S1點亮1號燈,按S5可以將其熄滅。S2點亮2號燈,按S5可以將其熄滅。這是我網(wǎng)上找的其他魔改的,只能到這一步了,請各位大哥門請教指正一下看看圖,看看代碼能不能簡化,小弟拜上。
代碼如下:CODE SEGMENT
ASSUME CS:CODE
IOCON EQU 8006H
IOA EQU 8000H
IOB EQU 8002H
START:
MOV AL, 90H ;
MOV DX, IOCON ;
OUT DX, AL ;
MOV DX, IOA ;
MOV AL, 0FFH
OUT DX, AL
MOV AL, 0FFH ;
MOV DX, IOB
OUT DX, AL
MOV BL,0FFH
TIMER:
MOV DX, IOA ;
IN AL, DX ;
CALL DELAY_MS ;
IN AL, DX ;
CMP AL, 0FEH ;
JE LED0
CMP AL, 0FDH
JE LED1
CMP AL, 0FBH
JE LED2
CMP AL, 0F7H
JE LED3
CMP AL, 07FH
JE LED_OFF
JMP TIMER ;
LED0:
AND AL, BL
MOV DX, IOB
OUT DX, AL
MOV BL,AL
JMP TIMER
LED1:
AND AL, BL
MOV DX, IOB
OUT DX, AL
MOV BL,AL
JMP TIMER
LED2:
AND AL, BL
MOV DX, IOB
OUT DX, AL
MOV BL,AL
JMP TIMER
LED3:
AND AL, BL
MOV DX, IOB
OUT DX, AL
MOV BL,AL
JMP TIMER
LED_OFF:
MOV AL, 0FFH
MOV BL,0FFH
MOV DX, IOB
OUT DX, AL
JMP TIMER
DELAY_MS:
PUSH CX
MOV CX, 1000
JMP DELAY_LOOP
DELAY_LOOP:
DEC CX ;
JNZ DELAY_LOOP
POP CX
RET ;
CODE ENDS
END START
-
323232.png
(172.02 KB, 下載次數(shù): 48)
下載附件
2023-12-24 19:12 上傳
作者: lyonkon 時間: 2023-12-22 11:40
要增加程序存儲器ROM,數(shù)據(jù)存儲器RAM。最起碼8086有地方取指令吧
作者: Hephaestus 時間: 2023-12-22 13:25
你貼的圖是proteus的,給出來的文件是multisim的,完全是驢唇對不上馬嘴,只能證明你根本就沒有看過,隨便從網(wǎng)上搜來的東西,一點兒都不理解,也不打算理解,就發(fā)出來讓大家算命。
作者: wangxiangtan 時間: 2023-12-22 15:12
while(1)
{
uchar a=按鍵檢測();
if(a==S1)
{
點亮LED1;
}
……
if(a == S5)
{
熄滅LED1;
熄滅LED2;
……
sleep(10);
}
}
作者: 大白是小白 時間: 2023-12-23 13:42
第一次發(fā)帖求助,沒經(jīng)驗,不小心加錯文件了,大哥再看看
作者: 大白是小白 時間: 2023-12-23 13:43
你這是c,我這是匯編大哥
作者: 大白是小白 時間: 2023-12-23 13:44
改了一下,大哥再看看,我已經(jīng)基本實現(xiàn)了功能,看看有沒有其他問題
作者: lyonkon 時間: 2023-12-23 21:01
子程序跳轉到其他子程序,再跳轉到另外一個程序,然后再跳,這樣寫的人不多。在追求錦上添花的地方可以這樣寫。
因為程序多了容易亂。而且邏輯分析太麻煩。
我建議:1,邏輯功能的子程序功能盡量單一,小程序,只開機調用一次的除外。便于分析 檢查
2,子程序需要其他程序功能的,以調用為主。跳轉為輔。大腦能理解數(shù)十個嵌套跳轉的人除外。
例1:
led1_ON..............作為子程序1帶返回
led2_ON..............作為子程序2帶返回
led3_ON..............作為子程序3帶返回
delay1..................作為子程序4帶返回
先將上面子程序寫好
start: //主程序
如果按鍵1按下
跳轉到start1
如果按鍵2按下
跳轉到start2
start1:
調用延時
按鍵1沒有按下 跳轉到 start1_end 否則下一條
調用 led1_ON
start1_end:
跳轉到start3
start2:
start3:end
以上的例子你可以先試試看。
作者: 大白是小白 時間: 2023-12-24 19:13

作者: hi等你 時間: 2023-12-25 09:23
雖然我也是玩匯編的,沒耐心看,但是看到8000h很驚訝,就一個點燈程序用這么大的地址干嘛
就一個點燈能上天?
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |