100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【微机原理与接口技术】实验5 可编程并行接口(8255)

【微机原理与接口技术】实验5 可编程并行接口(8255)

时间:2019-01-02 17:40:25

相关推荐

【微机原理与接口技术】实验5 可编程并行接口(8255)

可编程并行接口(8255)

8255并行I/O输入/输出实验并行口键盘扫描实验

8255并行I/O输入/输出实验

P8255A EQU 288H;P8255B EQU 0602HP8255C EQU 28AHP8255MODE EQU 28BHCODE SEGMENTASSUME CS:CODESTART: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 21HCODE ENDSEND START

并行口键盘扫描实验

a8255 equ 288H ;8255 A口 c8255 equ 28aH ;8255 C口k8255 equ 28bH ;8255控制口data segmenttable1 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,fchar 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 0hdata endsstacks segment stack ;堆栈空间db 100 dup (?)stacks endscode segmentassume cs:code,ds:data,ss:stacks,es:datastart: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 nearkey_loop:mov ah,1int 16hjnz exit;pc键盘有键按下则退出mov dx,c8255mov al,0fhout dx,alin al,dx ;读行扫描and al,0fhcmp al,0fhjz key_loop ;未发现有键按下则转至key_loopcall 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_tonextkey_findkey:mov dl,[di]mov ah,02int 21h ;显示查找到的键盘码mov byte ptr key_in,dlkey_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 amomentretexit: mov byte ptr key_in,'E'retkey endpdelay proc nearpush ax ;delay 50ms--100msmov ah,0int 1ahmov bx,dxdelay1:mov ah,0int 1ahcmp bx,dxjz delay1mov bx,dxdelay2:mov ah,0int 1ahcmp bx,dxjz delay2pop axretdelay endpDISPLY PROC NEARPUSH axMOV BX,OFFSET LEDMOV AL,byte ptr key_inSUB al,30hCMP al,09hJNG DIS2SUB al,07hDIS2: XLATMOV DX,a8255OUT DX,AL ;输出显示数据,段码POP AXRETDISPLY ENDPcode endsend start

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。