找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4087|回复: 0
收起左侧

PDIUSBD12的时序图的相关分析与说明

[复制链接]
ID:94349 发表于 2015-11-10 01:38 | 显示全部楼层 |阅读模式
以下的仅是D12相关时序的操作:
时序图如下:

说明:
图中,CS_N为片选信号,此处的意思为当屁安讯信号为低时,下面的操作才有意义。由于板子上直接将CS_N固定接地,所以其一直保持为低电平,因此程序不用管CS_N。
A0为地址线,用于选择是出传输地址还是传输数据,
A0为1时,表示操作的是命令
A0为0时,表示操作的是数据
WR_N是写信号,,表示WR_N的上升沿将数据写入到芯片中。数据必须在上升沿前后稳定的保持一段时间才能可靠的写入。


我们模拟出来的时序必须要满足这些条件才能正确的操作硬件

RD_N是读选通信号,在读数据时,需要先将RD_N置低,等待一段时间后,数据将出现自数据总线DATA【7..0】上,这是可以读取数据,读取完毕后,将RD_N置高,数据总线上的数据将在一定时间后消失。

有以上分析得出
写命令的操作为
现将A0置高(即设置为命令状态),再将WR_N置低,把需要发动送的命令放在数据总线上,再讲WR_N置高,这样,场上一个上升沿,从而把数据写入到D12中。写完命令后,需将总线设置为输入状态避免冲突!
写数据的操作位:
现将A0置低(即设置为数据状态),再将WR_N置低,把需要发动送的命令放在数据总线上,再讲WR_N置高,这样,场上一个上升沿,从而把数据写入到D12中。写完命令后,需将总线设置为输入状态避免冲突!

最终的写命令函数代码如下:
void D12WriteCommand(uint8 command)
{
   D12SetCommandAddr();     //设置为命令地址
   D12ClrWr();                     //WR置低
   D12SetPortOut();               //将数据口设置为输出状态
   D12SetData(command);     //输出命令到数据口上
   D12SetWr();                     //WR置高
   D12SetPortIn();                //将数据口设置为输入状态,   以备以后使用
}

读数据函数代码如下:
uint8 D12ReadByte(void)
{
    uint8temp;           
   D12SerDataAddr();     //设置为数据地址
   D12ClrRD();              //RD置低
   trmp=D12GetData();   //读回数据
   D12SetRD();             //RD置高
    returntemp;             //返回读到的数据
}

通过上面可知,已经有读和写的代码。,这样就可以读取D12的ID号了
D12的ID号的读取命令为0XFD,可定义宏:#define Read_ID 0XFD,在程序中直接食用即可
程序代码如下:
uin16 D12ReadID(void)
{
    uint16id;
   D12WriteCommand(Read_ID);        //写ID命令
   id=D12ReadByte();                       //读回ID号低字节
   id|=((uint16)D12ReadByte())<<8;    //读回ID号高字节
    returnid;
}

最后,需要验证一下ID号是否正确,读取并显示代码如下
id=D12ReadID();
printf("you D12 Chip's ID is:  ");
if(id==0X1012)
{
    printf("IDis correct! Congratulations!");
}
else
{
    printf("IDis incorrect! What apity!!");   
}
到此为止,本文主要是想说一下D12的时序问题,后面的相关知识在验证前面时序是否正确!!其中相关图片截于圈圈
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表