打印

CD4094时序图疑问?求大侠帮解答!!

[复制链接]
4410|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fleshyao|  楼主 | 2011-9-9 00:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fleshyao 于 2011-9-9 00:25 编辑

按4094的时序图
1)STB=0  
2) CLK=0时准备好一位DAT --->  CLK=1, 送出这位DAT   --->  
3) CLK=0时准备好又一位DAT --->  ……   
4)STB=1 ,送到输出,    STB=0,待命
3片CD4094级联(9脚做级联输出)程序如下:
#include <STC12C5A60S2.h>
#include<INTRINS.H>
typedef unsigned char uchar;
sbit  CD4094_DAT = P2^2;
sbit  CD4094_CLK = P2^0;
sbit  CD4094_STB = P2^1;

void delayms()
{
      unsigned char i,j;
      for(i=0;i<200;i++)
      for(j=0;j<10;j++)
       _nop_();
}

void TransByteTo4094(uchar dat)
{
  uchar count,i;
  count = 8;
  do
  {
       CD4094_STB =0;   
        i = dat &(0x80);
        if (i==0)
              CD4094_DAT=0;
       else
               CD4094_DAT=1;
        dat = dat <<1;
        CD4094_CLK=1;     
        delayms(); //延时12ms
         CD4094_CLK=0;
         delayms();//延时12ms

    count--;
  }while(count != 0);
    CD4094_STB =1;
}

main()
{
   TransByteTo4094(0x55);
   TransByteTo4094(0x18);
   TransByteTo4094(0xaa);
   CD4094_STB =1;
  while(1)
  {
  }
   
}
程序中的延时是否过长,如何计算延时时间,还是不用延时。?dat = dat <<1;
和CD4094_CLK=1; 的顺序是否要注意啊?请大侠们指导下!!

相关帖子

沙发
fleshyao|  楼主 | 2011-9-9 00:16 | 只看该作者
程序中的延时 delayms();过长会有什么后果啊 电路是CD4094驱动MOC3041+BTA16

使用特权

评论回复
板凳
fleshyao|  楼主 | 2011-9-9 00:18 | 只看该作者
能详细介绍下CD4094的时序图吗 ?

使用特权

评论回复
地板
dengm| | 2011-9-9 10:03 | 只看该作者
本帖最后由 dengm 于 2011-9-9 11:12 编辑

1)STB=0  
2) CLK=0,  Q7 shift t0 Q7'
3)   准备好一位DAT   
4) CLK=1, cd4094 shift,  loop to step 2 until last bit  
5)STB=1 , 送到输出,    STB=0,待命

使用特权

评论回复
5
airwill| | 2011-9-9 10:07 | 只看该作者
程序中的延时的确过长了, 如果硬件没有什么问题的话, 过长对信号没有什么影响. 只是你的软件处理不了其他的任务了.
其实, 延时 几个 uS 就可以了.

另外,
1. STB =0 后没有延时, 这个可能会有问题.
2. DAT 改变后, 到 CLK 置1, 之间也没有延时, 这个延时很重要!
不妨这样改一下

void TransByteTo4094(uchar dat)
{
  uchar count,i;
       CD4094_STB =0;   
        delayms();//延时12us
  count = 8;
  do
  {
        i = dat &(0x80);
        if (i==0)
              CD4094_DAT=0;
       else
               CD4094_DAT=1;
        dat = dat <<1;
        delayms();//延时12us
        CD4094_CLK=1;     
        delayms(); //延时12us
         CD4094_CLK=0;
  }while(--count);
    CD4094_STB =1;
}

使用特权

评论回复
6
fleshyao|  楼主 | 2011-9-9 11:41 | 只看该作者
谢谢各位的讲解!!

使用特权

评论回复
7
likeliao| | 2011-9-15 15:57 | 只看该作者
建议看芯片的具体时序图 图上往往会标出  时间最少 和最大是多少! 按照要求延时

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

45

帖子

0

粉丝