登录
首页 单片机论坛
回帖 发帖
正文

主题:串行口和键盘口通讯接口的单片机实现[转帖]

点击:7422 回复:3

串行口和键盘口通讯接口的单片机实现
龚荣盛 张阿卜
(厦门大学自动化系,厦门 361005)

摘  要:在某些特殊控制场合,需要通过主控机的串行口和受控机的PS/2键盘口,实现主控机对受控机的模拟键盘输入。本文介绍了串行口和键盘口的通讯接口的软、硬件设计方法。
关键词:串行口  PS/2键盘口  通讯  单片机
键盘作为微机的基本输入设备,是微机不可缺的一部分。但在某些特殊的场合,我们要对受控机进行程序设计的特殊输入控制,则需要一接口实现串行口和PS/2键盘口通讯,这样在主控机上通过对串行口的编程就能实现对受控机的模拟键盘输入。笔者开发的该接口以MCS-51单片机为核心,原理图如图1所示,利用MCS-51的全双工异步串行I/O口实现与主控机的异步串行通讯,而和受控机PS/2键盘口的同步串行通讯则通过双向数据I/O口控制同步时钟和数据位。
.1.和主控机的异步串行通讯
异步通讯按帧传送数据,它利用每一帧的起、止信号来建立发送与接受之间的同步,每帧内部各位均采用固定的时间间隔,但帧与帧之间的时间间隔是随机的。其基本特征是每个字符必须用起始位和停止位作为字符开始和结束的标志,它是以字符为单位一个个发送和接收的。
1.1硬件接口设计
与主控机的异步串行通讯基于RS-232总线标准。为了使接口具有更好的兼容性和工作稳定性,我们用MAX232E作为数据传送器。MAX232E是专为RS-232通讯而设计,低功耗,外接电容小,抗干扰能力强,管脚有ESD保护并且能支持到120k波特率的数据传输,能很好地解决PC机和单片机电平不匹配问题。同时它增强了数据驱动能力,能支持12米的串行线。
1.2软件接口设计
异步通讯必须在字符格式中设置起始位和结束位,以使收发双方取得同步。其数据格式为1位起始位+8位数据位+奇偶校验位+1位或2位的停止位。其中起始位为低电平,数据位传送时先低后高,停止位为高电平。笔者在电路板上设计了异步串行通讯跳线,可设置通讯的波特率、奇偶校验位和停止位,在单片机软件的开始读取跳线设置值而后初始化串行口,从而支持多种通讯数据格式。
PC机启动时将向串行口发送两个字节的00H以检测串行口,同时防止主控机上的串行口其他的干扰信息,通讯时笔者设计的报文以A0H,CDH作为联络信息开头,第三字节为数据长度,之后为我们要传送的数据,这样有效地过滤掉干扰信息。单片机按串行口中断方式接收主控机的数据,收到有效格式的数据后,解析报文,提取出真实的数据,传送给受控机的PS/2口。
2.和受控机的同步串行通讯
同步通讯以发送端和接收端使用同一时钟信号来同步,在时钟脉冲的作用下同步地收发数据。该接口与受控机之间通过标准的六芯PS/2键盘插头相连接。其信号线包括:一根时钟线、一根数据线、一根地线和一根给单片机供电的电源线,还有两根空线。所传输的每一字符由11位组成:1位起始位,8位数据位,1位奇偶校验位和1位停止位。这11位数据在时钟脉冲的同步作用下,实现数据的传送,传送的信号低位在前。由于只有一根数据线和时钟线,所以,任何时刻只能有一方发送数据。无通讯时,时钟线和和数据线都设为高电平的初始状态。受控机上的键盘接口通过设置数据线和时钟线的状态,指导模拟键盘的通讯接口收发数据:
(1).时钟线为低电平,禁止传送数据。
(2).时钟线为高电平,数据线为低电平,通知模拟键盘接收命令。
(3).时钟线和数据线都为高电平,允许模拟键盘发送数据
单片机的+5V电源由受控机通过PS/2键盘插头的电源线提供,同时将两个I/O双向数据口分别作为同步时钟线和数据线,与受控机进行通讯。
2.1发送数据
首先检测时钟线和数据线的状态,当两者都为高电平时,开始传送数据。每传送一位,时钟同步地产生一个脉冲。当受控机收到该脉冲后,将时钟线置成低电平并保持一段时间,禁止发送方继续发送,以便于检验数据正确性,数据校验采用偶校验。因此建议在每个字符的发送间隔有一定的延时。以下为笔者编写的发送寄存器A的八位数据给受控机PS/2口的子程序。

