USB论坛-百合电子工作室USB专题站

 找回密码
 我要注册
搜索
热搜: USB学习板
查看: 4517|回复: 3
打印 上一主题 下一主题

程序理解

[复制链接]

3

主题

0

好友

75

积分

注册会员

Rank: 2

跳转到指定楼层
楼主
发表于 2014-6-17 18:19:32 |只看该作者 |倒序浏览
void outportcmd(unsigned char value)
{
        *((unsigned char xdata *)D12_COMMAND)=value;
}
这是USB固件程序里的一个写命令函数,硬件上讲A0口接地了,没有进行数据/命令的选择,D12_COMMAND的值是0XFF02,我想知道以上的这个函数与
void outportb(INT16U Addr, INT8U Data)
{
        if(Addr == D12_COMMAND)        //命令
        {
                bD12_A0                = 1;
        }
        else if(Addr == D12_DATA)        //数据
        {
                bD12_A0                = 0;
        }
        else                                                                //出入  01
        {
        }
        ucD12_DataPort        = Data;
        bD12_WR                = 0;         //使有效         数据立即被读取
        bD12_WR                = 1;          
}

效果是一样的吗?D12_COMMAND表示地址的话,写到哪去了,求管理员解答一下,谢谢!
回复

使用道具 举报

6

主题

0

好友

1158

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2014-6-19 16:22:55 |只看该作者
A0不能接地哦,向D12写的数据有可能是命令,有可能是数据,所以A0不能接地的
回复

使用道具 举报

3

主题

0

好友

75

积分

注册会员

Rank: 2

板凳
发表于 2014-6-20 10:02:35 |只看该作者
baiheee 发表于 2014-6-19 16:22
A0不能接地哦,向D12写的数据有可能是命令,有可能是数据,所以A0不能接地的

您好!我还是有点不理解,*((unsigned char xdata *)D12_COMMAND)=value这个函数的作用跟您的那个效果应该是一样的,但是他是直接写数据命令到地址,没有选择A0口,这样也可以的吗?
回复

使用道具 举报

6

主题

0

好友

1158

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2014-7-8 13:34:48 |只看该作者
pwench 发表于 2014-6-20 10:02
您好!我还是有点不理解,*((unsigned char xdata *)D12_COMMAND)=value这个函数的作用跟您的那个效果应该 ...

A0是必须要控制的,你仔细看D12的数据手册就会明白。另外,本站上给出的USB开源项目里的代码也可以看出是控制了A0的,向D12写入数据或命令的实现代码如下:
[code=cpp]/************************************************************
** 函数名称: outportb()
** 功能描述: 向D12写入数据或命令
** 输   入: INT16U Addr:  命令地址或数据地址
** INT8U Data:    命令或数据
** 输   出: 无
************************************************************/
void outportb(INT16U Addr, INT8U Data)
{
  if(Addr == D12_COMMAND)  //命令
  {
    bD12_A0    = 1;
  }
  else if(Addr == D12_DATA)  //数据
  {
    bD12_A0    = 0;
  }
  else
  {
  }
  ucD12_DataPort  = Data;
  bD12_WR    = 0;
   bD12_WR    = 1;  
}[/code]

你再看看此开源项目的电路图,D12的A0脚是和单片机IO相连的,并没有接地!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

USB开发网 (渝ICP备09006681号-4)

GMT+8, 2024-4-26 23:59 , Processed in 0.053801 second(s), 18 queries .

百合电子工作室版权所有
回顶部