AVR 18B20程序

发布者:DelightfulWish最新更新时间:2017-12-17 来源: eefocus关键字:AVR  18B20程序 手机看文章 扫描二维码
随时随地手机看文章

#include    //包含型号头文件 
#include    //包含"位"操作头文件 
#include    //标准输入输出头文件 
#include   //包含自定义常量头文件 

#include "SMG.C"   //包含数码管显示函数 

/******************************************* 
函数名称: B20_init 
功    能: 复位DS18B20 
参    数: 无 
返回值  : 无 
/********************************************/ 
void B20_init(void) 

 DDRA|=BIT(DS18B20);   //配置为输出  
  PORTA|=BIT(DS18B20); 
  Delayus(10);     
 PORTA&=~BIT(DS18B20);   //拉低 
 Delayus(750);     //等待600微秒 
 PORTA|=BIT(DS18B20);   //释放总线 
 Delayus(60);     //等待60微秒 
 DDRA&=~BIT(DS18B20);   //配置为输入  
 while((PINA&(BIT(DS18B20)))); //等待DS18B20拉低 
 while(!(PINA&(BIT(DS18B20)))); //等待DS18B20释放总线 

/******************************************* 
函数名称: B20_readB 
功    能: 读取一个字节的数据 
参    数: 无 
返回值  : retd--返回的一个字节数据 
/********************************************/ 
uchar B20_readB(void) 

 uchar i,retd=0; 
  
 for(i=0;i<8;i++)     //位计数值 
 { 
  retd>>=1;      //右移,准备接受新的数据位 
  DDRA|=BIT(DS18B20);   //配置为输出 
  PORTA&=~BIT(DS18B20);   //拉低,启动读数据位 
  PORTA|=BIT(DS18B20);   //释放总线 
  Delayus(5);     //等待5微秒 
  DDRA&=~BIT(DS18B20);   //配置为输入,开始读取数据位 
  if(PINA&BIT(DS18B20))   //该位是否为高 
  { 
   retd|=0x80;     //是就将此位置高 
  } 
  Delayus(50);     //等待50微秒 
 } 
 return retd;     //将读到的一个字节返回 

/******************************************* 
函数名称: B20_writeB 
功    能: 写入一个字节的数据 
参    数: wrd--要写入的数据 
返回值  : 无 
/********************************************/ 
void B20_writeB(uchar wrd) 

 uchar i; 
 for(i=0;i<8;i++)            //位计数值 
 { 
  DDRA|=BIT(DS18B20);   //配置为输出 
  PORTA&=~BIT(DS18B20);   //拉低,启动写数据位 
  Delayus(1);     //等待1微秒 
  if(wrd&0x01)     //此位数据是否为高 
  { 
   PORTA|=BIT(DS18B20);   //是高则将单总线拉高 
  } 
  else 
  { 
   PORTA&=~BIT(DS18B20);  //是低则将单总线拉低 
  } 
  Delayus(50);     //等待50微秒 
  PORTA|=BIT(DS18B20);   //释放总线 
  wrd>>=1;      //右移,为写入新的数据位做准备 
 } 
 Delayus(50);     //等待50微秒 

/******************************************* 
函数名称: Read_temp 
功    能: 读取温度值 
参    数: 无 
返回值  : rettemp--返回的温度值 
/********************************************/ 
uint Read_temp(void) 

 uchar templ,temph; 
 uint temp; 
 B20_init();       //初始化,每次写命令都从初始化开始 
 B20_writeB(0xCC);    //跳过ROM 
 B20_writeB(0x44);    //启动温度转换 
 B20_init();       //初始化,每次写命令都从初始化开始 
 B20_writeB(0xcc);    //跳过ROM 
 B20_writeB(0xbe);    //读寄存器 
 templ=B20_readB();   //读温度低字节 
 temph=B20_readB();   //读温度高字节 
 temp=templ+temph*256;//将温度整理成16位变量 
 return temp;       //返回16位变量 

/******************************************* 
函数名称: Num_BCD 
功    能: 将一个字节的整数转换成三位BCD码 
参    数: num--需要转换的整数 
返回值  : chr--三位BCD码数组指针 
/********************************************/ 
uchar* Num_BCD(uint num) 

 uchar i,chr[3];    
 uchar *rept; 
 rept=&(chr[0]);   //返回指针指向BCD码数组 
 for(i=0;i<3;i++) 
 { 
  chr[2-i]=num%10;   //对10取余数(其实是求模,但是对于正数,取余与求模是相等的) 
  num/=10;     //除以10,为取出下一位做准备 
 } 
 return rept;    //返回指针 

/******************************************* 
函数名称: main 
功    能: 完成温度的读取与显示 
参    数: 无 
返回值  : 无 
/********************************************/ 
void main(void) 

 uint t; 
 uchar *temppt; 
 uchar i,temp[3]; 
 Board_init( );    //初始化开发板 
 while(1) 
 { 
  t=Read_temp();   //读取温度值 
  t*=0.625;     //转换成实际温度的10倍 
    while(t==850) 
  { 
        t=Read_temp();   //读取温度值 
        t*=0.625;  
  } 
   
  temppt=Num_BCD(t);//将实际温度的10倍转换成BCD码 

  for(i=0;i<3;i++) //将转换后的BCD码存入显示数组 
  { 
   temp[i]=*(temppt+i); 
  } 
  for(i=0;i<3;i++)     //显示温度 
  { 
   if(i==1) 
   { 
    temp[1]+=16;    //如果是各位,则加上小数点(数码管的译码数组有所改变,读者可以看10_DS18B20文件夹下的SMG.C文件) 
   } 
   One_smg_display(temp[i],i+1);     
   Delayms(5); 
  } 
 } 


