搜索
bottom↓
回复: 34

怎样把单片机的8个不同管脚定义成同一个IO口??

[复制链接]

出0入0汤圆

发表于 2011-7-14 11:49:33 | 显示全部楼层 |阅读模式
比如把 51单片机的P0^1  P0^0  P0^2  P0^3  和 P2^0 P2^1 P2^2 P2^3  定义成  PA口  可以进行位操作??

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-7-14 12:07:31 | 显示全部楼层
还以为定义成一个IO呢,原来是一组
软件处理一下吧
P0=(P0&0xf0)|(temp&0x0f);P2=(P1&0xf0)|(temp>>4);

出50入4汤圆

发表于 2011-7-14 12:15:39 | 显示全部楼层
映射

出0入0汤圆

发表于 2011-7-14 12:23:01 | 显示全部楼层
1楼改为:
P0=(P0&0xf0)|(temp&0x0f);
P2=(P2&0xf0)|(temp>>4);

出0入0汤圆

发表于 2011-7-14 12:23:39 | 显示全部楼层
留意下,

出0入0汤圆

发表于 2011-7-14 12:50:01 | 显示全部楼层
回复【2楼】zhuyi25762
映射
-----------------------------------------------------------------------

agree

出0入0汤圆

 楼主| 发表于 2011-7-22 03:01:54 | 显示全部楼层
谢谢  大侠

出0入0汤圆

 楼主| 发表于 2011-7-22 03:17:14 | 显示全部楼层
映射的不懂怎么搞法   能不能具体点?

出0入0汤圆

发表于 2011-7-22 07:59:44 | 显示全部楼层
1、3楼的temp应该改为RA

不知这样楼主能否看懂了?

出0入0汤圆

发表于 2011-7-22 15:27:59 | 显示全部楼层
其实就是写一个函数把他们分开赋值,之后就当调用函数不就得了。

出0入0汤圆

 楼主| 发表于 2011-7-23 16:08:31 | 显示全部楼层
不懂哦

出0入0汤圆

 楼主| 发表于 2011-7-23 16:10:08 | 显示全部楼层
怎么让 P0  P1  的部分口  集在PA上  直接操作PA ?

出0入0汤圆

 楼主| 发表于 2011-7-23 16:11:12 | 显示全部楼层
可以  这样子  PA^0=1;

出0入0汤圆

发表于 2011-7-23 17:22:26 | 显示全部楼层
可以在软件上做文章啊,就是做成一个数组啊,想要给什么数据就什么数据啊

出0入0汤圆

发表于 2011-7-24 15:19:18 | 显示全部楼层
映射???不懂

出0入0汤圆

发表于 2011-7-25 10:00:46 | 显示全部楼层
有两种方法回复【楼主位】jetimchen  
-----------------------------------------------------------------------

1.
sbit Va=P1^0;                   //定义IO口,具体可以去查看原理图
sbit Vb=P1^1;                   //定义IO口,具体可以去查看原理图
sbit Vc=P1^2;                   //定义IO口,具体可以去查看原理图
sbit Vd=P1^3;                   //定义IO口,具体可以去查看原理图
sbit Ve=P2^0;                   //定义IO口,具体可以去查看原理图
sbit Vf=P2^1;                   //定义IO口,具体可以去查看原理图
sbit Vg=P2^2;                   //定义IO口,具体可以去查看原理图
sbit Vh=P2^3;                   //定义IO口,具体可以去查看原理图


sbit PA0=PA^0;
sbit PA1=PA^1;
sbit PA2=PA^2;
sbit PA3=PA^3;
sbit PA4=PA^4;
sbit PA5=PA^5;
sbit PA6=PA^6;
sbit PA7=PA^7;

然后定义PA  再让pa0=va依次类推


pa=((p1&0x0f)<<4)|(p2&0x0f)

出0入0汤圆

