阅读:994回复:1
关于D12,这一个星期来的调试结果,仍找不出原因,请论坛里的大虾指点迷津!
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.函数这样修改是否正确?是否还有其它函数需要修改? |
|
沙发#
发布于:2005-01-01 15:26
我觉得还是直接买个开发板比较方便 我觉得http://devking.51.net/不错 |
|
|