请帮我看看这个时序图,看我说得对不?

2020-02-04 09:02发布

我看的是发送12位串行数据,从低位开始发送到最高位完,然后LD1,LD2拉低数据被锁存到寄存器中,不知道我说的对不对,不过写出来的程序不能用。请大家帮我分析一下这时序?谢谢了O(∩_∩)O~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
eblc1388
1楼-- · 2020-02-04 09:06
>> 从低位开始发送到最高位完

图中 Bit1 MSB 是指最高位。应先发送。
eblc1388
2楼-- · 2020-02-04 11:49
还须注意每发一位元, 要用下图中的 STBx 把位元存放到 AD7543 的 A 记存器由中, 12位元发送完成後才用 LD1及 LD2移到 AD7543 的 B 记存器中。

AD7543.gif (29.34 KB, 下载次数: 0)

下载附件

2012-4-27 00:02 上传

usk5yenj4id04dm
3楼-- · 2020-02-04 13:55
似乎应是MSB先发.
w1000
4楼-- · 2020-02-04 17:31
 精彩回答 2  元偷偷看……
mkliop
5楼-- · 2020-02-04 17:52
呵呵谢谢大家已经弄好了确实应该是从最高位开始发的。被网上的文章误导了
#include<reg52.h>
sbit LD=P1^0;
sbit STB=P1^1;
sbit CLR=P1^2;
sbit SRI=P1^3;
void delay()
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=100;a>0;a--);
}
void main()
  {
  unsigned char a;
  unsigned int b;
  unsigned int i=4000;
  LD=1;
  STB=1;
  CLR=1;
  SRI=1;
  for(a=0;a<12;a++)
  {
   b=i&0x0800;   
   if(b>0)
   {
            SRI=1;
   }
   else
   {
           SRI=0;
   }
   STB=0;
  delay();
   STB=1;
  delay();
   i=i<<1;
  }
  LD=0;
  delay();
  LD=1;
  delay();
  while(1);
}

这是测试代码
liweiqiang668
6楼-- · 2020-02-04 19:23
mkliop 发表于 2012-4-27 23:38
呵呵谢谢大家已经弄好了确实应该是从最高位开始发的。被网上的文章误导了
#include
sbit LD=P1^0 ...

樓主這部份:
b=i&0x0800;   
   if(b>0)
   {
            SRI=1;
   }
   else
   {
           SRI=0;
   }

如果這樣寫:

SRI=(bit)(i&0x0800)

以上結果會有不同嗎?哪種會更好?

一周热门 更多>