18B20

[复制链接]
 楼主| alaic123 发表于 2013-4-23 14:54 | 显示全部楼层 |阅读模式
本人想弄多个18B20,每个都对应独立的IO口,相同时实现温度的读取,单个以无问题,但不想重复多遍程序,但不知如何能重复利用程序代码。请各位大神指点。十分感谢
ayb_ice 发表于 2013-4-23 15:37 | 显示全部楼层

#define GPIO_DS18B20        P0

对IO操作时传递个参数
#define DS18B20_NO1   (1<<0)
#define DS18B20_NO2   (1<<1)
#define DS18B20_NO3   (1<<2)
#define DS18B20_NO4   (1<<3)

然后程序中的IO拉高拉低用

void xxxx_func(U8 b)
{
        GPIO_DS18B20 |= b;
        
}


void main(void)
{
        xxxx_func(DS18B20_NO1);
        xxxx_func(DS18B20_NO2);
}

 楼主| alaic123 发表于 2013-4-23 16:16 | 显示全部楼层
ayb_ice 发表于 2013-4-23 15:37
#define GPIO_DS18B20        P0

对IO操作时传递个参数

那我拉低的时候相当于所有io口都同时拉低?
ayb_ice 发表于 2013-4-23 16:41 | 显示全部楼层
alaic123 发表于 2013-4-23 16:16
那我拉低的时候相当于所有io口都同时拉低?

说了传参数,根据参数处理相应IO即可
yuyi21ic 发表于 2013-4-23 22:52 | 显示全部楼层
LS正解。。 把IO口当成一个参数。
 楼主| alaic123 发表于 2013-4-24 15:40 | 显示全部楼层
ayb_ice 发表于 2013-4-23 16:41
说了传参数,根据参数处理相应IO即可

能再详细点吗  比如我原先sbit DS=P2^0;void dsreset()
{
        DS=0;
        delay_1us(500);
        DS=1;
        delay_1us(60);
}
怎么用IO取代 谢谢啦
ayb_ice 发表于 2013-4-24 16:21 | 显示全部楼层
void reset(U8 gpio_no)
{
        if(gpio_no == 0){
                DS0 = 0;
        }else
        if(gpio_no == 1){
                DS1 = 0;
        }
        ...
}
 楼主| alaic123 发表于 2013-4-25 10:43 | 显示全部楼层
ayb_ice 发表于 2013-4-24 16:21
void reset(U8 gpio_no)
{
        if(gpio_no == 0){

这个不明白 DS0=0;这个DS0的值给谁的?? 实在是不知道
ayb_ice 发表于 2013-4-25 13:27 | 显示全部楼层
alaic123 发表于 2013-4-25 10:43
这个不明白 DS0=0;这个DS0的值给谁的?? 实在是不知道

是DQ不是DS

sbit DQ0 = P1^0;   // 第一个
sbit DQ1 = P1^1;   // 第二个
...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:LIFE

3

主题

54

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:LIFE

3

主题

54

帖子

0

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