打印
[其他ST产品]

DS18b20 与 ST7flite29 问题

[复制链接]
2391|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dangerb_cn|  楼主 | 2007-11-9 11:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个是小弟自己写的DS18b20的初始化程序
请高人指点


#include "ST7FLITE29.h"                // ST7FLITE2 

void delay(unsigned int n)
{
 for(;n>0;n--)
            ;
}

void reset()
{   
        PADDR  = 0X01;
        PAOR   = 0X00;
        PADR  = 0X01;
        PADR  = 0X00;拉低总线
        delay (96);//550us
        PADDR  = 0X00;释放总线
        delay (8) ;//55us
        PBDR  = PADR;判断响应 0有效 1 失败
        delay  (36);//
}
沙发
浪淘沙| | 2007-11-9 11:46 | 只看该作者

就放这么几行程序,要指点什么?

DDR寄存器和OR寄存器是用来配置I/O管脚的,通常在程序初始化时进行配置,一旦配置好I/O管脚的用途,程序运行过程中是不需要在对这两个寄存器进行操作了。所以不知为什么会有“PADDR = 0X00;释放总线”。

另外你的程序中用到PBDR,但没看到你如何配置PB端口,也许是在其它地方设置的。

使用特权

评论回复
板凳
dangerb_cn|  楼主 | 2007-11-9 12:48 | 只看该作者

是按照DS18B20的时隙写的

void reset()
{   
        PADDR  = 0X01;
        PAOR   = 0X00;
        PADR  = 0X01;
        PADR  = 0X00;拉低总线产生下降沿
        delay (96);//550us
        PADDR  = 0X00;此时释放总线后由于外部上拉电阻的存在会产生个上升
                      延,DS18b20在检测到该上升延后会在15-60 Us后产生
                      持续时间为60-240的低电平响应。
        delay (8) ;//55us
        PBDR  = PADR;判断响应 0有效 1 失败
        delay  (36);//
}

使用特权

评论回复
地板
浪淘沙| | 2007-11-9 13:24 | 只看该作者

如果你是要把PA0先配置成“开路输出”再配置成“输入”是

如果你是要把PA0先配置成“开路输出”再配置成“输入”是可以这样做的。

还是不知道你要问什么,但是我没用过你那个DS18B20。

使用特权

评论回复
5
dangerb_cn|  楼主 | 2007-11-9 14:06 | 只看该作者

DS18b20与ST7flite29 温度采集

下面的是小弟手写的DS18b20与ST7flite29 的温度采集程序

请大家参考

有问题的话请大虾指点迷津

#include "ST7FLITE29.h"                // ST7FLITE2 

void delay(unsigned int n)
{
 for(;n>0;n--)
            ;
}

void reset(void)
{   
        PADDR  = 0X01;
        PAOR   = 0X00;
        PADR  = 0X01;
        PADR  = 0X00;
        delay (96);//550
        PADDR  = 0X00;
        delay (8) ;//55
        PBDR  = PADR;
        delay  (36);//
}
void w_byte(char val)
{
char i;
for(i=8;i>0;i--)
{
 PADDR=0X01;//拉低总线 产生写时隙
 PADR =val&0X01;
 delay(6);//
 PADR = 0X01;
 val>>=1;
 }
delay(1);//写间隙大于1 us
}
 r_byte(void)
{
     char  i;
     char value = 0 ;
     for(i=8;i>0;i--)
        {
             value>>=1;
             PADR =0X01;
             PADDR = 0X01;
             PADDR = 0X00;
             delay(1);
             if(PADDR) value|=0x80;
             delay(10);
          }
        return(value);
}

void main()
{ char c0=0,c1=0;
    reset();
    w_byte(0xcc);
    w_byte(0xbe);
    c1=r_byte();
    c0=r_byte();
    reset();
    w_byte(0xcc);
  w_byte(0x44);
}    

使用特权

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

本版积分规则

6

主题

25

帖子

1

粉丝