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