標(biāo)題: HEF4094兩片級(jí)聯(lián),控制16個(gè)繼電器,單片機(jī)發(fā)送數(shù)據(jù)時(shí),最后一位數(shù)據(jù)丟失! [打印本頁(yè)]

作者: lvjie1225    時(shí)間: 2018-9-4 15:10
標(biāo)題: HEF4094兩片級(jí)聯(lián),控制16個(gè)繼電器,單片機(jī)發(fā)送數(shù)據(jù)時(shí),最后一位數(shù)據(jù)丟失!
原理圖如下:

ST_VAV,DIN_VAV,CLK_VAVOE_VAV接單片機(jī),ST_1DIN_1,CLK_1OE_1反邏輯輸出。

問(wèn)題:分兩次發(fā)送8位數(shù)據(jù),最后發(fā)送的那一位數(shù)據(jù)丟失。
例如:(1)發(fā)送高80xFF,低80時(shí),HEF4094輸出0x007F。
(2)發(fā)送高80,低80xFF時(shí),HEF4094輸出0x7F00。


單片機(jī)代碼如下:
#define ST_4094_1 PCout(12)  //PC12
#define OE_4094_1 PDout(2)  //PD2
#define DIN_4094_1 PCout(11)  //PC11
#define CLK_4094_1 PCout(10)  //PC10

void vavle_init(void)  //初始化
{
          //初始化IO
          RCC->APB2ENR|=1<<4;     //使能PORTC時(shí)鐘         控制端口PC10-12
          RCC->APB2ENR|=1<<5;     //使能PORTD時(shí)鐘         控制端口PD2

          GPIOD->CRL&=0XFFFFF0FF;//
          GPIOD->CRL|=0X00000300;//PD2 推挽輸出            
   GPIOD->ODR|=1<<2;      //PD2 輸出高

          GPIOC->CRH&=0XFFF000FF;//
          GPIOC->CRH|=0X00033300;//PC10-12 推挽輸出            
   GPIOC->ODR|=7<<2;      //PC10-12 輸出高

   OE_4094_1=0;          //反邏輯
}

void TransByteTo4094_ElecExpValve1(u8 dat16_09,u8 dat08_01) //2個(gè)HEF4094鎖存16位數(shù)據(jù)   并行輸出,dat16_098位, dat08_018位。
{
  u8 j;
  u8 i,tt;
  CLK_4094_1=1;
  ST_4094_1 =1;
  tt=dat16_09;          //先送高8
  for(i=0;i<8;i++)
  {
    j= tt &(0x01);
         if(j==1)
          { DIN_4094_1=0;}
         else
          { DIN_4094_1=1;}

  CLK_4094_1=1;                        //CLK引腳的上升沿把數(shù)據(jù)送入寄存器
  delay_us(10);
  CLK_4094_1=0;        
  delay_us(10);         

   tt=tt>>1;
  }

  tt= dat08_01;          //再送低8
  for(i=0;i<8;i++)
  {
    j= tt &(0x01);
         if(j==1)
          { DIN_4094_1=0;}
         else
          { DIN_4094_1=1;}

  CLK_4094_1=1;                        //CLK引腳的上升沿把數(shù)據(jù)送入寄存器
  delay_us(10);
  CLK_4094_1=0;        
  delay_us(10);         

  tt=tt>>1;
  }

  ST_4094_1 =1;         //ST引腳把兩個(gè)寄存器的數(shù)據(jù)更新輸出到HEF4094的輸出引腳上并且鎖存起來(lái)
  delay_us(10);
  ST_4094_1 =0;
  delay_us(10);

  CLK_4094_1=1;   //CLK拉低,抗干擾就增強(qiáng)
  ST_4094_1 =1;
  DIN_4094_1=1;
}



作者: 1582588653    時(shí)間: 2018-12-14 11:25
CLK_4094_1=0;                        //CLK引腳的上升沿把數(shù)據(jù)送入寄存器,先低后高才能形成上升沿
  delay_us(10);
  CLK_4094_1=1;        
  delay_us(10);   
作者: 1582588653    時(shí)間: 2018-12-14 11:26
CLK_4094_1=0;                        //CLK引腳的上升沿(先低后高)把數(shù)據(jù)送入寄存器
  delay_us(10);
  CLK_4094_1=1;        
  delay_us(10);   
作者: zl2168    時(shí)間: 2018-12-15 18:50
本帖最后由 zl2168 于 2018-12-15 20:33 編輯

實(shí)例43  CC4094串入并出控制8/16循環(huán)燈
Proteus仿真一下,確認(rèn)有效。
實(shí)例43 CC4094串行輸出控制8-16循環(huán)燈.rar (67.45 KB, 下載次數(shù): 85)

以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1