英语原文共 5 页,剩余内容已隐藏,支付完成后下载完整资料
基于ATmega8的IIC接口实现PS/2键盘/鼠标在系统中的应用
Dai Jiejiea Song Huib
a自动化科学与电气工程学院,北京航空航天大学新主楼D645 ,北京100191 ,中国
b电子信息与电气工程学院,上海交通大学,上海200240 ,中国
摘要
本文介绍了PS/2键盘/鼠标协议和IIC总线接口的传输特性,设计并给出了PS/2接口转换IIC接口的硬件电路。系统首先会解析协议和数据,然后通过ATmega8微控制器向主控系统中传送基于PS/2键盘协议的数据。因此PS/2键盘/鼠标产生的数据会经由ATmega8处理并输出到其他设备上,为下一步实现主机和键盘/鼠标的交互提供了切实可行的方法。
copy; 2010 Published by Elsevier Ltd. Selection and/or peer-review under responsibility of Society for Automobile, Power and Energy Engineering Open access under CC BY-NC-ND license.
关键词:PS/2 键盘/鼠标;IIC接口;ATmega8微处理器;数据传输
- 绪论
AVR系列单片机具有大容量程序存储器,低廉的价格,较快的运行速度和强大的处理能力,因此在过程控制,数据采集等领域中得到广泛应用[1]。此外,由于PS/2键盘/鼠标具有稳定性高,通用性好以及便于维护的特点,已被广泛应用于微型电脑以及其他项目。本文介绍了在Atmel公司的ATmega8微控制器作为主机与键盘之间实现数据转换的方法。
- PS/2协议
PS/2协议是一种主机和外设之间通信使用的同步双向串行协议。键盘/鼠标与主机之间可以互相传输数据,但是主机在总线上具有优先权。所有的数据都会按字节传输,每个字节包括11-12位:1个起始位(0),8个数据位,1个奇校验位,和1个停止位(1)。从键盘/鼠标发送到主机的数据会在时钟信号的下降沿(时钟信号由高变低的瞬间)被读取;而主机发送到键盘/鼠标的数据在时钟信号的上升沿(时钟信号由低变高的瞬间)被读取。当从设备接收到主机发送的数据包后,会向主机发送一个握手位确认。但是主机在接收到从设备发送到的数据后不会产生握手位。
-
- 外设发送主机接收
当键盘或者鼠标准备发送信息到主机时,首先要检查时钟总线,确定时钟总线处于高电平。如果不是的话,主机将禁止通讯,从机将暂时存储所有待发送数据直到重新获取总线控制权后重新发送。如果时钟总线处于高电平,设备就可以向主机传送数据。时序如图一所示:
图 一外设发送信号时序图
-
- 主机发送外设接收
首先,PS/2设备总是会产生时钟信号。如果主机要发送数据,它必须先把时钟总线和数据总线拉至“请求发送”状态:通过拉低时钟总线电平至少100微秒来抑制总线通信,拉低数据总线电平达到“请求发送”状态,之后释放时钟总线。外设会在10毫秒内检测到这种状态。只有当始终总线为低电平时主机才能改变数据总线的状态,数据总线在时钟信号的上升沿被锁存。这与设备到主机的通信的情况刚好相反,信号顺序关系如图二所示[2]:
图 二主机发送信号时序图
-
- 键盘工作原理
键盘中的处理器会一直遍历并监视键盘矩阵。任何一个按键被按下或者释放,键盘都会向电脑发送一个数据包,称之为“扫描码”。扫描码分为两种不同的类型: “通码”(一个字节表示按键按下)和“断码”(两个字节表示按键释放)。每个按键都分配有自己独有的通码和断码,因此主机可以通过分析单个的扫描码而确定哪一个按键发生了什么动作。扫描码与按键状态紧密相连,与按键的ASCII码无关。
-
- 鼠标工作原理
PS/2鼠标具有四种操作模式:(1)“重置”模式:鼠标在上电或者接收到主机的“重置”命令(0xFF)后进入重置模式。(2)“串流”模式:上电或者重置完成后,鼠标进入默认工作模式。(3)“远程”模式:主机向鼠标发送“设定远程模式”命令(0xF0)后,鼠标进入远程模式。(4)“wrap”模式:此模式下用于检测鼠标和主机连接是否正确。
当鼠标移动最小距离(分辨率精度范围之内)或者按键被按下,鼠标就会通过一条或多条信息向主机发送移动的距离和按键状态信息。信息包括:初始化报告,鼠标移动方向和距离,以及按键状态[3]。
- IIC接口
IIC协议允许系统设计人员通过时钟总线(SCL)和数据总线(SDA)挂载128个不同的外设。实现IIC总线维系需要外加的硬件就是每条总线上接一个上拉电阻。每个接入总线的外设都有一个不相同的地址,并且可以通过IIC协议的内部机制解决总线竞争。每一个数据位的发送都需要一个时钟总线的脉冲信号。当时钟总线的电平为高的时候,数据总线的状态必须保持稳定。只有在产生启动信号和停止信号时例外。IIC总线上传输的地址报文都有9位,包括7个地址位,一个读/写控制位和一个应答位。当读/写控制位置1时,执行读操作,反之,则执行写操作。包含从机地址和读/写控制位的报文分别称作SLA R和SLA W。在数据传送过程中,主机产生时钟信号以及启动、停止信号,同时从机对数据的接收作出响应。接收器在时钟总线第九个时钟脉冲时拉低数据总线的电平作为接收应答位(ACK)。一次数据的传输主要包括:起始信号,SLA W/R,一个或多个数据包和一个停止信号。典型的数据传输过程如图三所示[4]。
图 三典型数据传输
-
系统设计
- 硬件原理
在本文之中,我们采用了Atmel公司的ATmega8微控制器来与PS/2键盘(鼠标)进行通信。以键盘的通信为例,集体原理图见图四。由于PS/2接口使用的是同步双向串行协议而且时钟信号总是由键盘产生,所以可以采取以下两种方案:一是将键盘时钟线连接到微控制器的中断线,数据线连接到微控制器的任意I/O口,通过查询数据位的状态来实现双向通信;另一种则是不改变键盘时钟线CLK连接的位置,而数据线连接到微控制器的RXD口(也用于I/O口)。当微控制器发送数据时,CLK触发单片机的外部中断,然后用RXD作为其I/O功能端口用于数据传输;当键盘发送数据时,I/O端口转换为RXD功能,采用单片机的同步/异步串口USART接收数据。因此,主机只有在接收到数据后才会产生中断信号。相较于第二种方案,尽管通信过程中会产生更频繁的中断,但是实现时不需要考虑自适应芯片的波特率,也不需要设计复杂的外围电路,所以我们选择第一种方案具体应用。
时钟线和数据线分别连接到MCU的INT0(PD2)和INT1(PD3)。IIC接口的时钟总线SCL和数据总线SDA连接到主控制系统。系统工作时,启用中断INT0屏蔽中断INT1(INT1作为通用I/0引脚)。
图 四键盘通信原理图
-
- 软件实现
PS/2接口程序如下图所示:
图 五PS/2键盘通信流程图
-
- 常规设计
程序采用CodeVision AVR C语言编译器。当键盘给出一个输入信号,时钟总线的下降沿触发外部中断INT0,程序就会通过外部中断的子程序接收到键盘发送的数据。当时钟总线和数据总线同时为高电平时,即开始数据传输。起始位(0)被输出到数据总线(这里注意一点:发送一位数据后,需要检测时钟总线确定主机并没有禁止PS/2设备通信,如果检测到主机禁止通信,就会停止传输)。键盘随后输出8位数据到数据总线之后进行数据校验(奇校验)[5]。如果校验结果证明数据正确传输,最终就会再向数据总线输出一位停止位(1)。接收8位数据并进行奇校验的程序如下:
If (bBitCounter gt; 1 amp;amp; bBitCounter lt; 10){
bKeyCode gt;gt;= 1; //receive 8-bit data
If (DAT){
bKeyCode |= 0x80; //or equal
bOddParity ;
}
return;
}
Else if (bBitCounter == 10){
If (bKeyCode ^ (bOddParity amp; 0x01)) { //odd parity correct
oddstatus=1; //odd parity correct flag
PS/2_KeyDeCode (bKeyCode); //decode
PSDAT=PS/2KeyStatus.bKeyAsiic;
}
Else {
bBitCounter = 0 ;
} return;
}
根据I2C协议中,数据通过I2C总线传送到主控制芯片。
Void I2C_W (unsigned char PSDAT){
//clear Interrupt, send Start condition
TWCR = (1 lt;lt; I2CNT)|(1 lt;lt; TWSTA)|(1 lt;lt; TWEN);
While (! (TWCR amp; (1 lt;lt; I2CNT)));
//wait for completion of Start condition
TWDR = SLAW_XX; //send Write operation
TWCR = (1 lt;lt; I2CNT)|(1 lt;lt; TWEN); //do the write operation
While (! (TWCR amp; (1 lt;lt; I2CNT)));
// wait for completion of Write operation
TWDR = PSDAT; //Read the data
TWCR = (1 lt;lt; I2CNT)|(1 lt;lt; TWEN); //start sending
While (! (TWCR amp; (1 lt;lt; I2CNT)));
TWCR = (1 lt;lt; I2CNT)|(1 lt;lt; TWEN)|(1 lt;lt; TWSTO); } //stop
- 总结
当涉及到文本输入,修改数值,液晶显示屏显示以及一些其他的操作。我们通常在传统的单片机控制系统中设计键盘电路,接口和控制程序,不仅占用了硬件资源,同时也消耗了了大量宝贵的软件资源。本文设计了一个PS/2接口电路,并在程序中使用键盘来控制外部中断,这样就会占用较少的系统资源,并且具有更少的成本。本文提供了一种对于多种键盘控制和操作可视化的解决方案。
致谢
我们非常感谢在陈胜功教授对这个项目的合作与支持。
参考文献
[1] Han Xue. Design and Implementation of the Intelligent Home Background Music Controller based on AT89S52. Information Technology 2010:111-112.
[2] Adam Chapweske ed, Roy Show translated. PS/2 Technical Reference 2002:4–19.
[3] Zhang Yifei,Zhang Zhiquan. The application of PS/2 keyboard/mouse in the embedded system. Electrical Automation 2006;2:45-46, 48.
[4] Ma Chao, Zhan Weiqian, Geng Degen. Principles and Applications Manual ATmega8. Beijing Tsinghua University Press
2003:150~153.
[5] Xiao Jianhui,Yuan Yijun. The Application of IIC E2
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[147483],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。