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

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

ID:44811856

大小:19.66 KB

页数:5页

时间:2019-10-29

PC键盘输入实验原理讲解及程序_第1页
PC键盘输入实验原理讲解及程序_第2页
PC键盘输入实验原理讲解及程序_第3页
PC键盘输入实验原理讲解及程序_第4页
PC键盘输入实验原理讲解及程序_第5页
资源描述:

《PC键盘输入实验原理讲解及程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

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

3、h;键盘第1排的按键,从ESC到退格db0,'qwertyuiop[]',0dh;键盘第2排的按键,从Tab到回车db0,'asdfghjkl;',0,0;键盘第3排的按键db0,0,'zxcvbnm,./',0,0;键盘第4排的按键db0,'',0,0,0,0,0,0,0,0,0,0,0;键盘第5排的按键db0,0,'789-456+1230.';右边小键盘,从NumLock到DelDATAENDSCODESEGMENTSTARTPROCFARASSUMECS:CODE,DS:DATAPUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXmovax,

4、3509hint21hpushespushbx;保存09H号原中断向量cli;关中断pushds;设置09H号新中断向量movax,segkbintmovds,axmovdx,offsetkbintmovax,2509hint21hpopdsinal,21h;允许IRQ1中断,其他不变pushaxandal,0fdhout21h,alsti;开中断start1:callkbget;获取按键的ASCII码cmpal,1jzstart2;是ESC键,则退出pushax;保护字符movdl,al;显示字符movah,2int21hpopax;恢复字符cmpal,0dh;该字符是回

5、车符吗?jnzstart1;不是,取下一个按键字符movdl,0ah;是回车符,则再进行换行movah,2int21hjmpstart1;继续取字符start2:clipopaxout21h,alpopdxpopdsmovax,2509hint21hstimovax,4c00h;返回DOSint21hRETSTARTENDPkbgetprockbget1:pushbx;保护BXclimovbx,bufptr1;取头指针cmpbx,bufptr2;与尾指针相等否?jnzkbget2;不相等,说明缓冲区有字符,转移sti;相等,说明缓冲区空popbxjmpkbget1;等待缓冲

6、区有字符kbget2:moval,buffer[bx];取字符送ALincbx;队列头指针增量cmpbx,10;是否指向队列末端jckbget3;没有,转移movbx,0;指针指向队列末端,则循环,指向始端kbget3:movbufptr1,bx;设定新队列头指针stipopbxretkbgetendpkbintprocsti;开中断pushax;保护寄存器pushbxinal,60h;读取键盘扫描码pushaxinal,61h;使PB7=1,响应键盘oral,80hout61h,alandal,7fh;使PB7=0,允许键盘out61h,alpopaxtestal,80h

7、;是断开扫描码?jnzkbint2;是,则退出movbx,offsetscantb;是接通扫描码,取表首地址xlat;将扫描码转换成ASCII码cmpal,0;是否为合法的ASCII码?jzkbint2;不是,则退出movbx,bufptr2movbuffer[bx],al;将ASCII码存入缓冲区队列尾incbx;队列尾指针增量cmpbx,10;是否指向队列末端?jckbint1;没有,转移movbx,0;指针指向队列末端,则循环,指向始端kbint1:cmpbx,bufptr1jzkbint2;若队列满,则退出

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。