搜索
bottom↓
回复: 1

ATMEGA16内部8M + 18B20 (IAR下调试通过)

[复制链接]

出0入0汤圆

发表于 2014-8-21 21:41:42 | 显示全部楼层 |阅读模式
这是最重要的延时函数(delay.h文件)

#ifndef __DELAY_H__
#define __DELAY_H__
#include "intrinsics.h"
#define F_CPU 8000000
#define delay_us(A) __delay_cycles( (unsigned long)((double)(F_CPU) *((A)/1000000.0) + 0.5))
#define delay_ms(A) __delay_cycles( (unsigned long)((double)(F_CPU)*((A)/1000.0) + 0.5))
#define delay_s(A)  __delay_cycles( (unsigned long)((double)(F_CPU)*((A)/1.0) + 0.5))  
#endif

下面18B20程序(ds18b20.c)

#include "ds18b20.h"
#include "iom16.h"
#include "delay.h"

#define DQ_OUT DDRD_Bit6=1
#define DQ_IN  DDRD_Bit6=0

#define DQ_CLR  PORTD_Bit6=0
#define DQ_SET  PORTD_Bit6=1      
#define DQ_R    PIND_Bit6

uchar rst_18b20()                            //18B20复位
{
        uchar a;
        DQ_OUT;
        delay_us(1);
        DQ_CLR;
        delay_us(500);
        DQ_SET;
        delay_us(55);
        DQ_IN;
        delay_us(1);
        a=DQ_R;        
        DQ_OUT;
        DQ_SET;
        delay_us(400);
        if(a) return 1;//初始化失败
        else return 0; //初始化成功
}

void write_18b20(uchar x)           //18B20写一个字节数据
{
        uchar i;
        for(i=0;i<8;i++)
        {
                DQ_SET;
                delay_us(1);                //稍作延时
                DQ_CLR;                       //启动写时序
                //DQ=x&0x01;                  //向数据线传送最低位
                if(x&0x01) DQ_SET;
                else       DQ_CLR;
               
                delay_us(40);               //延时约50us,供18b20采样数据
                DQ_SET;                       //释放总线
                delay_us(1);
                x>>=1;                      //右移一位
        }
        delay_us(2);                    //写完一个指令稍作延时
}

uchar read_18b20()                  //18B20读一个数据
{
        uchar i=0,dat;
        for(i=0;i<8;i++)
        {
                dat>>=1;
                DQ_CLR;
                delay_us(6);
                DQ_SET;
                delay_us(8);
                DQ_IN;
                delay_us(1);
                if(DQ_R) dat|=0x80;
                delay_us(45);
                DQ_OUT;
                DQ_SET;
                delay_us(10);
        }
        return(dat);
}

void ready_18b20()                  //18B20初始化
{
        rst_18b20();                    //复位
        write_18b20(0xcc);              //跳过序列号操作
        write_18b20(0x44);              //启动温度转换
        delay_ms(200);                  //温度转换时间
        rst_18b20();                    //复位
        write_18b20(0xcc);              //跳过序列号操作
        write_18b20(0xbe);              //读取数据
}

float Temperature_read()            //温度读取函数
{
        uchar TL;                       //定义低字节
        uint TH;                        //定义高字节
        uint TempH,TempL,temp;
        float temperature;              //定义温度
        ready_18b20();                        //18B20初始化
        TL=read_18b20();                //读低字节
        TH=read_18b20();                //读高字节
        TH<<=8;
        temp=TH+TL;
        if(temp&0x8000)                        //如果温度为负
        {
                temperature=-1;             //温度负号标志
                temp=~temp;                 //取反加1
                temp+=1;
        }
        else                            //温度为正
        {
                temperature=1;              //温度正号标志
        }
        TempH=temp>>4;
        TempL=temp&0x0F;
        TempL=TempL*6/10;               //小数近似处理
        temperature*=(TempH+0.1*TempL);        //计算温度
        return temperature;             //返回温度值
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2014-8-22 16:46:05 | 显示全部楼层
写的不错。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 09:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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