发表于 2011-7-25 10:37:42 | 显示全部楼层
先把8个IO定义成一个口,然后再分开成8个IO,有意义吗?

出0入0汤圆

发表于 2011-7-25 10:54:15 | 显示全部楼层
IO端口和IO引脚貌似两个不同的概念

出0入0汤圆

发表于 2011-8-13 10:47:49 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-13 11:03:23 | 显示全部楼层
回复【楼主位】jetimchen  
-----------------------------------------------------------------------

楼主,说说我的想法
你若想位操作的话,就不用定义PA口
你若想字节操作的话,写个函数,函数里面把数据拆分,然后赋值给位

出0入0汤圆

发表于 2011-11-29 22:08:57 | 显示全部楼层
我也想知道这个怎么做,哪位大侠讲解下

出0入0汤圆

发表于 2013-12-22 17:10:43 | 显示全部楼层
正在弄lcd,io口分散的,有了这就能弄成一个了

出0入0汤圆

发表于 2013-12-22 17:43:27 | 显示全部楼层
我用了,怎么报错啊

出0入0汤圆

发表于 2013-12-22 22:07:36 | 显示全部楼层
在汇编里
直接进行位操作就可以了

出0入85汤圆

发表于 2013-12-22 22:38:51 | 显示全部楼层
用共同体

出0入0汤圆

发表于 2013-12-22 23:10:18 | 显示全部楼层
共同体M-A-R-K!

出0入0汤圆

发表于 2013-12-29 15:15:36 | 显示全部楼层
我在做数码管电子钟时,不用PCB直接接连数码管和单片机时,就遇到这种情况,需要定义不同管脚成为同一组,作为段码。有没有人写个详细的操作方法,让刚入门的我们学习一下啊。

出0入8汤圆

发表于 2013-12-29 15:16:34 | 显示全部楼层
写一个函数

出0入0汤圆

发表于 2013-12-29 22:01:02 | 显示全部楼层
HDIY 发表于 2013-12-29 15:15
我在做数码管电子钟时,不用PCB直接接连数码管和单片机时,就遇到这种情况,需要定义不同管脚成为同一组, ...

  1. void PORT_Assignment(unsigned char WriteData)
  2. {
  3.         if (WriteData & 0x01)        {dataPortO = 1;}else{dataPortO = 0;}
  4.         if (WriteData & 0x02)        {dataPort1 = 1;}        else{dataPort1 = 0;}
  5.         if (WriteData & 0x04)        {dataPort2 = 1;}        else{dataPort2 = 0;}
  6.         if (WriteData & 0x08)        {dataPort3 = 1;}        else{dataPort3 = 0;}
  7.         if (WriteData & 0x10)        {dataPort4 = 1;}        else{dataPort4 = 0;}
  8.         if (WriteData & 0x20)        {dataPort5 = 1;}        else{dataPort5 = 0;}
  9.         if (WriteData & 0x40)        {dataPort6 = 1;}        else{dataPort6 = 0;}
  10.         if (WriteData & 0x80)        {dataPort7 = 1;}        else{dataPort7 = 0;}
  11. }
复制代码

出0入0汤圆

发表于 2013-12-30 13:01:35 来自手机 | 显示全部楼层
楼主无聊吧。分开又不是不能操作。

出0入0汤圆

发表于 2013-12-30 13:04:53 | 显示全部楼层
davidtaoism 发表于 2011-7-25 10:00
有两种方法回复【楼主位】jetimchen  
---------------------------------------------------------------- ...

正解,很好哇

出0入0汤圆

发表于 2013-12-30 13:55:09 | 显示全部楼层
如果硬件不允许功能重定义的话没有应该办法实现;
软件的办法可以实现功能方面,但是速度会很慢通常1-2周期的IO操作会延长几倍,尤其用于LCD的驱动上,会对刷屏影响很大;
比较折中的方法就是用宏操作简单的实现,允许的话可以用汇编
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 05:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表