用8243扩展I/O口

8243介绍

8243共有4个4位的并行I/O端口,即P4、P5、P6、P7口,这4个端口均可独立地设置为输入口或输出口。由于各端口均为4位。因此,十分适宜用于BCD码的输入/输出。如图8243引脚图,具体引脚说明如下。 
PROG:地址/数据传送选通信号线。
P2.0~P2.3:数据/地址和控制信号输入端,由PROG信号控制选择P4、P5、P6、P74个4位双向I/O口。

 CS:片选信号。 
PROG信号用于选择P2口的功能。在进行输入/输出时,先通 过P2口传送选择端口及端口操作方式的控制命令,该命令由PROG的下跳沿所存至8243内部的指令寄存器和地址译码器,而进行的数据传送,由PROG的上跳沿将数据通过指定的端口输入/输出。P2传送命令时,由P2.1和P2.0指定端口地址,由P2.3和P2.2规定端口的工作方式,各位具体的定义如表所

P2.1P2.0端口地址P2.3P2.2端口工作方式
00P400输入
01P501输出
10P610
11P711

 

 

8243的P2口负责传送控制命令、输入/输出数据,所以需要将P2口与单片机的I/0口直接相连,PROG信号另外用1个单片机的I/O接口产生,CS片选直接接地,保证8243始终选通。应用中,可以用一个I/O 接口产生片选信号。具体接口电路如图所示。
 

 

单片机串口驱动8243代码

#include <STC89C5xRC.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;

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

void main()
{
	while(1)
	{
		char receive_data;
		receive_data=driver8243(1,1,5);
	}
}

char driver8243(char sele_P,char sele_M,char out_data)
{
	char in_data;
	char data_buf;
	PROG=1;
	//打开控制 端口工作方式
	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&0x02)==0)//8243的P2.3
		ContrBit3=0;
	else
		ContrBit3=1;
	//以上两位控制端口工作模式
	
	PROG=0;
	//在PROG上产生下降沿
	switch(sele_M&0x03)//判断工作模式
	{
		case 0:break;//sele_M=0x00为输入,不处理,等待上升沿
		case 1:data_buf=out_data;break;//sele_M=0x01 为输出,直接送出数据
		case 2:data_buf=out_data;break;//sele_M=0x02 为逻辑或,直接送出数据
		case 3:data_buf=out_data;break;//sele_M=0x03 为逻辑与,直接送出数据
	}
	PROG=1;//产生上升沿
	if((sele_M&0x03)==0)
		in_data=(data_buf&0x0f);
	return (in_data);
//sele_M=0x00  返回接收到的数据
//sele_M!=0x00  返回0
}









 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_橘子汽水_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值