关键字:AVR  18B20程序 引用地址:AVR 18B20程序

上一篇:ATmega128并行控制带字库的12864程序
下一篇:红外遥控器的接收实验

推荐阅读最新更新时间:2024-03-16 15:49

AVR ASF4库函数学习笔记】二、GPIO
平台:Microchip Studio (原Atmel Studio 7) 欣世纪 DMAVR-L Atmega 128A - AU 头文件为port.h 枚举类型 enum port_pull_mode { PORT_PULL_OFF, PORT_PULL_UP, }; enum port_dir { PORT_DIR_IN, PORT_DIR_OUT, PORT_DIR_OFF, }; 函数 X = ABCDEFG static inline bool PORTX_get_pin_level(const uint8_t pin) 读取连接到端口的引脚上的电平 stat
[单片机]
基于AVR的语音识别助老助残室内行走服务系统设计方案
1.1 引言 目前,全世界60岁以上的老年人口已达到6亿左右,人口老龄化已成为世界范围的重大社会问题。我国60岁及以上老年人口已达1.32亿,占全国总人口的10%,并以年均3.32%的速度持续增长。预计到2015年,60岁以上的人口将超过2亿,约占总人口的14%,其中老年病患者约有50%需要护理服务。此外,我国还有各类残疾人约6千万,约占我国总人口的5%。因此,我国合计需要进行护理的人口大约为1亿人。人口的加速老龄化使医疗和社会保险系统面临着前所未有的压力。在我国的13亿人口中,家庭约3~4亿,有功能障碍者或需看护人员的家庭,占全国家庭总户数的1/10,约3577万左右。各类残疾人和长期卧床老年人的大量存在,使得助老助残问题正日益
[单片机]
基于<font color='red'>AVR</font>的语音识别助老助残室内行走服务系统设计方案
AVR--IO结构分析
下图为AVR单片机通用I/O口的基本结构示意图。从图中可以看出,每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=ABCD)。I/O口的工作方式和表现特征由这3个I/O口寄存器控制。 方向控制寄存器DDRx用于控制I/O口的输入输出方向,即控制I/O口的工作方式为输出方式还是输入方式。 当DDRx=1时,I/O口处于输出工作方式。此时数据寄存器PORTx中的数据通过一个推挽电路输出到外部引脚(图6-2)。AVR的输出采用推挽电路提高了I/O口的输出能力,当PORTx=1时,I/O引脚呈现高电平,同时可提供输出20mA的电流;而当PORTx=0时,I/O引脚
[单片机]
<font color='red'>AVR</font>--IO结构分析
AVR单片机学习笔记
下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。 1、 AVR单片机采用RISC 架构 ,8051单片机采用CISC架构。前者速度为后者的2~4倍,为流水线操作指令 2、 AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器 3、 哈佛结构,131条机器指令 4、 延迟开机功能 5、 内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟 6、 FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10位ADC+模拟比较器+JTAG
[单片机]
ds1302的avr C程序
下面是DS1302的AVR单片机的C程序,这个程序结构很不错。但是站长没有调试这个AVR单片机的程序。 #define ds1302_rst PC0 #define ds1302_io PC1 #define ds1302_sclk PC2 #define set_ds1302_rst_ddr() DDRC|=1 ds1302_rst #define set_ds1302_rst() PORTC|=1 ds1302_rst #define clr_ds1302_rst() PORTC&=~(1 ds1302_rst) #define set_ds1302_io_ddr() DDRC|=1 ds1302_io #defi
[单片机]
AVR汇编程序里加入EPROM数据的方法与应用实例
其实一个虚拟指令可以达到这个目的。 ESEG指令定义开始的EEPROM部分。汇编源文件可以包含几个EEPROM的部分,这是串连成一个单一的EEPROM部分组装时。一个EEPROM的部分通常只包括数据库和数据仓库的指示(和标签) 。该EEPROM的阶层有自己的位置计数器这是一个字节计数器。ORG指令可以用来放置在特定地点的变数中的EEPROM。该指令不接受任何参数。 Syntax: .ESEG Example: .DSEG ; Start data segment var1: .BYTE 1 ; reserve 1 byte to var1 table: .BYTE tab_size ; reserve tab_size bytes
[单片机]
基于AVR单片机的新型防汽车追尾安全装置设计
1 引言 随着我国汽车保有量逐年增加,高速公路的发展使得汽车的行驶速度越来越快。车流量也越来越大,导致高速公路交通事故频频发生,其发生率甚至达到普通公路的4倍,且有上升趋势。在高速公路所发生的交通事故中尤以汽车追尾居多,约占30%~40%,而在这些事故中,80%以上的事故是由于司机反应不及时或者判断失误引起的。由于目前只有高档车型才配有防碰撞装置,而且以往设计中只单纯考虑在车前或车后安装防碰撞装置,不尽全面,所以设计一套低成本、通用性好的汽车防车前车后追尾的安全装置具有广阔的应用和市场前景。因此。这里提出一种基于AVR的新型防汽车追尾安全装置设计。 2 安全装置组成和硬件电路设计 安全装置硬件电路设计主要由单片
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved