jianhong_wu 发表于 2015-9-12 08:43:20

如何用任意散乱的8个IO口合并成一个并口,可以读取或者输出8位数据?已解答。

问:
如何用任意散乱的8个IO口合并成一个并口,可以读取或者输出8位数据?

★坚鸿-深圳:
其实也可以用联合结构体来做,但是对于初学者可能不好理解,所以下面直接用简单通俗的写法来举例子:
#include "REG52.H"


//任意IO口
sbit IO_0=P2^3;
sbit IO_1=P0^0;
sbit IO_2=P1^2;
sbit IO_3=P3^5;
sbit IO_4=P2^4;
sbit IO_5=P0^2;
sbit IO_6=P1^3;
sbit IO_7=P3^7;



void bus_out(unsigned char u8BusData); //并口输出一个字节8位数据

unsigned char get_bus(void); //读取IO总线

unsigned char Gu8Test;

void main()
{
bus_out(0x55); //并口输出0x55数据.
Gu8Test=get_bus(); //读取IO总线

while(1);
}


void bus_out(unsigned char u8BusData) //并口输出一个字节8位数据
{

IO_0=u8BusData&0x01;
IO_1=(u8BusData>>1)&0x01;
IO_2=(u8BusData>>2)&0x01;
IO_3=(u8BusData>>3)&0x01;
IO_4=(u8BusData>>4)&0x01;
IO_5=(u8BusData>>5)&0x01;
IO_6=(u8BusData>>6)&0x01;
IO_7=(u8BusData>>7)&0x01;

}



unsigned char get_bus(void) //读取IO总线
{
unsigned char u8GetData;
IO_0=1; //51单片机在读取数据前先置1,其它非准IO口的单片机可以不用
IO_1=1; //51单片机在读取数据前先置1,其它非准IO口的单片机可以不用
IO_2=1; //51单片机在读取数据前先置1,其它非准IO口的单片机可以不用
IO_3=1; //51单片机在读取数据前先置1,其它非准IO口的单片机可以不用
IO_4=1; //51单片机在读取数据前先置1,其它非准IO口的单片机可以不用
IO_5=1; //51单片机在读取数据前先置1,其它非准IO口的单片机可以不用
IO_6=1; //51单片机在读取数据前先置1,其它非准IO口的单片机可以不用
IO_7=1; //51单片机在读取数据前先置1,其它非准IO口的单片机可以不用


u8GetData=u8GetData|IO_7;
u8GetData=u8GetData<<1;

u8GetData=u8GetData|IO_6;
u8GetData=u8GetData<<1;


u8GetData=u8GetData|IO_5;
u8GetData=u8GetData<<1;


u8GetData=u8GetData|IO_4;
u8GetData=u8GetData<<1;


u8GetData=u8GetData|IO_3;
u8GetData=u8GetData<<1;


u8GetData=u8GetData|IO_2;
u8GetData=u8GetData<<1;


u8GetData=u8GetData|IO_1;
u8GetData=u8GetData<<1;


u8GetData=u8GetData|IO_0;

return u8GetData;
}

页: [1]
查看完整版本: 如何用任意散乱的8个IO口合并成一个并口,可以读取或者输出8位数据?已解答。