8255A的c语言程序
8255A的c语言程序
【实例24】用8243扩展I/O端口
#include
sbit ContrBit0=P1^0;
sbit ContrBit1=P1^1;
sbit ContrBit2=P1^2;
sbit ContrBit3=P1^3;
sbit PROG=P1^4;
sbit CS=P1^5;
char driver8243(char sele_P,char sele_M,char out_data)
{
char in_data=0;
char data_buf;
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;
//产生上升沿
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);
}
【实例25】用8255A扩展I/O口
//----------------------------------------------------------------------------------------------------
// 函数名称:rd_PA
// 输入函数:无
// 输出参数:PA_data,PA输入的数据
// 功能说明:驱动PA实现输入功能,读入PA的并行数据
//----------------------------------------------------------------------------------------------------
unsigned char rd_PA(void) //读PA
管脚定义及函数声明
//-------------------------------------------函数声明,管脚定义--------------