AVR单片机I/O口读74HC165接口程序
来源: 芯艺工作室
本站广告
  ENC28J60+uIP DHCP动态获取IP及UDP广播服务端示例
  ENC28J60+uIP 基于TCP的MODBUS IO示例
  C720H5上实现MODBUS远程IO
  ENC28J60+uIP HTTP GET方式将温度数据上传到web服务器
  FM1702读写S50(也叫M1)卡相关资料


/********************************
  AVR单片机I/O口读74HC165接口程序 
  文件名:serin.c
  编译:WinAVR-20070525

  硬件:ATMEGA16  时钟:7372800 Hz

  此程序在硬件上调试通过!    
  
  芯艺设计室 2004-2007  版权所有 
  转载请保留本注释在内的全部内容
  WEB: http://www.chipart.cn
  Email: changfutong@sina.com
*******************************/

#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);

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






声明:芯艺工作室(http://www.chipart.cn)保留所有权力,转载请注明出处!

芯艺工作室    蒙ICP备06005492号

Copyright© 2004-2020 ChipArt Studio All Rights Reserved