打印
[PIC®/AVR®/dsPIC®产品]

请教版主,这个问题我真的被难到了

[复制链接]
1459|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 很给力!
5
youzikun|  楼主 | 2015-6-12 10:45 | 只看该作者
lgq1542380129 发表于 2015-6-11 21:16
愚认为:用IO口的地址。形参是指针。应该行的。

能示范一下吗?:loveliness:

使用特权

评论回复
6
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();
}

使用特权

评论回复
7
lgq1542380129| | 2015-6-12 11:12 | 只看该作者
你的单片机IO有地址的吧,用地址就可了。32的位带操作那样

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
youzikun + 3 很给力!
8
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 很给力!
9
lvyunhua| | 2015-6-12 19:55 | 只看该作者
还能这样用,学习了。

使用特权

评论回复
10
949155525| | 2015-6-12 20:32 | 只看该作者
绝对地址操作io   话说你为啥一根线挂一个?那么i2c意义何在?

使用特权

评论回复
11
sanxinweiled| | 2015-6-13 10:33 | 只看该作者
讲解一下.......

使用特权

评论回复
12
yewuyi| | 2015-6-15 12:56 | 只看该作者
做一个中间变量映射到IO口上,然后操作这个中间变量即可。

使用特权

评论回复
13
esthrth| | 2015-6-18 16:34 | 只看该作者
“每组IIC接口都是独立的,传感器器件地址相同”
我有点懵,为啥要这样做

使用特权

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

本版积分规则

11

主题

60

帖子

0

粉丝