ch372+89c2051

大家好! 我的方案是ch372+89c2051实现usb到PS2的转换 但是要模拟读写CH372的时序: 以初始化开始的代码为例: int ch372_init(void) {

unsigned char test; unsigned char temp; int i=0; test= 0X6C;

CH372_INIT_TEST:

_RD=1; A0=1; //ch372_cmd :CMD_CHECK_EXIST _WR=0; P1= CMD_CHECK_EXIST; _WR=1;

_RD=1; A0=0; // ch372_data :写入测试数据 P1=test; WR=0;

P1=0XFF;

_WR=1; A0=0; _RD=0; temp=P1;

if(test!=~temp) goto CH372_INIT_HR; // 测试失败

// 测试通过

//设置USB工作模式 _RD=1; A0=1; _WR=0; P1= CMD_SET_USB_MODE; _WR=1; /设置USB工作模式:参数:02h _RD=1; A0=0; _WR=0; P1= 0x02; _WR=1;

CH372_INIT_WT: //读取操作状态字

_WR=1; A0=0;

temp=P1; _RD=0; _RD=1;

if(temp!=CMD_RET_SUCCESS) //设置中断 goto CH372_INIT_WT; IT0=0; //中断为电平触发 PX0=1; // 设置中断优先级为高 IE0=0; //清除中断标志 EX0=1; //外部中断0容许

return 1;

CH372_INIT_HR: // 测试失败,硬件复位 for(i=0;i<50;i++) {

_RD=1; A0=1; //ch372_cmd :CMD_RESET_ALL _WR=0; P1= CMD_RESET_ALL; _WR=1;

} delay(200000); goto CH372_INIT_TEST; }

为什么开始的第一条命令CHECK_EXIST,ch372就没有反映?当读返回值时,temp=ff; 我测试了硬件电路,没有问题。 是不是我时序模拟的问题? 大家能不能帮我看下?谢谢啦 很急的 :(QQ 472725134

前面部分你改为下面的试试,还有就是返回是FF的话,很大可能是硬件上的问题,你得好好查查硬件。  P1= CMD_CHECK_EXIST;     A0=1;   _RD=1; CS=0; // 片选 _WR=0; //单片机速度快的话,可适当延时 _WR=1; cs=1; A0=0; delay2us(); //延时2微秒左右

P1= test;     _RD=1; CS=0; // 片选 _WR=0; //单片机速度快的话,可适当延时 _WR=1; cs=1; delay2us(); //延时2微秒左右

CS=0; // 片选 _RD=0; temp=P1; CS=1; _RD=1;


只有登录才能回复,可以选择微信账号登录