[PIC®/AVR®/dsPIC®产品] 请教版主,这个问题我真的被难到了

[复制链接]
1816|12
 楼主| youzikun 发表于 2015-6-11 20:43 | 显示全部楼层 |阅读模式
问题是这样的,有一块PIC16F877A的板子,实现IIC对多个同类型传感器数据的读取,IO模拟IIC协议,传感器没有挂在同一总线,每组IIC接口都是独立的,传感器器件地址相同,怎样依次读取传感器数据?

我做的事情:把寄存器直接作为参数传入:
void IIC_Start(bit IIC_SDA,bit IIC_SCL);    //这样子声明出错,说bit没有定义
void IIC_Start(bit IIC_SDA,bit IIC_SCL)
{
        IIC_SDA=1;
        Delay_10us();
        IIC_SCL=1;
          Delay_10us();

        IIC_SDA=0;
        Delay_10us();
        IIC_SCL=0;
          Delay_10us();
}


void IIC_Start(RA0,RB0);

我知道一组可以用#define   IIC_SDA    RA0  这样写,但是我想每组IO都能重复调用模拟IIC协议的函数。
真不知道该怎么办了,身边也没有人能请教,这个问题已经困扰我好久了,能否给一小段范例程序学习一下,万分感激!!

wuhenyouyu 发表于 2015-6-11 20:59 来自手机 | 显示全部楼层
我的思路是传指针,回头我试试!
 楼主| youzikun 发表于 2015-6-11 21:04 | 显示全部楼层
wuhenyouyu 发表于 2015-6-11 20:59
我的思路是传指针,回头我试试!

:)有结果了交流一下哈,非常感谢:loveliness:
lgq1542380129 发表于 2015-6-11 21:16 | 显示全部楼层
愚认为:用IO口的地址。形参是指针。应该行的。

评分

参与人数 1威望 +3 收起 理由
youzikun + 3 很给力!

查看全部评分

 楼主| youzikun 发表于 2015-6-12 10:45 | 显示全部楼层
lgq1542380129 发表于 2015-6-11 21:16
愚认为:用IO口的地址。形参是指针。应该行的。

能示范一下吗?:loveliness:
 楼主| youzikun 发表于 2015-6-12 11:02 | 显示全部楼层
lgq1542380129 发表于 2015-6-11 21:16
愚认为:用IO口的地址。形参是指针。应该行的。

是这样吗?实参可以直接用RA0,RB0这样吗?

void IIC_Start(char *SCL,char *SDA)
{
        *SDA=1;
        Delay_10us();
        *SCL=1;
          Delay_10us();

        *SDA=0;
        Delay_10us();
        *SCL=0;
          Delay_10us();
}
lgq1542380129 发表于 2015-6-12 11:12 | 显示全部楼层
你的单片机IO有地址的吧,用地址就可了。32的位带操作那样

评分

参与人数 1威望 +3 收起 理由
youzikun + 3 很给力!

查看全部评分

wuhenyouyu 发表于 2015-6-12 13:40 | 显示全部楼层

我试了,用地址是没问题的,但是,也不是很方便,发个实例,我调试通过:

void        TEST_IO(volatile near unsigned char* IO,unsigned char n,BOOL value)
{
        unsigned char        a;
        unsigned char        b;
        a=*IO;
        b=0x01;
        b=b<<n;
        if(value)
        {
                *IO=a | b;
        }
        else
        {       
                b=~b;
                *IO=a & b;
        }
}

评分

参与人数 1威望 +3 收起 理由
youzikun + 3 很给力!

查看全部评分

lvyunhua 发表于 2015-6-12 19:55 | 显示全部楼层
还能这样用,学习了。
949155525 发表于 2015-6-12 20:32 来自手机 | 显示全部楼层
绝对地址操作io   话说你为啥一根线挂一个?那么i2c意义何在?
sanxinweiled 发表于 2015-6-13 10:33 | 显示全部楼层
讲解一下.......
yewuyi 发表于 2015-6-15 12:56 | 显示全部楼层
做一个中间变量映射到IO口上,然后操作这个中间变量即可。
esthrth 发表于 2015-6-18 16:34 | 显示全部楼层
“每组IIC接口都是独立的,传感器器件地址相同”
我有点懵,为啥要这样做

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

本版积分规则

11

主题

60

帖子

0

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