12
返回列表 发新帖
楼主: l546863256

[其他] PS/2开机自检无法成功???

[复制链接]
  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 2924 天

    连续签到: 15 天

    [LV.Master]伴坛终老

    23

    主题

    4139

    帖子

    82

    金牌会员

    Rank: 6Rank: 6

    积分
    13767
    最后登录
    2025-7-20
    发表于 2017-5-18 17:26:37 | 显示全部楼层
    主机随时都可能打断发送,所以在每个字节发送前,必须判断主机没有请求。只有主机不占用总线时,才允许从机发送。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-2-4 16:14
  • 签到天数: 139 天

    连续签到: 1 天

    [LV.7]常住居民III

    14

    主题

    212

    帖子

    0

    高级会员

    Rank: 4

    积分
    881
    最后登录
    2021-2-4
     楼主| 发表于 2017-5-18 18:34:42 | 显示全部楼层
    toofree 发表于 2017-5-18 17:25
    不要在manage()中发送数据,这个里面你写BUF或FIFO。然后在主循环中发送。

    while (true)    //PTE24 作为时钟线;  PTE25  作为数据线
        {
                    if ( Wait_PS2_PC() )  //检查数据线是否被拉低,低:有数据,准备接收;高:无数据,不用接收
                    {
                            order = receive_byte();  //接收电脑的数据,保存到unsigned char类型中
    //                        manage( order );               //回复电脑命令,现在直接在主函数中实现
                            if ( ( ( GPIOE->PDIR>>24 ) == 0x01 ) && ( ( GPIOE->PDIR>>25 ) == 0x01 )  )    //判断时钟线和数据线都为高电平,表示主机没有请  //求发送数据,此时时钟线和数据线都是空闲的
                            {
                                    switch( order )
                                    {
                                            case 0xFF:  // 主机通知设备复位
                                                    send_byte( 0xFA );
                                                    send_byte( 0xAA );
                                                    send_byte( 0x00 );
                                                    break;
                                            case 0xF2:  // 主机通知设备获得ID
                                                    send_byte( 0xFA );
                                                    send_byte( 0x00 );
                                                    break;
                                            case 0xF4:  // 使能数据报告
                                                    send_byte( 0xFA );
                                                    break;
                                            case 0xF5:  //禁止数据报告
                                                    send_byte( 0xFA );
                                                    break;
                                            case 0xE9:  //主机通知设备告诉状态信息
                                                    send_byte( 0xFA );
                                                    send_byte( 0x00 );
                                                    send_byte( 0x02 );
                                                    send_byte( 0x64 );
                                                    break;
                                            case 0x55:
                                                    send_byte( 0xFE );
                                                    break;
                                            default:  //其它命令默认都回复0xFA
                                                    send_byte( 0xFA );
                                                    break;
                                    }
                            }
                    }


    按照这样改之后,试验了还是不行。
    下面是我51单片机的代码,实验已经成功:
    while(1)
            {       
                    /* 实现开机自检 */       
                    if(!mouse_data)   //检测数据线为低,说明有数据
                {
                        order=receive_byte();    //接收电脑的数据
                        manage(order);             //回复电脑命令
                }   
           }

    ps2技术参考(中文).pdf

    666.66 KB, 下载次数: 2, 下载积分: 威望 1

    PS/2参考资料

    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 08:43 , Processed in 0.084472 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表