请帮我看看这个时序图,看我说得对不?
我看的是发送12位串行数据,从低位开始发送到最高位完,然后LD1,LD2拉低数据被锁存到寄存器中,不知道我说的对不对,不过写出来的程序不能用。请大家帮我分析一下这时序?谢谢了O(∩_∩)O~ >> 从低位开始发送到最高位完图中 Bit1 MSB 是指最高位。应先发送。 还须注意每发一位元, 要用下图中的 STBx 把位元存放到 AD7543 的 A 记存器由中, 12位元发送完成後才用 LD1及 LD2移到 AD7543 的 B 记存器中。
似乎应是MSB先发. 先发高位
STB1,2,4,是输出脉冲的吧。12位都传好了,/LD1,2才会输出一个低电平的。
(AD7543没用过。) 呵呵谢谢大家已经弄好了确实应该是从最高位开始发的。被网上的文章误导了{: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);
}
这是测试代码 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)
以上結果會有不同嗎?哪種會更好? liweiqiang668 发表于 2012-4-28 15:53 static/image/common/back.gif
樓主這部份:
b=i&0x0800;
if(b>0)
{:lol:} 看不懂谁来解释一下
mkliop 发表于 2012-4-28 23:05 static/image/common/back.gif
看不懂谁来解释一下
将娈量i与0x800运算,将i 的低11位屏蔽,取最高位,再将它放入b,此时如果i 的最高位为1则运算后结果为100000000000H,反之如最高位为0,测运算后为000000000000H.
页:
[1]