打印

PSOC一总线测温元件DS18B20驱动测试程序

[复制链接]
4144|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ni_labview|  楼主 | 2008-6-4 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可以用了,有需要者进一步完善,感谢SIMENS MR Zheng近日在此上的热情帮助,中断方式需待继续完善,大家共同努力


#define W1_INPUT    1
#define W1_OUTPUT    0
#define P0  PRT0DR
#define DQ  PRT0DR&0x04



void DQ_LOW()
{
PRT0DM2&=~0x04;
PRT0DM1|=0x04;
PRT0DM0|=0x04;
P0&=~0x04;
}

void DQ_HIGH()
{
PRT0DM2&=~0x04;
PRT0DM1|=0x04;
PRT0DM0&=~0x04;
}

void delay(unsigned int x)
{
unsigned int d;
d=x;
while(--d)
{;}
}
BYTE reset(void)//初始化18B20 
{
static BYTE presence;//定义一个应答信号     
DQ_LOW();
delay(70);  //置总线为低电平并保持至少480us 

DQ_HIGH(); //等电阻拉高总线并保持15-60us 

delay(5);
presence=DQ; //接受应答信号 
delay(20); //延时60-240us 

return(presence);//返回应答信号 
}

//***************   读一位函数******************// 

BYTE read_bit(void)
{
static BYTE i;

DQ_LOW();
DQ_LOW();
DQ_HIGH();
asm("nop");
asm("nop");
asm("nop");
i=DQ;

delay(3);
return(i);
}

//*********************写一位函数****************// 

void write_bit(unsigned char  bitval)
{
DQ_LOW();
delay(1);

if (bitval==1)
    {
    DQ_HIGH();
    }
delay(3);
DQ_HIGH();
}

//**************  从18B20中读一个字节**************// 

unsigned char  read_byte(void)
{
unsigned char  i;
unsigned char  j;
unsigned char  value=0;

for (i=0;i<8;i++)
    {
    j=read_bit();//调读位函数 
    if (j)//如果是 1 置1 
        {
        value|=(0x01<<i); //先读低位,再读高位 
        asm("nop");
        asm("nop");
        asm("nop");
        }
    } 
return(value);
}

//*********************向18B20中 写一个字节**************// 

void write_byte(unsigned char  val)
{
unsigned char  i;
unsigned char  temp;

for (i=0;i<8;i++)
    {
    temp=val>>i;
    temp&=0x01;
    write_bit(temp);//调写位函数 
    }
asm("nop");
asm("nop");
asm("nop");
}

void main()
{
unsigned char  teml,temh;
INT T;
INT Temperatur;
BYTE outstr[17];

M8C_EnableGInt; // Enable Global interrupts    

while(1)
    {
    do{
      ;
    }while (reset()) ; //复位等待从机应答 
    write_byte(0XCC);//忽略ROM匹配 
    write_byte(0X44);//发送温度转化命令 


    delay(25000);//延时100-300us 
    do
    {
    ;
    }while( reset());//再次复位,等待从机应答 

    write_byte(0XCC);//忽略ROM匹配 
    write_byte(0XBE);//发送读温度命令 
    teml =read_byte();//读出温度低8        
    temh=read_byte();//读出温度高8位 
    
    DQ_HIGH();//释放总线 
    
    }
}
沙发
PSoC_Rock| | 2008-6-5 11:27 | 只看该作者

很有价值!

DS18B20价几何?带独一无二地址吗?

使用特权

评论回复
板凳
ni_labview|  楼主 | 2008-6-10 13:09 | 只看该作者

DS18B20有唯一地址,我目前没用

目前是一根I/O对应一个传感器,替代热敏电阻用,大家可以用地址方式,我是在北京中发随便抓的八个大洋一支,很好买,好在用时精度不特别高时根本不用标校,比热敏电阻省事不少,还省了模拟口

使用特权

评论回复
地板
PSoC_Rock| | 2008-6-10 13:45 | 只看该作者

热敏电阻才一个大洋

使用特权

评论回复
5
ni_labview|  楼主 | 2008-6-10 14:00 | 只看该作者

石头GG,这DS18B20能传挺远啊,看到中心机房里都是这鸟东西

看来一总线还是有其独特市场,不同活用不同货,帮俺弄个新版C编译器怎样,真的好想“你"

使用特权

评论回复
6
PSoC_Rock| | 2008-6-10 14:54 | 只看该作者

有道理

寸有所长,尺有所短!

有去苏州吗?怎么没来上海?还想请你喝酒呢!

使用特权

评论回复
7
yewuyi| | 2008-6-10 15:03 | 只看该作者

DS18B20能传远?

呵呵,你试试……


如果不用屏蔽你看看它能传多远?


