lingyun007
驱动牛犊
驱动牛犊
  • 注册日期2004-05-13
  • 最后登录2007-09-27
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:994回复:1

关于D12,这一个星期来的调试结果,仍找不出原因,请论坛里的大虾指点迷津!

楼主#
更多 发布于:2004-12-31 14:01
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.函数这样修改是否正确?是否还有其它函数需要修改?
yyouking
驱动老牛
驱动老牛
  • 注册日期2003-12-18
  • 最后登录2020-04-28
  • 粉丝0
  • 关注0
  • 积分967分
  • 威望114点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-01-01 15:26

我觉得还是直接买个开发板比较方便
我觉得http://devking.51.net/不错
提供: AT89S52+D12开发套件 W78E54+Sl811HST单片机读写U盘套件 PL2303HX-串口转USB 网站http://www.devking.cn 联系 sl811hs@yahoo.com.cn QQ:14441292
游客

返回顶部