SendToPs:                                            MOV KEY,C        ;发送一位数据
    JNB CLOCK,$    ;等待至时钟线为1              ACALL DELAY10
    JNB KEY,$       ;等待至数据线为1              
                                                    CLR CLOCK         ;同步信号产生一个脉冲
    CLR KEY         ;数据线置0                   ACALL DELAY30
    ACALL DELAY10  ;延时10us                    SETB CLOCK
    CLR CLOCK      ;时钟线置0                   DJNZ R1,TC         ;共发送8位数据位和
    ACALL DELAY30  ;延时30us                                       ;1位偶校验位
    SETB CLOCK     ;时钟线置1开                ACALL DELAY10
                     ;始发送起始位                ACALL DELAY10
    MOV R1,#9                                     SETB KEY           ;发送停止位
    MOV C,P         ;奇校验->C                 ACALL DELAY10
    CPL C            ;偶检验->C                 CLR CLOCK
TC:                                                ACALL DELAY30
    ACALL DELAY10                               SETB CLOCK
    ACALL DELAY10
    RRC A                                        RET
     
2.2接收数据
在特殊场合,例如开机键盘自检时,PC机会向PS/2键盘口发送自检命令,如果无响应则无法通过硬件检测而无法启动操作系统。因此在受控机开机时,单片机上电复位,在单片机应能接收到键盘的命令并作出响应。如果一秒后没收到,则受控机的CMOS设置忽略键盘自检,单片机不作响应继续执行下面的程序。
PC机复位键盘过程:先发复位命令FFH,单片机收到以FAH应答,PC机收到后,置时钟线和数据线为高电平,单片机检测到此状态开始内部自测试,测试完成发送AAH表示自检结束,否则发FDH表自检出错。
3.编码格式
实际的标准键盘在有按键按下时,键盘向PC机发送两行编码,一组为键稳定闭合时的扫描码,一组为闭合健断开时的断开码。具体各键的扫描码可以查询有关资料,断开码为两个字节,等于F0H+该键的扫描码。主控机通过通讯接口向受控机进行模拟键盘输入时,向串行口发送的编码单片机提取后发送给受控机的PS/2口,因此主控机向串行口发送的编码应符合下列格式:
主控机向受控机模拟输入字符a,即按下a键(扫描码为1CH):A0H,CDH,03H,1CH,F0H,1CH,如果模拟输入大写A,即按住Shift键(扫描码为12H)和a键:A0H,CDH,06H,12H,1CH,F0H,1CH,F0H,12H。
该通讯接口目前已形成初步产品提供给软件开发商,其体积小、硬件成本低、工作稳定且兼容性好,有较好的实用前景。

参考文献:
[1]  李大友:微型计算机接口技术,清华大学出版社,1998
[2]  余锡存 曹国华:单片机原理及接口技术,西安电子科技大学出版社,2000
[3]  熊宁 王景波:微机键盘通信发式及其编程,宁夏大学学报(自然科学版),第18卷第4期
03-03-02 22:08
求教:
     PC机发送的时候为1位起始位+8位数据位+1为奇偶校验位+2位停止位=12位
     而单片机接受时只接收9位.
     该怎么处理呢
04-07-29 11:23
"原理图如图1"没有啊
04-07-29 11:38
谁有基于80C51的单片机串口通信的论文啊? 救救我啊,我要整课程设计,小妹现在什么都还不懂,不晓得怎么弄啊。
08-06-30 09:21

工控新闻

更多新闻资讯