历史上的今天
今天是:2024年11月19日(星期二)
2019年11月19日 | avr单片机DS18B20温度读取程序-母亲节的礼物
2019-11-19 来源:51hei
/*DS18B20读取温度字节程序 本函数花了我不少时间,主要问题是在51可以的情况下他却不行,知道今天才解决,原来是部分延时函数数值不对,造成的
所以虽然做过也未见得好用,切不可粗心大意,AVR内部8M晶振,20110508 天津第四项目部宿舍 */
#include
#define uchar unsigned char
#define uint unsigned int
#define get_bit(a,b) a&(1<#define set_bit(a,b) a|=(1<#define clr_bit(a,b) a&=~(1<
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();//简单的显示 仅此而已
}
}
下一篇:基于AVR的SCCB读写程序
史海拾趣
|
为了以后更好的在改装成510的modem上升级firmware,这次我教大家做一条modem跟电脑通讯的数据线,然后就可以对modem内的flash rom重新分配空间,那么就可以装下完整的510的firmware,就算以后有高版本的firmware,都可以稍微改一下标识就可以直接拿 ...… 查看全部问答> |
|
本人在做一个东西,用到SiI3114芯片,这个芯片是把PCI端口和SATA硬盘连接起来的。 注:PCI端口是用的DM642的PCI端口. 现在遇到的问题是 SiI3114有没有什么开发环境去开发它本身的BIOS,就像51单片机有 ...… 查看全部问答> |
|
如何运行U-boot目录下examples下的hello_world.c 在U-boot下的examples下有hello_world.c和其它几个.c文件,还有mips.lds和Makefile,从网上查得是这几个.c文件经过编译后可以在U-boot下运行,即在裸机下运行。我的板子是MIPS的,请问如何在我的板子上的U-boot上运行这个hello_world呢? 哎!三 ...… 查看全部问答> |
|
拜问下 大虾们 SPI1 和 SPI2 都设定为双线双工 , SPI1 主 SPI2 从 在 通讯的时候 SPI1 向 SPI2 发送数据 SPI2 能接收 但是&nbs ...… 查看全部问答> |
|
replyreload += \',\' + 1110631;STM32的IAP方案 几乎所有的同类书籍都介绍综合性的应用示例如“万年历 + 温度显示 + 闹钟响铃 + 计时表”这样的一个实时时钟范例或“STM32 + 音频解码 + 大容 ...… 查看全部问答> |
|
#include<stdio.h>#include<reg51.h>//实例12:用自增运算控制P0口8位LED流水花样#include<reg51.h> //包含单片机寄存器的头文件/******************************************************函数功能:延时一段时间************** ...… 查看全部问答> |