DS18B20不是一个好东西,花一个大洋可以买两个NTC……


另外别忘了,DS18B20需要三根线,多根线也多了不少钱。
当然,也有人说,俺窃电用2根线做,嘿嘿,2根线可不是什么时候都成立的哦。

DS18B20的通信机制决定了在长线的时候,通信失败的非常多,因为信号振铃或者反射了,所以超过10M的DS18B20采集系统,都建议使用屏蔽线,嘿嘿,屏蔽线你知道有多贵吗?

使用特权

评论回复
8
ni_labview|  楼主 | 2008-6-10 15:06 | 只看该作者

刚把夫人从震区接回来,看情况,上海一定要去

关键是谁出路费啊,我穷得叮当响,师傅都快把我清理门户了。总得找个财东啊出钱,一定去上海找你和大家喝酒,最好坐飞机,可以免费喝,上次去成都路上免费喝了几听,感觉比送钱的感觉更直接,和国企时过节送一捆大葱那样自豪,哈哈哈

使用特权

评论回复
9
ni_labview|  楼主 | 2008-6-10 15:42 | 只看该作者

线径小的屏蔽线每米价格比普通燕京啤酒便宜多了

可惜成分不对不能喝

使用特权

评论回复
10
yewuyi| | 2008-6-10 16:05 | 只看该作者

和非屏蔽线的价格比就贵太多了……

除非是劣质屏蔽线。

再用50M计算呢?

现在的燕京啤酒也不知道多少¥,估计怎么着也要¥3把,比非屏蔽的要贵一半,按50M计算,那就是¥75元,哈哈,死掉一片……

使用特权

评论回复
11
ni_labview|  楼主 | 2008-6-10 16:30 | 只看该作者

货卖用家,他们用DS18B20也不会用啤酒布线

我只会买啤酒,普燕这边卖2.7元
反正我不会去买屏蔽线,因为我没钱,我买了也不需要,我买了不用还浪费,不要乱扔东西呀,唉,乱扔东西是不对……哎呀话没有说完你怎么把棍子也扔掉了?屏蔽线也花钱,乱扔它会污染环境,唉,砸到小朋友怎么办?就算砸不到小朋友砸到花花草草也不好嘛!
哈哈,非行为艺术,俺只品啤酒





悟空他要吃我,只不过是一个构思,还没有成为事实,你又没有证据,他又何罪之有呢?不如等他吃了我之后,你有凭有据,再定他的罪也不迟啊!

使用特权

评论回复
12
xwj| | 2008-6-10 16:34 | 只看该作者

其实远距离最省线钱的方法还是自己做单线通讯终端

而最可靠又省线的方法是4线测电阻法,不怕干扰,任何垃圾线都可以



偶以前做医疗设备时用过高阻测温系统,为避免传感器、导线在高频高场强电场下自身发热的影响,传输线用的是导线电阻8M欧姆的渗碳纤维丝

使用特权

评论回复
13
ni_labview|  楼主 | 2008-6-11 14:25 | 只看该作者

我目前在测量仪器上是用的四线PT100

接法和安捷伦多通道记录仪一样,用的是AD779X系列AD,性能还凑合

使用特权

评论回复
14
PSoC_Rock| | 2008-6-12 10:22 | 只看该作者

请问12楼


"传输线用的是导线电阻8M欧姆的渗碳纤维丝"

8M欧姆,这么高的导线阻抗怎么传输信号?

使用特权

评论回复
15
over_chain| | 2011-3-28 21:37 | 只看该作者
本人初学,请问楼主这个程序是多少晶振的?

使用特权

评论回复
16
qiangzhefengfan| | 2013-11-1 20:15 | 只看该作者
请问楼主,开头的几个define语句是什么意思?PRT0DM0有定义吗?还有那个程序能直接写到 Psoc3里面去吗?

使用特权

评论回复
17
jxin| | 2013-11-4 11:44 | 只看该作者
楼上,这个帖子很老了,估计楼主不太可能会来回答你的问题了
你可能还不了解 PSoC1 和PSoC3使用完全不同的两个平台,完全不同的编译器

使用特权

评论回复
18
qiangzhefengfan| | 2013-11-6 23:19 | 只看该作者
jxin 发表于 2013-11-4 11:44
楼上,这个帖子很老了,估计楼主不太可能会来回答你的问题了
你可能还不了解 PSoC1 和PSoC3使用完全不同的 ...

哦,谢谢你的提醒。顺便请教一下,你知道怎么用PSoC Creator来读取DS18B20的数据吗?

使用特权

评论回复
19
kk5290122| | 2013-11-8 23:16 | 只看该作者
lz弄的不错……

使用特权

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

本版积分规则

178

主题

624

帖子

2

粉丝