PC键盘输入实验原理讲解及程序

上传人:简****9 文档编号:109719906 上传时间:2019-10-27 格式:DOC 页数:5 大小:19.66KB
返回 下载 相关 举报
PC键盘输入实验原理讲解及程序_第1页
第1页 / 共5页
PC键盘输入实验原理讲解及程序_第2页
第2页 / 共5页
PC键盘输入实验原理讲解及程序_第3页
第3页 / 共5页
PC键盘输入实验原理讲解及程序_第4页
第4页 / 共5页
PC键盘输入实验原理讲解及程序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《PC键盘输入实验原理讲解及程序》由会员分享,可在线阅读,更多相关《PC键盘输入实验原理讲解及程序(5页珍藏版)》请在金锄头文库上搜索。

1、1. PC机键盘的工作过程键盘电路正常工作时不断地扫描键盘矩阵n 有按键,则确定按键位置之后以串行数据形式发送给系统板键盘接口电路n 键按下时,发送该键的接通扫描码n 键松开时,发送该键的断开扫描码n 若一直按住某键,则以拍发速率(每秒230次)连续发送该键的接通扫描码接通扫描码反映该键在键盘上的位置断开扫描码(接通扫描码最高位置1)接通扫描码80H2. 键盘接口电路的工作过程n 接收一个串行形式字符以后,进行串并转换n 然后产生键盘中断IRQ1请求,等待读取键盘数据n CPU响应中断,则进入09H键盘中断服务程序: 读取键盘扫描码:用IN AL,60H即可 响应键盘:系统使PB71 允许键盘

2、工作:系统使PB70 处理键盘数据 给8259A中断结束EOI命令,中断返回3. PC机键盘中断服务程序n 09H号中断服务程序(kbint过程)n 完成常规的操作n 处理键盘数据:将获取的扫描码通过查表转换为对应的ASCII码送缓冲区。对于不能显示的按键,则转换为0,且不再送至缓冲区n 键盘I/O功能程序(kbget子程序)n 从缓冲区中读取转换后的ASCII码n 功能调用(主程序)n 循环显示键入的字符DATA SEGMENTbufferdb 10 dup(0)bufptr1dw 0;队列头指针bufptr2dw 0;队列尾指针scantbdb 0,1,1234567890-=,08h;键

3、盘第1排的按键,从ESC到退格db 0,qwertyuiop,0dh;键盘第2排的按键,从Tab到回车db 0,asdfghjkl;,0,0;键盘第3排的按键db 0,0,zxcvbnm,./,0,0;键盘第4排的按键db 0, ,0,0,0,0,0,0,0,0,0,0,0;键盘第5排的按键db 0,0,789-456+1230.;右边小键盘,从Num Lock到DelDATA ENDSCODE SEGMENT START PROC FAR ASSUME CS:CODE,DS:DATA PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX mov ax

4、,3509hint 21hpush espush bx;保存09H号原中断向量cli;关中断push ds;设置09H号新中断向量mov ax,seg kbintmov ds,axmov dx,offset kbintmov ax,2509hint 21hpop dsin al,21h;允许IRQ1中断,其他不变push axand al,0fdhout 21h,alsti;开中断start1:call kbget;获取按键的ASCII码cmp al,1jz start2;是ESC键,则退出push ax;保护字符mov dl,al;显示字符mov ah,2int 21hpop ax;恢复字符

5、cmp al,0dh;该字符是回车符吗?jnz start1;不是,取下一个按键字符mov dl,0ah;是回车符,则再进行换行mov ah,2int 21hjmp start1;继续取字符start2:clipop axout 21h,alpop dxpop dsmov ax,2509hint 21hstimov ax,4c00h;返回DOSint 21hRETSTART ENDPkbgetprockbget1:push bx;保护BXclimov bx,bufptr1;取头指针cmp bx,bufptr2;与尾指针相等否?jnz kbget2;不相等,说明缓冲区有字符,转移sti;相等,说

6、明缓冲区空pop bx jmp kbget1;等待缓冲区有字符kbget2:mov al,bufferbx;取字符送ALinc bx;队列头指针增量cmp bx,10;是否指向队列末端jc kbget3;没有,转移mov bx,0;指针指向队列末端,则循环,指向始端kbget3:mov bufptr1,bx;设定新队列头指针stipop bxretkbgetendpkbintprocsti;开中断push ax;保护寄存器push bxin al,60h;读取键盘扫描码push axin al,61h;使PB71,响应键盘or al,80hout 61h,aland al,7fh;使PB70,

7、允许键盘out 61h,alpop axtest al,80h;是断开扫描码?jnz kbint2;是,则退出mov bx,offset scantb;是接通扫描码,取表首地址 xlat;将扫描码转换成ASCII码cmp al,0;是否为合法的ASCII码?jz kbint2;不是,则退出mov bx,bufptr2mov bufferbx,al;将ASCII码存入缓冲区队列尾inc bx;队列尾指针增量cmp bx,10;是否指向队列末端?jc kbint1;没有,转移mov bx,0;指针指向队列末端,则循环,指向始端kbint1:cmp bx,bufptr1jz kbint2 ;若队列满,则退出mov bufptr2,bx;队列不满,设置新的队列尾指针kbint2:mov al,20h;向8259A发送普通中断结束命令out 20h,alpop bx;恢复寄存器pop axiret;中断返回kbintendpCODE ENDSEND START

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号