MCU向PS2键盘发送数据(2286字)hotpower[1次]2004-9-14 21:45:16
//MCU向PS2键盘发送数据
unsigned char PS2SendData(unsigned char val)
{
unsigned char i;
unsigned int senddata;
EX1 = 0;//关闭PS2键盘中断
senddata = (unsigned int)val;//11位数据需占用2字节
ACC = val;//取累加器以便得到奇偶位P(与PS2的奇校验相反)
if (!P){//P=0 但PS2为奇校验
senddata |= 0x0700;//加入停止位、奇偶位及待读确认位
}
else{
senddata |= 0x0600;//加入停止位、奇偶位及待读确认位
}
ClrWdt();//喂狗(不能在循环中喂!)
PS2CLOCK = 0;//拉低时钟
for (i = 100; i > 0; i --);//拉低时钟100uS以上
PS2DATA = 0;//拉低数据总线
for(i = 11; i > 0; i--){//发送8位数据和1位奇偶位及停止位,读ACK
PS2CLOCK = 1;//释放时钟
while (PS2CLOCK);//等待PS2拉低时钟
PS2DATA = senddata & 0x01;//取数据且发送出去(发送停止位及ACK时发'1')
senddata >>= 1;//发送数据先低后高
CY = PS2DATA;//读ACK信号,最后一次有效
while (!PS2CLOCK);//等待PS2拉高时钟
}
if (CY) val = 0;//失败
else val = 1;//成功
EX1 = 1;//开中断
return val;
}
http://www.daxia.com/bibis/lookgood.asp?lookid=2638
文章评论(0条评论)
登录后参与讨论