|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
问:
如何用任意散乱的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;
- }
复制代码
|
|