原创 AVR单片机I/O口读74HC165接口程序

2014-6-21 15:25 1105 10 10 分类: 工程师职场

 

*******************************/

  #include<avr/io.h>

  #define SER_IN PD3

  #define SER_CK PB2

  #define SER_SL PB3

  uint16_t SerIn(void)

  {

  uint16_t ret=0,i;

  //数据锁存,在shift/load输入一脉冲

  PIO_CTL_PORT&=~_BV(SER_SL);

  __asm__ volatile("nop");

  __asm__ volatile("nop");

  PIO_CTL_PORT|=_BV(SER_SL);

  __asm__ volatile("nop");

  __asm__ volatile("nop");

  //读数据

  for(i=0;i<16;i++)

  {

  ret<<=1;

  if(PIND & _BV(SER_IN))

  ret|=1;

  PIO_CTL_PORT&=~_BV(SER_CK);

  __asm__ volatile("nop");

  PIO_CTL_PORT&=~_BV(SER_CK);

  PIO_CTL_PORT|=_BV(SER_CK);

  __asm__ volatile("nop");

  PIO_CTL_PORT&=~_BV(SER_CK);

  }

  PIO_CTL_PORT&=~_BV(SER_CK);

  return ret;

  }

  //IO初始化

  void IoInit(void)

  {

  //输入口初始化成高阻态

  DDRD&=~_BV(SER_IN);

  PORTD&=~_BV(SER_IN);

  //两个控制口初始化

  PORTB |= _BV(SER_SL);

  DDRB |= _BV(SER_CK)|_BV(SER_SL);

  //....其它初始化操作....

  }

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条