原创 读取D12芯片ID

2007-5-25 12:38 4350 3 3 分类: MCU/ 嵌入式

硬件:哪位大虾做过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.函数这样修改是否正确?是否还有其它函数需要修改?

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条