PS/2接口协议的剖析(2)
作者:佚名; 更新时间:2014-12-05
平,如果时钟线为低,则延时50μs;

  (2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);

  (3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS/2设备发送数据,所以PS/2设备要转移到接收程序处接收数据);

  (4)延时20μs(如果此时正在发送起始位,则应延时40μs);

  (5)输出起始位(0)到数据线上。这里要注意的是:在送出每一位后都要检测时钟线,以确保PC机没有抑制PS/2设备,如果有则中止发送;

  (6)输出8个数据位到数据线上;

  (7)输出校验位;

  (8)输出停止位(1);

  (9)延时30μs(如果在发送停止位时释放时钟信号则应延时50μs);

  通过以下步骤可发送单个位:

  (1)准备数据位(将需要发送的数据位放到数据线上);

  (2)延时20μs;

  (3)把时钟线拉低;

  (4)延时40μs;

  (5)释放时钟线;

  (6)延时20μs。

  3.2 PS/2设备从PC机接收一个字节

  由于PS/2设备能提供串行同步时钟,因此,如果PC机发送数据,则PC机要先把时钟线和数据线置为请求发送的状态。PC机通过下拉时钟线大于100μs来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。当PS/2设备检测到需要接收的数据时,它会产生时钟信号并记录下面8个数据位和一个停止位。主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。而PS/2设备则要配合PC机才能读到准确的数据。具体连接步骤如下:

  (1)等待时钟线为高电平。

  (2)判断数据线是否为低,为高则错误退出,否则继续执行。

  (3)读地址线上的数据内容,共8个bit,每读完一个位,都应检测时钟线是否被PC机拉低,如果被拉低则要中止接收。

  (4)读地址线上的校验位内容,1个bit。

  (5)读停止位。

  (6)如果数据线上为0(即还是低电平),PS/2设备继续产生时钟,直到接收到1且产生出错信号为止(因为停止位是1,如果PS/2设备没有读到停止位,则表明此次传输出错)。

  (7 输出应答位。

  (8) 检测奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出现错误。

  (9)延时45 μs,以便PC机进行下一次传输。

  读数据线的步骤如下:

  (1)延时20μs;

  (2)把时钟线拉低?

  (3)延时40μs?

  (4)释放时钟线?

  (5)延时20μs?

  (6)读数据线。

  下面的步骤可用于发出应答位;

  (1)延时15μs;

  (2)把数据线拉低;

  (3)延时5μs;

  (4)把时钟线拉低;

  (5)延时40μs;

  (6)释放时钟线;

  (7)延时5μs;

  (8)释放数据线。

  4 用于工控机的双键盘设计

  工控机通常要接标准键盘,但是为了方便操作,常常需要外接一个专用键盘。此实例介绍了在工控PC机到PS/2总线上再接入一个自制专用键盘的应用方法。

  该设计应能保证两个键盘单独工作,而且相互不能影响。因此,不能直接把专用键盘和标准键盘一起接到工控PC的PS/2口。鉴于这种情况,本设计使用模拟开关CD4052并通过时分复用工控PC的PS/2口,来使在同一个时刻只有一个键盘有效,从而解决上述问题。其硬件原理图如图3所示。其中P2口和P1口用于键盘扫描电路(图中未画出),P0.0为数据端,P0.1为时钟端,P0.2为模拟开关选通端。由于专用键盘不需要接收工控PC机的命令,所以软件中并不需要写这部分相应的代码。

  通过软件可在专用键盘复位后把P0.2清0,以使模拟开关CD4052打开相应的通道。这时工控PC的标准键盘将开始工作。标准键盘可以完成工控PC刚启动时对外设检测的应答。复位后的专用键盘不停地扫描有没有按键,如果有键按下则识别按键,并且按照预先的设计进行编码,同时调用发送程序并通过PS/2口发送到工控PC。此时模拟开关关闭相应通道(将P0.2置1),信捷职称论文写作发表网,专用键盘接入工控PCPS/2口的时钟线和数据线而工作,但标准键盘被模拟开关从PS/2的时钟线和数据线中断而不工作,这样,双键盘便可时分复用同一个工控PC机的PS/2口。相应的发送子程序如下:

  #define DATAP00 用P0.0做数据线

  #define CLKP01 用P0.1做时钟线

  #define INHIBITP02 用P0.2做CD4052的INH端

  #define PORTRP1 用P1口做读入口

  #define PORTWP2 用P2口做写出口 可以实现64个自定义键

  void send(ucharx)/***function forsend a char da-ta***/

{

uchar i,temp,char

核心期刊快速发表
Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com