智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4637|回复: 3
打印 上一主题 下一主题

[采集类] 求用K60的DS18B20测温程序

[复制链接]

5

主题

99

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3624
威望
1822
贡献
1194
兑换币
1053
注册时间
2012-11-26
在线时间
304 小时
跳转到指定楼层
1#
发表于 2013-7-30 20:25:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献


刚刚开始学习K60,用51测温程序改了一下,,,,可是无论如何都采集不了温度值,,希望大神可以帮忙解决一下!
用野火的底层库写的。

附件: 您需要 登录 才可以下载或查看,没有帐号?注册

5

主题

99

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3624
威望
1822
贡献
1194
兑换币
1053
注册时间
2012-11-26
在线时间
304 小时
2#
 楼主| 发表于 2013-7-30 20:39:41 | 只看该作者
/******************** (C) COPYRIGHT 2011 野火嵌入式开发工作室

********************
* 文件名       :main.c
* 描述         :基于MK60DN512Z***10的ds18b20测温程序
*
*
* 作者         :
* 时间       :
* 技术支持论坛 :http://www.ourdev.cn/bbs/bbs_list.jsp?bbs_id=1008
**********************************************************************************/



#include "common.h"
#include "include.h"


#define D0 PTD0_OUT
#define D1 PTD1_OUT
#define D2 PTD2_OUT
#define D3 PTD3_OUT
#define D4 PTD4_OUT
#define D5 PTD5_OUT
#define D6 PTD6_OUT
#define D7 PTD7_OUT



//#define D0 L




void  main(void)
{
    gpio_init  (PORTD, 0, GPO, HIGH);           //初始化 PTD15 :输出高电平 ,即 初

始化 LED3,灭
    gpio_init  (PORTD, 1, GPO, HIGH);
    gpio_init  (PORTD, 2, GPO, HIGH);
    gpio_init  (PORTD, 3, GPO, HIGH);
    gpio_init  (PORTD, 4, GPO, HIGH);
    gpio_init  (PORTD, 5, GPO, HIGH);
    gpio_init  (PORTD, 6, GPO, HIGH);
    gpio_init  (PORTD, 7, GPO, HIGH);


    gpio_init  (PORTD, 7, GPO, HIGH);

    DisableInterrupts;                                //禁止总中断

    pit_init_ms(PIT0, 500);                          //初始化PIT0,定时时间为: 500ms

    EnableInterrupts;                                      //开总中断
//    L=0;
    while(1)
    {
//       time_delay_us(500);
  //测温在中断服务程序中 isr.c 文件
    }
}

/******************** (C) COPYRIGHT 2011 野火嵌入式开发工作室 ********************
* 文件名       :isr.c
* 描述         :中断处理例程
*
* 实验平台     :野火kinetis开发板
* 库版本       :
* 嵌入系统     :
*
* 作者         :野火嵌入式开发工作室
* 淘宝店       :http://firestm32.taobao.com
* 技术支持论坛 :http://www.ourdev.cn/bbs/bbs_list.jsp?bbs_id=1008
**********************************************************************************/



#include "common.h"
#include "include.h"

#define DQ PTE0_OUT

/**********************************************************************
* 函数名称:Delay_ms();Delay_us();
* 函数功能:延时函数
* 入口参数:
* 出口参数:
* 修改人  :
* 修改时间
**********************************************************************/
/******延时ms******/
void Delay_ms(uint16 mt)
{
    uint16 mx, my;
    for(mx = 7800; mx > 0; mx--)
        for(my = mt; my > 0; my--);
}
/******延时us******/
void Delay_us(uint16 ut)
{
    uint16 ux, uy;
    for(ux = 0; ux <= 800; ux++)
        for(uy = ut; uy > 0; uy--);
}

/*------------------------------------------------
                    18b20初始化
------------------------------------------------*/
u8 Init_DS18B20(void)
{
u8 dat=0;
DQ = 1;    //DQ复位
Delay_us(5);   //稍做延时
DQ = 0;         //单片机将DQ拉低
Delay_us(200); //精确延时 大于 480us 小于960us
Delay_us(200);
DQ = 1;        //拉高总线
Delay_us(50); //15~60us 后 接收60-240us的存在脉冲
dat=gpio_get(PORTE, 0);        //如果x=0则初始化成功, x=1则初始化失败
Delay_us(25); //稍作延时返回
return dat;
}

/*------------------------------------------------
                    读取一个字节
------------------------------------------------*/
u8 ReadOneChar(void)
{
u8 i=0;
u8 dat = 0;
for (i=8;i>0;i--)
{
  DQ = 0; // 给脉冲信号
  dat>>=1;
  DQ = 1; // 给脉冲信号
  if(DQ)
   dat|=0x80;
  Delay_us(25);
}
return(dat);
}
/*------------------------------------------------
                    写入一个字节
------------------------------------------------*/
void WriteOneChar(u8 dat)
{
u8 i=0;
for (i=8; i>0; i--)
{
  DQ = 0;
  DQ = dat&0x01;
  Delay_us(25);
  DQ = 1;
  dat>>=1;
}
Delay_us(25);
}

/*------------------------------------------------
                    读取温度
------------------------------------------------*/
u16 ReadTemperature(void)
{
u8 a=0;
u16 b=0;
u16 t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Delay_ms(10);
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar();   //低位
b=ReadOneChar();   //高位

b<<=8;
t=a+b;

return(t);
}
void PIT0_IRQHandler(void)
{
    s16 temp;
    float temperature;

        temp=ReadTemperature();
        temperature=(float)temp*0.0625;//处理室温值

        if(temperature<28.0)
          GPIO_SET_8bit(PORTD, 0, 0xfc);
        else if(temperature<30.0)
          GPIO_SET_8bit(PORTD, 0, 0xf0);
        else if(temperature<32.0)
          GPIO_SET_8bit(PORTD, 0, 0xc0);
        else
          GPIO_SET_8bit(PORTD, 0, 0x00);

        //D7=~D7;


  PIT_Flag_Clear(PIT0);       //清中断标志位
}



回复

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
146
威望
86
贡献
42
兑换币
44
注册时间
2015-6-10
在线时间
9 小时
毕业学校
华北电力大学
3#
发表于 2016-5-3 17:34:26 | 只看该作者
你解决了没?
回复

使用道具 举报

5

主题

99

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3624
威望
1822
贡献
1194
兑换币
1053
注册时间
2012-11-26
在线时间
304 小时
4#
 楼主| 发表于 2016-5-22 12:10:36 | 只看该作者
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-25 14:06 , Processed in 0.059611 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表