硬件:哪位大虾做过D12的请看过来! [lingyun007] 2004-12-31 16:08:47
D12作为一个元器件,他的部分控制功能是有单片机来控制,也就是说单片机能够访问 D12,并能够控制它! 传统的接法是把D12挂到单片机的地址总线上,通过总线形式来进行数据的传输,这样的通 讯速度无疑也接近USB1.1通讯协议的标准。但是也可以把D12的数据端挂在单片机的I/O 口,用I/O口来读写D12芯片,这样的接法在I/O口资源受限制的条件下也是合理的,当然通 讯速率不如总线形式,我采用的是后一种接法,但是很郁闷的是,调试了一个星期,仍然 访问不了D12,所以请各位高手在这里讨论WHY会这样? 小弟是这样接法,把数据端口接单片机的P3口,A0接P0.3,WR接P0.5,RD接P0.7,SUSPEND 接P0.4,CS和ALE接地,读写函数如下: //输出数据 void outportb(unsigned int Addr, unsigned char Data) { if (Addr==D12_COMMAND) D12A0=1; else D12A0=0; _nop_(); _nop_(); D12WR=0; _nop_(); _nop_(); P3=Data; _nop_(); _nop_(); //*((unsigned char xdata *) Addr) = Data; D12WR=1; _nop_(); }
//输入数据 unsigned char inportb(unsigned int Addr) { unsigned char mydata; if (Addr==D12_COMMAND) D12A0=1; else D12A0=0; _nop_(); P3=0xff; _nop_(); D12RD=0; _nop_(); _nop_(); mydata=P3; _nop_(); _nop_(); D12RD=1; _nop_(); return mydata; //return *((unsigned char xdata *) Addr); } 但是在主程序刚刚运行的时候,我调用 outportb(D12_COMMAND, 0xFD); ACC=inportb(D12_DATA); ACC=inportb(D12_DATA); FD是读取D12的ID,理论上应该是12 10,为什么单步执行观察ACC的内容,结果全都是FF, 也就是说跟本没有对D12芯片读写过.(并没有接上计算机的USB,设备是自供电的) 1.请问我这样连接为什么不能访问D12?可能会是什么原因? 2.函数这样修改是否正确?是否还有其它函数需要修改?
|
文章评论(0条评论)
登录后参与讨论