两种单片机IO扩展的方法和代码免费下载

电子说

1.2w人已加入

描述

  下面介绍两种单片机io扩展的方法

  !!!!用8243扩展单片机IO接口

  /*----------------------------------------------------------------------------------------------------------------

  函数名称:Config.h

  功能描述:8243端口配置

  输入参数:无

  输出参数:无

  特殊说明:在不同的单片机应用系统中,需要做相应调整

  //----------------------------------------------------------------------------------------------------------------*/

  #include 《reg52.h》

  sbit ContrBit0=P1^0;

  sbit ContrBit1=P1^1;

  sbit ContrBit2=P1^2;

  sbit ContrBit3=P1^3;

  sbit PROG =P1^4;

  sbit CS =P1^5;

  sfr data_buf=0x90;

  /*----------------------------------------------------------------------------------------------------------------

  函数名称:driver8243

  功能描述:驱动8243

  输入参数:sele_P端口选择,sele_M工作模式选择,out_data输出模式下的输出数据

  输出参数:in_data接收模式返回接收到的数据,其它模式返回0

  特殊说明:在不同的单片机应用系统中,需要做相应得调整

  //----------------------------------------------------------------------------------------------------------------*/

  #include《config.h》

  char driver8243(char sele_P,char sele_M,char out_data)

  {

  char in_data=0;

  PROG=1; //置PROG为高电平

  //开始写控制字

  if((sele_P&0x01)==0) //将控制字最低位送到8243的p2.0

  {

  ContrBit0=0;

  }

  else

  {

  ContrBit0=1;

  }

  if((sele_P&0x02)==0) //将控制字第二位送到8243的p2.1

  {

  ContrBit1=0;

  }

  else

  {

  ContrBit1=1; //以上两位共同指定端口地址

  }

  //写端口工作模式控制字

  if((sele_M&0x01)==0) //将端口工作模式控制字低位送到8243的p2.2

  {

  ContrBit2=0;

  }

  else

  {

  ContrBit2=1;

  }

  if((sele_M&0x01)==0) //将端口工作模式控制字高位送到8243的p2.3

  {

  ContrBit3=0;

  }

  else

  {

  ContrBit3=1;

  } //写控制字完成

  PROG=0; //在PROG上产生下降沿

  switch(sele_M&0x03) //判断工作模式

  {

  case 0: break; //sele_M=B00为输入,不处理,等待上升沿

  case 1: data_buf=out_data;break; //sele_M=B01为输出,直接送数据

  case 2: data_buf=out_data;break; //sele_M=B10为逻辑或,直接送数据

  case 3: data_buf=out_data;break; //sele_M=B11为逻辑与,直接送数据

  }

  PROG=1; //在PROG上产生上升沿

  if((sele_M&0x03)==0) //sele_M=B00为输入,接收数据

  in_data=(data_buf&0x0F);

  return(in_data); //sele_M=B00,返回接收到的数据

  //sele_M!=B00,返回0

  }

  void main( void)

  {

  char receive_data;

  receive_data= driver8243(1,0,5);

  }

  单片机io扩展方法2:

  =======================单片机中IO口扩展IC===================================

  单片机中IO口数量非常有限,做一些少量的外围控制还可以,如果系统稍大一些就要加外加芯片来扩展IO数量,在应用过程

  中我发现PCF8574 这款芯片非常理想具有8路的输入输出的IO口同时具有锁存功能,和MCU的通讯方式为I2C,还具有中断

  输出功能当其中一个脚拉低时,就从中断脚输出一个低电平来通知单片机响应,这样MCU就可以按自己的方式工作当有外部触

  发 时才读取PCF8574做为外部扩展按键等非常方便。

  现在这种片子在使用中由于在使用中没有规化好端口的输入输出,在具体的应用时不太符合常规,大家也有所看法,所以philips最近

  又出了一款新的IO扩展芯片打算取尔代之,地址也是和PCF8574一样它的名字叫PCA9554

  ===================================================================================

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分