请教C51 sbit定义的变量通过函数参数传递进函数内部的问题

2020-01-13 18:34发布

本帖最后由 mangolu 于 2018-11-10 19:09 编辑

如题,是一个74HC595传送数据的函数,如下面:
  1. /** 定义DS数据端口连接 */
  2. sbit HC595_DS                = P2 ^ 1;
  3. /** 定义SH_CP移位时钟端口连接 */
  4. sbit HC595_SH_CP        = P2 ^ 0;

  5. /** 定义ST_CP锁存时钟端口连接 */
  6. sbit HC595_ST_CP        = P2 ^ 2;

  7. /** 定义DS输出低电平的方法 */
  8. #define HC595_DS_LOW                (HC595_DS = 0)
  9. /** 定义DS输出高电平的方法 */
  10. #define HC595_DS_HIGH                (HC595_DS = 1)
  11. /** 定义SH_CP输出低电平的方法 */
  12. #define HC595_SH_CP_LOW                (HC595_SH_CP = 0)
  13. /** 定义SH_CP输出高电平的方法 */
  14. #define HC595_SH_CP_HIGH        (HC595_SH_CP = 1)
  15. /** 定义ST_CP输出低电平的方法 */
  16. #define HC595_ST_CP_LOW                (HC595_ST_CP = 0)
  17. /** 定义ST_CP输出高电平的方法 */
  18. #define HC595_ST_CP_HIGH        (HC595_ST_CP = 1)

  19. void HC595_Send_Data(unsigned char ucData) {
  20.     unsigned char ucI;

  21.     for(ucI = 0; ucI < 8; ucI ++) {
  22.         HC595_SH_CP_LOW;

  23.         HC595_DS = (ucData & 0x80);

  24.         HC595_SH_CP_HIGH;
  25.         ucData <<= 1;
  26.     }

  27. }
复制代码

因为我这个发送函数直接把sbit定义的HC595_DS、HC595_SH等引脚包含在里面,当我的系统中要使用两组以上的74HC595总线时,我这个函数就要重装写过。我现在想要实现的功能是在函数的参数里添加一个变量比如:
  1. void HC595_Send_Data(PORT *port, unsigned char ucData)
复制代码
这样通过PORT这个参数,把sbit定义的引脚传替进去。但是试了几种方法,sbit这个他定义出来的又不是什么具体的变量,无法传进去。请教大家,谁有比较好的解决方法?还是只能一个总线写一个函数才能解决?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
wye11083
1楼-- · 2020-01-14 19:41
mangolu 发表于 2018-11-10 19:53
本来我是想这样传递:

位操作是单独的指令,不是可以动态生成的变量。所以不能直接传递。这个无解,也许有大牛能做出来。我是在义愤用if()else()去做的。
mangolu
2楼-- · 2020-01-14 23:52
 精彩回答 2  元偷偷看……
mcu5i51
3楼-- · 2020-01-15 01:44
#define H595_0_PORT P2
.....       H595_0_PIN    0x01
...
H595_0_PORT |= H595_0_PIN;
...

没有位操作的不是这样吗,多了1-2条指令,要比if...else之类的快些

一周热门 更多>