mkliop 发表于 2012-4-26 23:05:07

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

我看的是发送12位串行数据,从低位开始发送到最高位完,然后LD1,LD2拉低数据被锁存到寄存器中,不知道我说的对不对,不过写出来的程序不能用。请大家帮我分析一下这时序?谢谢了O(∩_∩)O~

eblc1388 发表于 2012-4-26 23:44:07

>> 从低位开始发送到最高位完

图中 Bit1 MSB 是指最高位。应先发送。

eblc1388 发表于 2012-4-27 00:02:54

还须注意每发一位元, 要用下图中的 STBx 把位元存放到 AD7543 的 A 记存器由中, 12位元发送完成後才用 LD1及 LD2移到 AD7543 的 B 记存器中。

usk5yenj4id04dm 发表于 2012-4-27 16:36:58

似乎应是MSB先发.

w1000 发表于 2012-4-27 16:47:45

先发高位
STB1,2,4,是输出脉冲的吧。12位都传好了,/LD1,2才会输出一个低电平的。
(AD7543没用过。)

mkliop 发表于 2012-4-27 23:38:53

呵呵谢谢大家已经弄好了确实应该是从最高位开始发的。被网上的文章误导了{:tongue:}
#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 发表于 2012-4-28 15:53:52

mkliop 发表于 2012-4-27 23:38 static/image/common/back.gif
呵呵谢谢大家已经弄好了确实应该是从最高位开始发的。被网上的文章误导了
#include
sbit LD=P1^0 ...

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

如果這樣寫:

SRI=(bit)(i&0x0800)

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

mkliop 发表于 2012-4-28 23:05:22

liweiqiang668 发表于 2012-4-28 15:53 static/image/common/back.gif
樓主這部份:
b=i&0x0800;   
   if(b>0)


{:lol:} 看不懂谁来解释一下

liweiqiang668 发表于 2012-4-30 21:29:50

mkliop 发表于 2012-4-28 23:05 static/image/common/back.gif
看不懂谁来解释一下

将娈量i与0x800运算,将i 的低11位屏蔽,取最高位,再将它放入b,此时如果i 的最高位为1则运算后结果为100000000000H,反之如最高位为0,测运算后为000000000000H.
页: [1]
查看完整版本: 请帮我看看这个时序图,看我说得对不?