问个问题,大家看下

[复制链接]
3227|17
 楼主| mamalihui 发表于 2007-9-4 16:11 | 显示全部楼层 |阅读模式
我想定义一下51单片机P2口的高四位,用一个变量表示,大家有没有好的办法啊,指教一下
 楼主| 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位
conwh 发表于 2007-9-4 17:40 | 显示全部楼层

随便整了

dudongdao 发表于 2007-9-4 18:04 | 显示全部楼层

能定义8位就能定义4位

   这个道理就不用说了吧~~  不知道还有其他的方法吗~~  请高手跟贴~
王紫豪 发表于 2007-9-4 19:39 | 显示全部楼层

re

1、用结构体的位域;
2、自己写个51的c编译器,增加一个4位的变量;
ayb_ice 发表于 2007-9-4 19:45 | 显示全部楼层

KEIL里是没有办法了...

walnutcy 发表于 2007-9-4 22:16 | 显示全部楼层

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

huangqi412 发表于 2007-9-4 22:52 | 显示全部楼层

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

ayb_ice 发表于 2007-9-5 07:38 | 显示全部楼层

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

除非给端口建立个映象RAM,先对映象RAM操作,再发送到端口,但是多此一举...
computer00 发表于 2007-9-5 08:40 | 显示全部楼层

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

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

这个东西直接用位操作就行了。
 楼主| 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;}
 楼主| mamalihui 发表于 2007-9-5 08:44 | 显示全部楼层

有人说用位域效率低

而且容易出错,是这样吗
HWM 发表于 2007-9-5 09:00 | 显示全部楼层

MCS51中的P2是可以位寻址,

直接用其位地址就可以了(如楼上定义的)
另外,位域操作具有一般性,在不具备位寻址的MCU上最终还是落实到字或字节操作。
gyt 发表于 2007-9-5 10:46 | 显示全部楼层

赞成12楼的意见

guoqi 发表于 2007-9-5 11:49 | 显示全部楼层

switch case

那么多的switch case看着都头大!
直接读P2口,然后右移4bit不就出来了
dwq175 发表于 2007-9-5 12:05 | 显示全部楼层

使用(P2&0x0f)|data

您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

226

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部