现正在做USB通信,51+D12系统,主机是PC机,D12的中断通过10K的上拉电阻接在51单片机的INT0,D+通过SoftConnect控制,电路上没有15K上拉电阻.USB总线供电,通过周公的仿真器调试发现,只要将USB线插入PC即U口,进行仿真时必然进中断,此时SoftConnect还没有打开,既此位还是上电复位值.接着继续调试,只要不断电,就不会再进中断.但是只要重新断电再上电,还是会进中断.请教这个问题是不是正常的?如果正常,一般是什么引起的中断?<br /><br /><br />还有个问题:SoftConnect设置后,既软件连接PC机后,发现51并不进中断,既表示SoftConnect没有起作用,现在怀疑是读写寄存器有问题.或者其他问题,望大侠指点.现把读写函数贴出来.51时钟频率是20M.<br /><br />void write_D12_command(unsigned char D12_command) //写USB命令<br />{<br /> unsigned char tmp;<br /> for (tmp=0;tmp<250;tmp++); //TWC 写周期 低时间 最小500ns<br /> D12_A0=D12_COMMAND_ADD;<br /> for (tmp=0;tmp<130;tmp++); //TAVWL A0 有效到WR_N 低时间 最小130ns <br /> D12_DATA=D12_command;<br /> D12_WR=0;<br /> for (tmp=0;tmp<20;tmp++); //WR_N 低脉宽 最小20ns <br /> D12_WR=1;<br /> for (tmp=0;tmp<10;tmp++); //TWDH 写数据保持时间 最小10ns <br /> D12_DATA=0xFF;<br />}<br /><br />void write_a_D12_data(unsigned char D12_data) //写一字节USB数据<br />{<br /> unsigned char tmp;<br /> for (tmp=0;tmp<250;tmp++); //TWC 写周期 低时间 最小500ns <br /> D12_A0=D12_DATA_ADD;<br /> for (tmp=0;tmp<130;tmp++); //TAVWL A0 有效到WR_N 低时间 最小130ns <br /> D12_DATA=D12_data;<br /> D12_WR=0;<br /> for (tmp=0;tmp<20;tmp++); //WR_N 低脉宽 最小20ns <br /> D12_WR=1;<br /> for (tmp=0;tmp<10;tmp++); //TWDH 写数据保持时间 最小10ns <br /> D12_DATA=0XFF;<br />}<br /><br />unsigned char read_a_D12_data(void) //读一字节USB数据<br />{<br /> unsigned char temp,i;<br /> for (i=0;i<250;i++); //TRC 读周期 最小500ns <br /> D12_A0=D12_DATA_ADD;<br /> for (i=0;i<10;i++); //TAVRL A0 有效到RD_N 低时间最小0ns <br /> D12_RD=0;<br /> for (i=0;i<10;i++); //TRLDD RD_N 低到数据驱动时间 最大20ns <br /> temp=D12_DATA;<br /> for (i=0;i<10;i++); //TRL RD_N 低脉宽 最小20ns <br /> D12_RD=1;<br /> return temp;<br />} |
|