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.1 | P2.0 | 端口地址 | P2.3 | P2.2 | 端口工作方式 |
0 | 0 | P4 | 0 | 0 | 输入 |
0 | 1 | P5 | 0 | 1 | 输出 |
1 | 0 | P6 | 1 | 0 | 或 |
1 | 1 | P7 | 1 | 1 | 与 |
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
}