找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3244|回复: 0
打印 上一主题 下一主题
收起左侧

avr单片机DS18B20温度读取程序-母亲节的礼物

[复制链接]
跳转到指定楼层
楼主
ID:26188 发表于 2015-6-23 15:02 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
今天是母亲节,祝福我的母亲健康长寿。



/*DS18B20读取温度字节程序    本函数花了我不少时间,主要问题是在51可以的情况下他却不行,知道今天才解决,原来是部分延时函数数值不对,造成的
  所以虽然做过也未见得好用,切不可粗心大意,AVR内部8M晶振,20110508   天津第四项目部宿舍   */
#include <iom16v.h>
#define uchar unsigned char
#define uint unsigned int
#define get_bit(a,b)   a&(1<<b)
#define set_bit(a,b)   a|=(1<<b)
#define clr_bit(a,b)   a&=~(1<<b)

void delay600us()
{
uint a;
for(a=1600;a;a--);

}
void delay60us()
{uchar a;
for(a=160;a;a--);
}
/*        复位18B20          */
/*       无参                */
/*       无返回              */
void rest_18b20()
{
set_bit(DDRA,4);//开启PA口得输出模式
  set_bit(PORTA,4);
;;
   clr_bit(PORTA,4);
delay600us();
set_bit(PORTA,4);
  delay60us();
clr_bit(DDRA,4);
while(get_bit(PINA,4));//判断有无器件在单总线上
delay600us();
set_bit(DDRA,4);
  
}

/*写DS18B20函数*/
/*传递参数为dat表示要向1820写入的数据字节*/
/*无返回值*/
            
void write_18b20(uchar dat)
{
   uchar i,j;
  
   set_bit(DDRA,4);
   for(j=0;j<8;j++)
{


   clr_bit(PORTA,4);
  for(i=26;i;i--);
  if(get_bit(dat,j))
  {set_bit(PORTA,4);}
  else
  clr_bit(PORTA,4);
  for(i=160;i;i--);
set_bit(PORTA,4);

}


  
}

/*读DS18B20函数*/
/*无参*/
/*返回读出的温度值*/
uchar read_18b20()
{
  uchar date,i,k;
  
  for(i=0;i<8;i++)
  {
  set_bit(DDRA,4);
clr_bit(PORTA,4);
for(k=10;k;k--);
  set_bit(PORTA,4);
for(k=18;k;k--);
   clr_bit(DDRA,4);
  if(get_bit(PINA,4))
  { set_bit(date,i);  }
  else
  clr_bit(date,i);
  for(k=160;k;k--);
  }
return (date);
}

void delay100ms()
{
  unsigned char a,b,c;
    for(c=95;c>0;c--)
        for(b=138;b>0;b--)
            for(a=29;a>0;a--);

}
void main()
{

DDRC=0xff;
DDRA=0xff;
PORTA=0xff;
while(1)
{
rest_18b20();


write_18b20(0xcc);
write_18b20(0x44);
delay100ms();      //主要是让1820有足够的时间去处理内部AD

  rest_18b20();

write_18b20(0xcc);
write_18b20(0xbe);
PORTC=read_18b20();//简单的显示    仅此而已
}
  
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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