打印

请教一个程序算法!

[复制链接]
1253|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
victech|  楼主 | 2009-12-10 22:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎样在程序中把一些杂乱无序的IO映射到一个有序的数据结构里?
示意程序如下(但程序是错误的,宏定义有问题)
#include "AT898252.h"
...
#define OUT(0) P3_2     
#define OUT(1) P1_1
...
#define OUT(7) P2_0

...
main()
{
      unsigned char i;
       ...
       for(i=0;i<8;i++)
       {
              OUT(i)  = 1;           //IO操作
       }
}

硬件已经不能修改了,一定要用软件实现,请各位高手帮忙!谢谢!

相关帖子

沙发
awmc_m| | 2009-12-10 22:27 | 只看该作者
本帖最后由 awmc_m 于 2009-12-10 23:03 编辑

最繁琐却是最不费脑筋的就是:

一个一个一个一个……的操作

另外,定义一个可位寻址的变量bdata也许可以,你可以试一下。

bdata uchar out_data;

sbit out_data^0 = p3^1;
sbit out_data^1 = p2^0;
……

main()
{
      out_data = 0xff;
}

使用特权

评论回复
板凳
lxyppc| | 2009-12-11 09:17 | 只看该作者
// 如果有位域,直接用位域地址做

// 如果没有位域,可以这样,只是个参考,编译器不同写法也要不同
typedef  _IOBit
{
  unsigned char*  port; // 不同的编译器要对port加不同的修饰才能编译出正确的代码
  unsigned char   bitMask;
}IOBit;

const IOBit   IOMap[8] =
{
  {GPIOA, 1<<1},
  {GPIOA, 1<<3},
  {GPIOA, 1<<7},
  {GPIOA, 1<<3},
  {GPIOB, 1<<1},
  {GPIOC, 1<<2},
  {GPIOC, 1<<3},
  {GPIOB, 1<<4},
};

#define   SetBit(x)   *IOMap[(x)].port |= IOMap[(x)].bitMask
#define   ClearBit(x)   *IOMap[(x)].port &= ~IOMap[(x)].bitMask

// 置1
for(int i=0;i<8;i++){
  SetBit(i);
}

// 清零
for(int i=0;i<8;i++){
  ClearBit(i);
}

使用特权

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

本版积分规则

2

主题

36

帖子

0

粉丝