问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

...不知道哪里出错了。请教高手指点。(附上程序)

提问网友 发布时间:2025-01-22 01:45
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
3个回答
热心网友 回答时间:2025-01-22 02:28
#include <avr/io.h>
#include<avr/interrupt.h>
#include<avr/signal.h>

#define uint unsigned int
#define uchar unsigned char
#define INT8U unsigned char

/*18B20*/
#define CLR_DIR_1WIRE DDRD&=~(0x80) //只要修改这里的参数就可以了!呵呵!
#define SET_DIR_1WIRE DDRD|=(0x80) //里面什么都不用该!
#define CLR_OP_1WIRE PORTD&=~(0x80)
#define SET_OP_1WIRE PORTD|=(0x80)
#define CHECK_IP_1WIRE (PIND & 0x80) //检测

unsigned char tem;
unsigned char H_tem,L_tem;
unsigned char wmh,wml;
uchar s[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};

/*延时函数 */

void delayus(unsigned int i)
{
while(i--);
}
void delayms(unsigned int ms) //10us延时函数
{
while(ms--)
{
delayus(1000);
}
}

/* 18B20 函数*/
unsigned char wmh,wml;

//-------------延时程序------------------------
void delay_3us(void) //3us延时函数
{
;
}
void delay_10us(void) //10us延时函数
{
unsigned int i;
for (i=0;i<2;i++);
}
void delay_30us(void) //30us延时函数
{
unsigned int n;
for(n=10;n>0;n--)
asm("nop");
}
void delay_600us(void) //600us延时函数
{
unsigned.
int i;
for(i = 0;i < 49;i ++)
delay_10us();
}
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<407;i++);
}

void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}

///////////18b20初始化/////////////////////
void init_1820()
{
SET_DIR_1WIRE; //设置PD0 为输出
SET_OP_1WIRE;
CLR_OP_1WIRE;
delay_600us(); //480us以上
SET_OP_1WIRE;
CLR_DIR_1WIRE;
delay_30us(); //15~60us
while(CHECK_IP_1WIRE);
SET_DIR_1WIRE;
SET_OP_1WIRE;
delay_30us();
delay_30us();
delay_30us();
delay_30us(); //60~240us
}
/////////写入///////////////////
void write_1820(unsigned char x)
{
unsigned char m;
for(m=0;m<8;m++)
{
CLR_OP_1WIRE;
if (x&(1<<m)) //写数据了,先写低位的!
SET_OP_1WIRE;
else
{CLR_OP_1WIRE;}
delay_30us(); //15~60us
SET_OP_1WIRE;
}
SET_OP_1WIRE;
}
////////////读出//////////////////////
unsigned char read_1820()
{
unsigned char temp,k,n;
temp=0;
for(n=0;n<8;n++)
{
CLR_OP_1WIRE;
SET_OP_1WIRE;
CLR_DIR_1WIRE;
k=(CHECK_IP_1WIRE); //读数据,从低位开始
if(k)
temp|=(1<<n);
else
temp&=~(1<<n);
delay_30us();
delay_30us(); //60~120us
SET_DIR_1WIRE;
}
return (temp);
}

///////////////读取温度值////////////////////////////

void gettemp(void)
{
unsigned char temh,teml,wm0,wm1,wm2,wm3;
init_1820(); //复位18b20
write_1820(0xcc); // 发出转换命令
write_1820(0x44);

init_1820();
write_1820(0xcc); //发出读命令
write_1820(0xbe);
teml=read_1820(); //读数据
temh=read_1820();
wm0=teml>>4; //只要高8位的低四位和低8位的高四位,温度范围0~99啦!
wm1=temh<<4;
wm2=wm1+wm0; //16进制转10进制
wm3=wm2/100;
wmh=(wm2%100)/10; //出口参数了!wmh是显示的高位,wml使显示的低位
wml=(wm2%100)%10;

}

这个是我做过的 一个关于18B20的 驱动程序 是AVR 的 楼主可以参考一下
热心网友 回答时间:2025-01-22 02:27
先看程序有问题没,如果程序没问题的话,那就是硬件电路处问题了,估计你是DS18B20接反了,要不就是DS18B20温度传感器是个坏的,用万用表检查下就知道
热心网友 回答时间:2025-01-22 02:29
呵呵 最近我呀在研究这个问题

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

...温度启动动不了还是其他问题,请各位大侠帮忙看看,不甚感激! #i_百... 谁看看我的程序,数码管只显示小数点,不显示18b20测出的温度怎么回事,18b... 酷睿i7各代cpu参数对比 新鲜海蛰怎么做好吃 什么是散装货物 废旧物资仅包括废下金属和废旧非金属吗 为什么国内特钢厂不要进口的废钢 ...的堆密度为3吨/³m计算料罐一次能装多少废钢。 牧神记中秦牧 实心墙计算单位图标是什么 户型图标蓝是什么意思 ...在装修阶段的室内地坪上看到了这样的图标不知道是什么意思?求... 装修识图(厨房篇)!HJSJ 火车k56016车厢定员多少人 酶的分离和纯化方法是什么 生化知识点28:核酶的催化机,发现的意义及其应用 【医学生期末复习资料】生物化学名词解释 2013汪峰珠海演唱会的门票可不可以在网上买啊?这样比较方便啊。。_百... 2102珠海航展什么时候开始卖门票?在哪可以买?当天在门口还能买到票么... 赶场网购买珠海航展票是真实的嘛? 魔兽世界斑点魔尾鱼的烹饪图纸在那里卖?还是杀什么怪掉? 俞敏洪培训学校 俞敏洪什么地方人 苏州大学学费标准 河南高考一千名能上什么学校 350-360分文科上哪些大学 河北高考前一千名能考什么大学 高考563分文科可以上哪些大学 四有:管理有标准、执行有措施、过程有跟踪、责任有考核,这应该怎么写... 财政收入什么意思 武夷星铁罗汉乌龙茶-适用对象 夷岩茶铁罗汉冲泡方法步骤 铁罗汉茶的功效与作用 铁罗汉茶的存储方法 铁罗汉茶怎么泡好喝 铁罗汉茶的冲泡方法 铁罗汉茶如何泡 铁罗汉茶的正确泡法 淘宝主图放大后变形是怎么回事? 淘宝主图清晰度 淘宝图片空间图片为什么模糊?有哪些原因? 他是有名富豪,花两万元伪造古董,被鉴定价值24亿,骗贷6亿元,是谁呢? 急!借读要办什么手续
Top