最近制作工控机键盘和鼠标,编程中想要查看一下通用的键盘和鼠标是如何与PC机通讯的。
于是仿照串口监控程序编写了一个PS/2监测程序。类似PS2逻辑分析仪的作用。
通过这个软件既可以读取PC机发给鼠标键盘的数据,也可以同时读取到鼠标键盘上传的数据,作对比分析PS2协议。
源码贴在这里,供开发PS2参考:
//用单片机跟踪 PS2通讯协议
//Keil C51
//MCU:89C52 @22.1184Mhz
//
//2009-3-15
//sbit H_DATA = P3^0; //连接PS/2键盘插头(公头)的管脚Pin1
//sbit H_CLK = P3^2; //连接PS/2键盘插头(公头)的管脚Pin5
//连接PS/2键盘插头(公头)的管脚Pin3 GND
//PS/2键盘鼠标插头(公头)朝向你自己,从左上角开始,依次是管脚5-3-1-2-4-6
//其中,Pin3是GND,Pin4是Vcc(+5V)
//CLK最大的时钟频率是33kHz ,大多数设备工作在10-20kHz,通常设计为12.5KHz (相当于串口的1200波特率)。
//
//
//
#include <reg52.h>
#define BYTE unsigned char
sbit H_DATA = P3^0;
sbit H_CLK = P3^2;
unsigned char tab_dat1[20],tab_dat2[20];
unsigned char tab_dat_i1=0,tab_dat_i2=0;
//延时
void Delay10us(void) //22.1184Mhz,6T
{
unsigned char a,b;
for(b=3;b>0;b--)
for(a=4;a>0;a--);
}
//---------------------------------------------------------------------------
void ExternInterrupt0(void) interrupt 0
{
bit ParityBit=0,CLKFlag=1;
BYTE i=0,j=8,dat1=0x00, dat2=0x00;
EX0=0; //禁止中断
//读取起始位
while(H_CLK==0); //等待,直到CLK为高
//这时读DATA,应该总是=0
while(H_CLK==1); //等待,直到CLK为低
//接收8位数据
for(i=0;i<8;i++)//read 8bit
{
dat2=dat2>>1;
if(H_DATA)dat2|=0x80;
while(H_CLK==0); //等待,直到CLK为高
dat1=dat1>>1;
if(H_DATA)dat1|=0x80; //数据线为高电平时,最高位置1(按位或运算“1000 0000”),否则为0
while(H_CLK==1); //等待,直到CLK为低
}
if (tab_dat_i1<20) tab_dat1[tab_dat_i1++]=dat1;
if (tab_dat_i2<20) tab_dat2[tab_dat_i1++]=dat2;
//读取奇偶校验位
while(H_CLK==0);
Delay10us();
if(H_DATA)ParityBit=1;
else ParityBit=0;
while(H_CLK==1);
//读取停止位
while(H_CLK==0); //等待,直到CLK为高
//这时读DATA,应该总是=1
//延时等待,因为停止位之后可能存在ASK位或者PC拉低时钟抑制通讯现象
//最多会有2~3个周期,每个周期不超过100us
for(i=0;i<5;i++) //循环延时,50us
{
if(H_CLK==0) i=0; //从时钟位复位之后计时
Delay10us();
}
IE0=0;
EX0=1;
return ;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void PS2Init(void)
{
IT0=0; //低电平触发中断
PX0=1;
EX0=1;
EA=1;
}
char code dx516[3] _at_ 0x003B; //仿真器要求的语句,指定起始地址
void main(void)
{
H_CLK=1;
H_DATA=1;
PS2Init(); //开中断
while(1);
}
使用方法:
硬件接线:将标准键盘的连接线剖开,PS2_Pin3连接MCU的GND,PS2_Pin1连接P3.0,PS2_Pin5连接P3.2;
软件,在仿真机上运行,查看数组变量的内容tab_dat1[]和tab_dat[];
没有仿真机,可以将数组内容通过RS232上传到PC的串口监控窗口查看。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>