专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机io扩展

作者:佚名   来源:本站原创   点击数:  更新时间:2007年07月07日   【字体:

下面介绍两种单片机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

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

 

关闭窗口

相关文章