【微机原理与接口技术】实验5 可编程并行接口(8255)
生活随笔
收集整理的這篇文章主要介紹了
【微机原理与接口技术】实验5 可编程并行接口(8255)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
可編程并行接口(8255)
- 8255并行I/O輸入/輸出實驗
- 并行口鍵盤掃描實驗
8255并行I/O輸入/輸出實驗
P8255A EQU 288H ;P8255B EQU 0602H P8255C EQU 28AH P8255MODE EQU 28BH CODE SEGMENTASSUME CS:CODE START: MOV DX, P8255MODE ;控制字端口MOV AL,10001001B ;OUT DX, ALNEXT: ;------從C口讀入開關狀態,將從C端口讀入的開關數據送端口A輸出--------------MOV DX, P8255C ;B端口IN AL, DXMOV DX, P8255A;A端口OUT DX, AL ;-------------------------------------------------------------------MOV AH,0BH;檢測是否有按鍵按下INT 21HCMP AL,0HJE NEXTMOV AH,4CHINT 21H CODE ENDSEND START并行口鍵盤掃描實驗
a8255 equ 288H ;8255 A口 c8255 equ 28aH ;8255 C口 k8255 equ 28bH ;8255控制口 data segment table1 dw 0770h,0B70h,0D70h,0E70h,07B0h,0BB0h,0DB0h,0EB0hdw 07D0h,0BD0h,0DD0h,0ED0h,07E0h,0BE0h,0DE0h,0EE0h ;鍵盤行列碼表 LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CHDB 39h,5EH,79h,71h,0ffh ;LED段碼表,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f char db '0123456789ABCDEF' ;字符表 mes db 0ah,0dh,'PLAY ANY KEY IN THE SMALL KEYBOARD! ',0ah,0dhdb 'IT WILL BE ON THE SCREEN! END WITH E ',0ah,0dh,'$' key_in db 0h data ends stacks segment stack ;堆??臻gdb 100 dup (?) stacks ends code segmentassume cs:code,ds:data,ss:stacks,es:data start:climov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axmov dx,offset mes ;顯示提示信息mov ah,09int 21h main_key: ;設置8255 (工作方式0;A口輸出;C口高四位輸出,低四位輸入)MOV DX,k8255 ;初始化控制字mov al,81h;out dx,al main_key:call key ;get a char in (key_in) and display itcall disply ;調顯示子程序,顯示得到的字符cmp byte ptr key_in,'E'jnz main_keymov ax,4c00h ;if (dl)='E' return to EXIT!int 21h ;退出 key proc near key_loop:mov ah,1int 16hjnz exit ;pc鍵盤有鍵按下則退出mov dx,c8255mov al,0fhout dx,alin al,dx ;讀行掃描and al,0fhcmp al,0fhjz key_loop ;未發現有鍵按下則轉至key_loop call delay ;delay for a momentmov ah,al ;設置8255 (工作方式0;A口輸出;C口高四位輸入,低四位輸出)MOV DX,k8255mov al,88hout dx,almov dx,c8255mov al,ahor al,0f0hout dx,alin al,dx ;讀列掃描值and al,0f0hcmp al,0f0h jz key_loop ;未發現有鍵按下則轉至key_loopmov si,offset table1 ;鍵盤掃描碼表首址mov di,offset char ;字符表首址mov cx,16 ;待查表的表大小 key_tonext:cmp ax,[si] ;cmp (col,row) with every wordjz key_findkey ;in the tabledec cxjz key_loop ;未找到對應掃描碼add si,2inc dijmp key_tonext key_findkey:mov dl,[di]mov ah,02int 21h ;顯示查找到的鍵盤碼mov byte ptr key_in,dl key_waitup:MOV DX,k8255mov al,81hout dx,almov dx,c8255mov al,0fhout dx,alin al,dx ;讀行掃描值and al,0fhcmp al,0fhjnz key_waitup ;按鍵未抬起轉call delay ;delay for amomentret exit: mov byte ptr key_in,'E'ret key endp delay proc nearpush ax ;delay 50ms--100msmov ah,0int 1ahmov bx,dx delay1:mov ah,0int 1ahcmp bx,dxjz delay1mov bx,dx delay2:mov ah,0int 1ahcmp bx,dxjz delay2pop axret delay endp DISPLY PROC NEARPUSH axMOV BX,OFFSET LEDMOV AL,byte ptr key_inSUB al,30hCMP al,09hJNG DIS2SUB al,07h DIS2: XLATMOV DX,a8255OUT DX,AL ;輸出顯示數據,段碼POP AXRET DISPLY ENDP code ends end start總結
以上是生活随笔為你收集整理的【微机原理与接口技术】实验5 可编程并行接口(8255)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【python】20行代码实现有道翻译a
- 下一篇: GeneXus Beta版本已经集成区块