打印

问个问题,大家看下

[复制链接]
2022|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mamalihui|  楼主 | 2007-9-4 16:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
mamalihui|  楼主 | 2007-9-4 16:39 | 只看该作者

来人啊,大家讨论下

讨论讨论

使用特权

评论回复
板凳
dudongdao| | 2007-9-4 16:56 | 只看该作者

好象是没有办法

   51里可以用SFR来定义端口如sfr P0    = 0x80; 其实你用
   sfr PORT0    = 0x80;来定义是一样的,这样PORT0和P0具有等同的效果,如果说sfr是变量类型定义的话,那么你说的功能就可以实现,如你可以这样定义SFR PORTX;   如果你想让PORTX指向PO,那么你就用PORTX = 0X80; 但是在KEIL C中不可以这样用,所以你说的功能也就不能实现了.这个取决于编译器是否支持.

使用特权

评论回复
地板
mamalihui|  楼主 | 2007-9-4 17:12 | 只看该作者

我说的是定义4位

你那样是定义8位

使用特权

评论回复
5
conwh| | 2007-9-4 17:40 | 只看该作者

随便整了

使用特权

评论回复
6
dudongdao| | 2007-9-4 18:04 | 只看该作者

能定义8位就能定义4位

   这个道理就不用说了吧~~  不知道还有其他的方法吗~~  请高手跟贴~

使用特权

评论回复
7
王紫豪| | 2007-9-4 19:39 | 只看该作者

re

1、用结构体的位域;
2、自己写个51的c编译器,增加一个4位的变量;

使用特权

评论回复
8
ayb_ice| | 2007-9-4 19:45 | 只看该作者

KEIL里是没有办法了...

使用特权

评论回复
9
walnutcy| | 2007-9-4 22:16 | 只看该作者

不知道你想做什么,如果应用,就做两个宏吧,别的我不想参与

使用特权

评论回复
10
huangqi412| | 2007-9-4 22:52 | 只看该作者

没必要研究这么多吧 结构体吧

使用特权

评论回复
11
ayb_ice| | 2007-9-5 07:38 | 只看该作者

结构体也没有用,因为端口是SFR...

除非给端口建立个映象RAM,先对映象RAM操作,再发送到端口,但是多此一举...

使用特权

评论回复
12
computer00| | 2007-9-5 08:40 | 只看该作者

要是C++就好了,可以重载...

楼主,其实我觉得你搞这个东西没有必要,还不如把时间花在算法上。

这个东西直接用位操作就行了。

使用特权

评论回复
13
mamalihui|  楼主 | 2007-9-5 08:43 | 只看该作者

我这样弄的大家看看行不

sbit D4=P2^4;
sbit D5=P2^5;
sbit D6=P2^6;
sbit D7=P2^7;
uchar LCM_Data;
在程序中这样处理的
 switch(LCM_Data)
     {case 0 : D4=D5=D6=D7=0;break;
      case 1 : D4=D5=D6=0;D7=1;break;
      case 2 : D4=D5=D7=0;D6=1;break;
      case 3 : D4=D5=0;D6=D7=1;break;
      case 4 : D4=D7=D6=0;D5=1;break;
      case 5 : D4=D6=0;D7=D5=1;break;
      case 6 : D4=D7=0;D5=D6=1;break;
      case 7 : D7=D5=D6=1;D4=0;break;
      case 8 : D7=D5=D6=0;D4=1;break;
      case 9 : D4=D7=1;D5=D6=0;break;
      case 10 : D4=D6=1;D7=D5=0;break;
      case 11 : D4=D7=D6=1;D5=0;break;
      case 12 : D4=D5=1;D7=D6=1;break;
      case 13 : D4=D5=D7=1;D6=0;break;
      case 14 : D4=D5=D6=1;D7=0;break;
      case 15 : D4=D5=D6=D7=1;break;}

使用特权

评论回复
14
mamalihui|  楼主 | 2007-9-5 08:44 | 只看该作者

有人说用位域效率低

而且容易出错,是这样吗

使用特权

评论回复
15
HWM| | 2007-9-5 09:00 | 只看该作者

MCS51中的P2是可以位寻址,

直接用其位地址就可以了(如楼上定义的)
另外,位域操作具有一般性,在不具备位寻址的MCU上最终还是落实到字或字节操作。

使用特权

评论回复
16
gyt| | 2007-9-5 10:46 | 只看该作者

赞成12楼的意见

使用特权

评论回复
17
guoqi| | 2007-9-5 11:49 | 只看该作者

switch case

那么多的switch case看着都头大!
直接读P2口,然后右移4bit不就出来了

使用特权

评论回复
18
dwq175| | 2007-9-5 12:05 | 只看该作者

使用(P2&0x0f)|data

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

226

帖子

0

粉丝