【正文】
匯編程序。在對每一個版本改進的過程中,我都逐漸加深了對匯編語言的理解,鍛煉了匯編編程及應用的能力。利用此方法,可以實現(xiàn)任意燈型。實驗二 8255A并行接口應用一、實驗目的1.掌握 8255A 的功能及方式 0、1 的實現(xiàn) 2.熟悉 8255A 與CPU 的接口,以及傳輸數(shù)據(jù)的工作原理及編程方法。 4.掌握同時顯示多位數(shù)字的技術。6 位數(shù)碼管靜態(tài)顯示 在數(shù)碼管電路上靜態(tài)地顯示 6 位學號,當主機鍵盤按下任意鍵時,停止顯示,返回DOS 。本實驗應在上面實驗的基礎上完成,動態(tài)顯示的速度可控制(快或慢),利用實驗一讀入端口的功能 擴展部分完成一個掃描鍵盤(PC口)輸入自己的學號,并在數(shù)碼管上顯示三、實驗結(jié)果1(6位數(shù)碼管靜態(tài)顯示)程序說明在數(shù)碼管上靜態(tài)顯示學號,可用撥碼開關切換同組兩個人的學號:SW0=1 林鎮(zhèn)安 210775SW0=0 李達達 210780撥碼開關控制程序運行/結(jié)束:(執(zhí)行程序前必須置SW7=1)SW7=1 運行SW7=0 結(jié)束(返回DOS)流程圖源代碼DAT SEGMENT AddrA DW 0E800H AddrB DW 0E801H AddrC DW 0E802H AddrCTL DW 0E803H c0 db 0edh c1 db 21h c2 db 0f4h c3 db 0f1h c4 db 39h c5 db 0d9h c6 db 0ddh c7 db 61h c8 db 0fdh c9 db 0f9hDAT ENDSSTA SEGMENT STACK DB 100H DUP (?)STA ENDSCOD SEGMENT ASSUME CS:COD,DS:DAT,SS:STASHOW MACRO X,Y MOV AL,X MOV DX,AddrB OUT DX,AL MOV AL,Y MOV DX,AddrA OUT DX,AL ENDMSTOP: MOV DX,AddrB MOV AL,0 OUT DX,AL MOV AH,4CH INT 21HSTART: MOV AX,DAT MOV DS,AX MOV AX,STA MOV SS,AX MOV AL,80H MOV DX,AddrCTL OUT DX,ALDISPLAY: MOV DX,0E8E0H IN AL,DX MOV AH,AL。BIT7=0 FOR STOP AND AL,01H CMP AL,01H JZ LZA。2 CALL DELAY SHOW 02H,c1 。0 CALL DELAY SHOW 08H,c7 。8 CALL DELAY SHOW 20H,c0 。2 CALL DELAY SHOW 02H,c1 。0 CALL DELAY SHOW 08H,c7 。7 CALL DELAY SHOW 20H,c5 。DELAY FOR 1MSDELAY PROC MOV CX,50OUTER: PUSH CX MOV CX,4000INNER: LOOP INNER POP CX LOOP OUTER RETDELAY ENDPCOD ENDS END START四、實驗結(jié)果2(6位數(shù)碼管動態(tài)顯示)程序說明在數(shù)碼管上動態(tài)顯示“HELLO”,4種速度可調(diào)、暫停、退出。A/B/C IN MODE 0, OUTPUT MOV DX,AddrCTL OUT DX,AL MOV SI,POINT MOV BX,POINT ADD BX,7 DISPLAY: MOV DX,0E8E0H IN AL,DX AND AL,30H ROL AL,1 MOV CX,1FH OR CL,AL 。 (*6)=SCAN: SHOW 01H,[SI] CALL DELAY1MS SHOW 02H,[SI+1] CALL DELAY1MS SHOW 04H,[SI+2] CALL DELAY1MS SHOW 08H,[SI+3] CALL DELAY1MS SHOW 10H,[SI+4] CALL DELAY1MS SHOW 20H,[SI+5] CALL DELAY1MS MOV DX,0E8E0H IN AL,DX MOV AH,AL。IF BIT7=0 THEN STOP LOOP SCAN AND AH,40H CMP AH,40H JNZ NONINC。在讀取到按鍵鍵盤輸入后,循環(huán)讀取按鍵鍵盤直到按鍵被釋放,以實現(xiàn)防抖。流程圖源代碼DATA SEGMENT ID DB 6 DUP(0) ARRAY DB 11100111B,11101011B,11101101B,11101110B DB 11010111B,11011011B,11011101B,11011110B DB 10110111B,10111011B,10111101B,10111110B DB 01110111B,01111011B,01111101B,01111110B KEY DB 0EDH,21H,0F4H,0F1H,39H 。6~9 DATA ENDS 。STACK39。CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK 。 Record how many digits has been stored MOV CX,6 MOV AL,0 XOR SI,SILOPC: MOV ID[SI],AL 。Do nothing if no digit JE NEXT DEC DX 。Display the digits CALL READ 。No Key pressed ? JE NEXT 。Key pressed! CLD 。Search array to find key code CMP CX,0 JE NFD 。happen,except sth wrong MOV BX,OFFSET ARRAY SUB DI,BX DEC DI CMP DI,9 。Key A and B not defined, 。Key C means clear all input digits CMP DI,13 。Key E means Exit the program. JMP NEXT ISNUM:NOPAGN: CALL READ 。Has the key been released? JNE AGN 。released。Store the input number to memery. INC DX CALL DISP CMP DX,7 。Unknown state,just terminate the program.EXIT:MOV AX,4C00H INT 21HMAIN ENDP 。Read keyboard state, return key code PUSH DX MOV DX,0E803H MOV AL,81H OUT DX,AL MOV AL,00H MOV DX,0E802H OUT DX,AL IN AL,DX 。Read Colum info OR AL,BL 。DISP PROC NEAR 。Control which char to display INC DX OUT DX,AL 。Every char need to delay LOOP LOPD DEC BP JNZ LOPP POP AX POP DX POP CX RET DISP ENDP。Delay time PUSH AX PUSH CX MOV AX,0003H 。Inner loop LOOP $ DEC AX JNZ LOP1 POP CX POP AX RETDELAY ENDP 。程序功能較復雜,代碼較繁雜。在具體實踐中,需掌握:子程序的用法,標號及跳轉(zhuǎn)的配合,if邏輯、case邏輯、for循環(huán)邏輯、while循環(huán)邏輯在匯編語言中的實現(xiàn)方法,鍛煉了邏輯思維,強化了匯編的能力。二、實驗任務及內(nèi)容1.音樂發(fā)生器完成一個音樂發(fā)生器,通過蜂鳴器放出音樂,并在數(shù)碼管上顯示樂譜。三、實驗結(jié)果1(音樂發(fā)生器)程序說明完成一個音樂發(fā)生器,循環(huán)播放《小步舞曲》全曲。可以通過修改代碼中的數(shù)據(jù)段,演奏任意簡單(只有高中低音域)簡譜(1~7)樂曲。電腦鍵盤輸入任意鍵退出程序返回DOS。Counter/Timer Number LOU DB 122,108,97,91,81,72,64 MID DB 61,54,48,45,40,36,32 HIG DB 30,27,24,22,20,18,16 。TON 1LOW,2MID,3HIG TON DB 2,2,2,2,2 DB 2,2,2 DB 2,2,2,2